update otp_hotp() to support 6,7,8,9 digit otp's
[freeradius.git] / doc / examples / oracle.sql
1 /*
2  * $Id$
3  *
4  * Oracle schema for FreeRADIUS
5  *
6  *
7  * NOTE: Which columns are NULLable??
8  */
9
10 /*
11  * Table structure for table 'dictionary'
12  */
13 CREATE TABLE dictionary (
14         id              INT PRIMARY KEY,
15         type            VARCHAR(30),
16         attribute       VARCHAR(32),
17         value           VARCHAR(32),
18         format          VARCHAR(20),
19         vendor          VARCHAR(32)
20 );
21 CREATE SEQUENCE dictionary_seq START WITH 1 INCREMENT BY 1;
22
23 /*
24  * Table structure for table 'nas'
25  */
26
27 CREATE TABLE nas (
28         id              INT PRIMARY KEY,
29         nasname         VARCHAR(128),
30         shortname       VARCHAR(32),
31         type            VARCHAR(30),
32         ports           INT,
33         secret          VARCHAR(60),
34         community       VARCHAR(50),
35         description     VARCHAR(200)
36 );
37 CREATE SEQUENCE nas_seq START WITH 1 INCREMENT BY 1;
38
39 /*
40  * Table structure for table 'radacct'
41  */
42 CREATE TABLE radacct (
43         radacctid               INT PRIMARY KEY,
44         acctsessionid           VARCHAR(32) NOT NULL,
45         acctuniqueid            VARCHAR(32),
46         username                VARCHAR(32) NOT NULL,
47         groupname               VARCHAR(32) NOT NULL,
48         realm                   VARCHAR(30),
49         nasipaddress            VARCHAR(15) NOT NULL,
50         nasportid               NUMERIC(12),
51         nasporttype             VARCHAR(32),
52         acctstarttime           TIMESTAMP WITH TIME ZONE,
53         acctstoptime            TIMESTAMP WITH TIME ZONE,
54         acctsessiontime         NUMERIC(12),
55         acctauthentic           VARCHAR(32),
56         connectinfo_start       VARCHAR(50),
57         connectinfo_stop        VARCHAR(50),
58         acctinputoctets         NUMERIC(12),
59         acctoutputoctets        NUMERIC(12),
60         calledstationid         VARCHAR(50),
61         callingstationid        VARCHAR(50),
62         acctterminatecause      VARCHAR(32),
63         servicetype             VARCHAR(32),
64         framedprotocol          VARCHAR(32),
65         framedipaddress         VARCHAR(15),
66         acctstartdelay          NUMERIC(12),
67         acctstopdelay           NUMERIC(12)
68 );
69 CREATE UNIQUE INDEX radacct_idx1
70        ON radacct(acctsessionid,username,acctstarttime,
71                 acctstoptime,nasipaddress,framedipaddress);
72
73 CREATE SEQUENCE radacct_seq START WITH 1 INCREMENT BY 1;
74
75 /* Trigger to emulate a serial # on the primary key */
76 CREATE OR REPLACE TRIGGER radacct_serialnumber
77         BEFORE INSERT OR UPDATE OF radacctid ON radacct
78         FOR EACH ROW
79         BEGIN
80                 if ( :new.radacctid = 0 or :new.radacctid is null ) then
81                         SELECT radacct_seq.nextval into :new.radacctid from dual;
82                 end if;
83         END;
84 /
85
86 /*
87  * Table structure for table 'radcheck'
88  */
89 CREATE TABLE radcheck (
90         id              INT PRIMARY KEY,
91         username        VARCHAR(30) NOT NULL,
92         attribute       VARCHAR(30),
93         op              VARCHAR(2) NOT NULL,
94         value           VARCHAR(40)
95 );
96 CREATE SEQUENCE radcheck_seq START WITH 1 INCREMENT BY 1;
97
98 /* Trigger to emulate a serial # on the primary key */
99 CREATE OR REPLACE TRIGGER radcheck_serialnumber
100         BEFORE INSERT OR UPDATE OF id ON radcheck
101         FOR EACH ROW
102         BEGIN
103                 if ( :new.id = 0 or :new.id is null ) then
104                         SELECT radcheck_seq.nextval into :new.id from dual;
105                 end if;
106         END;
107 /
108
109 /*
110  * Table structure for table 'radgroupcheck'
111  */
112 CREATE TABLE radgroupcheck (
113         id              INT PRIMARY KEY,
114         groupname       VARCHAR(20) UNIQUE NOT NULL,
115         attribute       VARCHAR(40),
116         op              VARCHAR(2) NOT NULL,
117         value           VARCHAR(40)
118 );
119 CREATE SEQUENCE radgroupcheck_seq START WITH 1 INCREMENT BY 1;
120
121 /*
122  * Table structure for table 'radgroupreply'
123  */
124 CREATE TABLE radgroupreply (
125         id              INT PRIMARY KEY,
126         GroupName       VARCHAR(20) UNIQUE NOT NULL,
127         Attribute       VARCHAR(40),
128         op              VARCHAR(2) NOT NULL,
129         Value           VARCHAR(40)
130 );
131 CREATE SEQUENCE radgroupreply_seq START WITH 1 INCREMENT BY 1;
132
133 /*
134  * Table structure for table 'radreply'
135  */
136 CREATE TABLE radreply (
137         id              INT PRIMARY KEY,
138         UserName        VARCHAR(30) NOT NULL,
139         Attribute       VARCHAR(30),
140         op              VARCHAR(2) NOT NULL,
141         Value           VARCHAR(40)
142 );
143 CREATE INDEX radreply_idx1 ON radreply(UserName);
144 CREATE SEQUENCE radreply_seq START WITH 1 INCREMENT BY 1;
145
146 /* Trigger to emulate a serial # on the primary key */
147 CREATE OR REPLACE TRIGGER radreply_serialnumber
148         BEFORE INSERT OR UPDATE OF id ON radreply
149         FOR EACH ROW
150         BEGIN
151                 if ( :new.id = 0 or :new.id is null ) then
152                         SELECT radreply_seq.nextval into :new.id from dual;
153                 end if;
154         END;
155 /
156
157 /*
158  * Table structure for table 'usergroup'
159  */
160 CREATE TABLE usergroup (
161         id              INT PRIMARY KEY,
162         UserName        VARCHAR(30) UNIQUE NOT NULL,
163         GroupName       VARCHAR(30)
164 );
165 CREATE SEQUENCE usergroup_seq START WITH 1 INCREMENT BY 1;
166
167 /* Trigger to emulate a serial # on the primary key */
168 CREATE OR REPLACE TRIGGER usergroup_serialnumber
169         BEFORE INSERT OR UPDATE OF id ON usergroup
170         FOR EACH ROW
171         BEGIN
172                 if ( :new.id = 0 or :new.id is null ) then
173                         SELECT usergroup_seq.nextval into :new.id from dual;
174                 end if;
175         END;
176 /
177
178
179 /*
180  * Table structure for table 'realmgroup'
181  */
182 CREATE TABLE realmgroup (
183         id              INT PRIMARY KEY,
184         RealmName       VARCHAR(30) UNIQUE NOT NULL,
185         GroupName       VARCHAR(30)
186 );
187 CREATE SEQUENCE realmgroup_seq START WITH 1 INCREMENT BY 1;
188
189 CREATE TABLE realms (
190         id              INT PRIMARY KEY,
191         realmname       VARCHAR(64),
192         nas             VARCHAR(128),
193         authport        INT,
194         options         VARCHAR(128)
195 );
196 CREATE SEQUENCE realms_seq START WITH 1 INCREMENT BY 1;