Subversion Repositories general

Rev

Rev 1016 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
906 dev 1
--
924 dev 2
-- hostadmiral sql tables
906 dev 3
--
1010 dev 4
-- FIXME: which values has boolean in hibernate - '1':'0' or '1':'0'?
1015 dev 5
--
906 dev 6
 
899 dev 7
create sequence hibernate_sequence;
8
 
1015 dev 9
-- version of this database structure,
10
-- one and only one entry is allowed
11
create table dbversion
12
(
1029 dev 13
	major    integer not null,         -- incremented if old structure is now useable with new code and upgrade needed
14
	                                   -- e.g. new tables, fields, new field type etc. minor is reset to 0
15
	minor    integer not null          -- incremented if some additional things changes and upgrade recomended but not
16
	                                   -- not needed, e.g. indexes
1015 dev 17
);
1029 dev 18
insert into dbversion (major, minor) values (2, 0);
1015 dev 19
 
20
-- passwords for different objects and crypted by different digests
21
create table passwords
22
(
23
	id          integer                         not null,
24
	obj         integer,                                   -- to which object belongs FIXME: schould be NOT NULL
25
	                                                       -- but hibernate makes insert first then update for obj
26
	digest      varchar(255)                    not null,  -- 'MD5', 'ENCRYPT' etc
27
	password    varchar(255)                    not null,  -- the crypted password
28
	mod_stamp   timestamp,
29
	mod_user    integer,
30
 
31
	constraint passwords_prim   primary key (id),
32
	constraint passwords_unique unique(obj, digest)
33
);
1016 dev 34
create index passwords_obj on passwords (obj);
1015 dev 35
 
899 dev 36
-- an user is allowed to:
37
--   see/use an user if he is the 'boss' or is the same user
38
--   modify password - as above
39
--   modify login - only if he is the 'boss', not of his own, and only inside some name rules (e.g. name@domain)
913 dev 40
-- 'superuser' is allowed to do anything with all objects, but cannot delete himself or modify own
899 dev 41
--   'superuser' flag (to guarantee at least one superuser exists in the system)
42
create table users
43
(
44
	id          integer                         not null,
45
	login       varchar(255)                    not null,
46
	boss        integer,
1010 dev 47
	superuser   char(1)                         default '0' check (superuser = '1' or superuser = '0'),
950 dev 48
	locale      varchar(5)                      default 'en', -- language_country
1010 dev 49
	enabled     char(1)                         default '1' check (enabled   = '1' or enabled   = '0'),
913 dev 50
	comment     text,
899 dev 51
	mod_stamp   timestamp,
52
	mod_user    integer,
53
 
54
	constraint users_prim  primary key (id),
55
	constraint users_login unique(login),
56
	constraint users_boss  foreign key (boss) references users(id)
57
);
1016 dev 58
create index users_boss on users (boss);
899 dev 59
 
949 dev 60
-- login tries. "usr" is set if the user is found only
61
create table userlogins
62
(
63
	id          integer                         not null,
64
	usr         integer,
65
	login       varchar(255)                    not null,
66
	logintime   timestamp                       not null,
67
	success     char(1)                         default '0' check (success = '1' or success = '0'),
951 dev 68
	ip          inet                            not null,
949 dev 69
 
70
	constraint userlogins_prim primary key (id),
71
	constraint userlogins_user foreign key (usr) references users(id)
72
);
1016 dev 73
create index userlogins_usrs on userlogins (usr);
949 dev 74
 
899 dev 75
-- default user admin:admin
1015 dev 76
insert into users (id, login, superuser) values (1, 'admin', '1');
77
insert into passwords (id, obj, digest, password) values (2, 1, 'MD5', '21232f297a57a5a743894a0e4a801fc3');
899 dev 78
select nextval('hibernate_sequence'); -- skip id of the default user
1015 dev 79
select nextval('hibernate_sequence'); -- skip id of the default password
899 dev 80
 
81
-- an user is allowed to see and use a system user if he is the 'owner' or the system user has no owner (null)
82
create table systemusers
83
(
84
	id          integer                         not null,
85
	uid         integer                         not null,
86
	name        varchar(255)                    not null,
87
	owner       integer,
1010 dev 88
	enabled     char(1)                         default '1' check (enabled   = '1' or enabled   = '0'),
913 dev 89
	comment     text,
899 dev 90
	mod_stamp   timestamp,
91
	mod_user    integer,
92
 
93
	constraint systemusers_prim  primary key (id),
94
	constraint systemusers_uid   unique(uid),
95
	constraint systemusers_name  unique(name),
96
	constraint systemusers_owner foreign key (owner) references users(id)
97
);
1016 dev 98
create index systemusers_owner on systemusers (owner);
899 dev 99
 
100
create table domains
101
(
102
	id          integer                         not null,
103
	name        varchar(255)                    not null,
104
	owner       integer                         not null,
1010 dev 105
	enabled     char(1)                         default '1' check (enabled   = '1' or enabled   = '0'),
913 dev 106
	comment     text,
899 dev 107
	mod_stamp   timestamp,
108
	mod_user    integer,
109
 
110
	constraint domains_prim  primary key (id),
111
	constraint domains_name  unique(name),
112
	constraint domains_owner foreign key (owner) references users(id)
113
);
1016 dev 114
create index domains_owner on domains (owner);
899 dev 115
 
116
-- name of mailbox = login + '@' + domain, e.g. user@example.com
1015 dev 117
-- if mailbox has no corresponding password entries, then owner's password is used
899 dev 118
-- FIXME: make a possibility to use global unique mailboxes
119
create table mailboxes
120
(
121
	id          integer                         not null,
122
	login       varchar(255)                    not null,
123
	domain      integer                         not null,
124
	owner       integer                         not null,
1010 dev 125
	virusCheck  char(1)                         default '1' check (virusCheck = '1' or virusCheck = '0'),
126
	spamCheck   char(1)                         default '1' check (spamCheck  = '1' or spamCheck  = '0'),
899 dev 127
	systemuser  integer,
1010 dev 128
	enabled     char(1)                         default '1' check (enabled    = '1' or enabled    = '0'),
913 dev 129
	comment     text,
899 dev 130
	mod_stamp   timestamp,
131
	mod_user    integer,
132
 
133
	constraint mailboxes_prim       primary key (id),
134
	constraint mailboxes_name       unique(login, domain),
135
	constraint mailboxes_domain     foreign key (domain)     references domains(id),
136
	constraint mailboxes_owner      foreign key (owner)      references users(id),
137
	constraint mailboxes_systemuser foreign key (systemuser) references systemusers(id)
138
);
1016 dev 139
create index mailboxes_domain on mailboxes (domain);
140
create index mailboxes_owner  on mailboxes (owner);
899 dev 141
 
142
-- email address of alias = address + '@' + domain, e.g. user@example.com
143
create table mailaliases
144
(
145
	id          integer                         not null,
146
	address     varchar(255)                    not null,
147
	domain      integer                         not null,
148
	owner       integer                         not null,
1010 dev 149
	enabled     char(1)                         default '1' check (enabled   = '1' or enabled   = '0'),
913 dev 150
	comment     text,
899 dev 151
	mod_stamp   timestamp,
152
	mod_user    integer,
153
 
154
	constraint mailaliases_prim   primary key (id),
155
	constraint mailaliases_name   unique(address, domain),
156
	constraint mailaliases_domain foreign key (domain) references domains(id),
157
	constraint mailaliases_owner  foreign key (owner)  references users(id)
158
);
1016 dev 159
create index mailaliases_domain on mailaliases (domain);
160
create index mailaliases_owner  on mailaliases (owner);
899 dev 161
 
162
create table mailaliasdests
163
(
164
	id          integer                         not null,
165
	alias       integer                         not null,
166
	mailbox     integer,
167
	email       varchar(255),
1010 dev 168
	enabled     char(1)                         default '1' check (enabled   = '1' or enabled   = '0'),
913 dev 169
	comment     text,
899 dev 170
	mod_stamp   timestamp,
171
	mod_user    integer,
172
 
173
	constraint mailaliasdests_prim    primary key (id),
174
	constraint mailaliasdests_dest    check ((mailbox notnull) or (email notnull)),
175
	constraint mailaliasdests_mailbox foreign key (mailbox) references mailboxes(id),
176
	constraint mailaliasdests_email   check ((email isnull) or (char_length(email) > 0))
177
);
1016 dev 178
create index mailaliasdests_alias   on mailaliasdests (alias);
179
create index mailaliasdests_mailbox on mailaliasdests (mailbox);