programmera.net -> oracledba -> normal för utskrift | info@programmera.net |
Användare i Oracle
1. CREATE USER 2. CREATE USER: Exempel 1 3. Inget "CREATE SESSION" privilegie 4. Inget "CREATE TABLE" privilegie 5. Inget "QUOTA" 6. CREATE USER: Exempel 2 7. ALTER USER 8. SHOW USER |
1. CREATE USER
Nedan visas syntaxen för kommandot CREATE USER:
CREATE USER username
IDENTIFIED {BY password | EXTERNALLY | GLOBALLY AS 'external_name'}
options;
options:
DEFAULT TABLESPACE tablespace
TEMPORARY TABLESPACE tablespace
QUOTA int {K | M} ON tablespace
QUOTA UNLIMITED ON tablespace
PROFILE profile_name
PASSWORD EXPIRE
ACCOUNT {LOCK|UNLOCK}
2. CREATE USER: Exempel 1
Endast en användare som har privilegiet "CREATE USER" kan skapa en användare. Detta privilegie är det vanligtvis bara adminstratören som har. Både användaren SYS och SYSTEM har rätt att skapa användare, vi använder SYSTEM för detta. Nedan skapar jag användaren olle:
Användaren OLLE har nu lösenordet "oracle". Om vi tänker oss att OLLE vill logga in och skapa tabellen "hej" kommer vi stöta på en rad problem. Detta eftersom Oracle inte tillåter en användare utan rättigheter att göra speciellt mycket, se nedan:
[olle@dev1]$ sqlplus system/oracle
SQL> CREATE USER olle IDENTIFIED BY oracle;
User created.
3. Inget "CREATE SESSION" privilegie
När OLLE försöker logga in händer följande:
OLLE kan nu inte logga in eftersom OLLE saknar alla rättigheter. För att logga in krävs privilegiet "CREATE SESSION" (mer om privilegier på
Privilegier ). Vi tilldelar OLLE denna rättighet.
SQL> CONNECT olle/oracle
ERROR:
ORA-01045: user OLLE lacks CREATE SESSION privilege; logon denied
Warning: You are no longer connected to ORACLE.
Nu gick det bättre..
SQL> CONNECT system/oracle
Connected.
SQL> GRANT create session TO olle;
Grant succeeded.
SQL> CONNECT olle/oracle
Connected.
4. Inget "CREATE TABLE" privilegie
När OLLE försöker skapa tabellen "hej" händer följande:
OLLE kan nu inte skapa tabellen eftersom han saknar privilegiet "CREATE TABLE". Vi tilldelar honom det:
SQL> CONNECT olle/oracle
Connected.
SQL> CREATE TABLE hej (a VARCHAR2(10));
CREATE TABLE hej (a VARCHAR2(10))
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> CONNECT system/oracle
Connected.
SQL> GRANT create table TO olle;
Grant succeeded.
5. Inget "QUOTA"
Vi gör nu ett nytt försök att skapa tabellen "hej":
Här har vi egentligen två problem:
SQL> CONNECT olle/oracle
Connected.
SQL> CREATE TABLE hej (a VARCHAR2(10));
CREATE TABLE hej (a VARCHAR2(10))
*
ERROR at line 1:
ORA-01950: no privileges on tablespace 'SYSTEM'
Vi rättar dessa problem genom att utföra "ALTER USER":
Nu har OLLE 100MB utrymme både på tabellutrymmet "APP1_DATA01" och "APP1_IDX01". Vi testar att skapa tabellen "hej" (för sista gången):
SQL> CONNECT system/oracle
Connected.
SQL> ALTER USER olle
DEFAULT TABLESPACE app1_data01
QUOTA 100M ON app1_data01
QUOTA 100M ON app1_idx01;
User altered.
Nu gick det bra. Nu ska vi dubbelkolla vilket tabellutrymme "hej" hamnade i:
SQL> CONNECT olle/oracle
Connected.
SQL> CREATE TABLE hej (a VARCHAR2(10));
Table created.
SQL> INSERT INTO hej VALUES('Hej alla');
1 row created.
SQL> COMMIT;
Commit complete.
SQL> SELECT table_name, tablespace_name FROM user_tables;
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
HEJ APP1_DATA01
6. CREATE USER: Exempel 2
Nu ska vi skapa en användare "APP1" som ska lagra data i tabellutrymmet "APP1_DATA01". Vi använder nu "DEFAULT TABLESPACE" för att se till att användaren APP1 per default skapar tabller i APP1_DATA01.
Vi försöker igen, och skapar nu användaren "APP1":
Nu har vi skapat APP1.
SQL> CONNECT system/oracle
Connected.
SQL> CREATE USER app1 IDENTIFIED BY oracle
DEFAULT TABLESPACE app1_data01
QUOTA UNLIMITED ON app1_data01
QUOTA UNLIMITED ON app1_idx01;
User created.
APP1 har ännu inga rättigheter, så APP1 kan varken logga in eller skapa några databasobjekt. Denna gång använder vi roller för att tilldela användaren privilegier. Roller gör att det går lite snabbare att ge APP1 ett startpaket av privilegier:
Rollerna:
SQL> GRANT connect TO app1;
Grant succeeded.
SQL> GRANT resource TO app1;
Grant succeeded.
Nu ska vi se om APP1 kan logga in och skapa tabeller:
Det gick bra, men i vilket tabellutrymme hamnade tabellerna?
SQL> CONNECT app1/oracle
Connected.
SQL> CREATE TABLE dep(
dep_pk NUMBER(10),
dep_name VARCHAR(100) NOT NULL
);
Table created.
SQL> CREATE TABLE emp(
emp_pk NUMBER(10),
dep_pk NUMBER(10),
first_name VARCHAR2(100) NOT NULL,
last_name VARCHAR2(100) NOT NULL,
salary NUMBER(10),
id_nr CHAR(10)
);
Table created.
Vi testar att skapa några index:
SQL> SELECT table_name, tablespace_name FROM user_tables;
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
EMP APP1_DATA01
DEP APP1_DATA01
Nu ska vi kolla vilka tabellutrymmen som dessa restriktioner (constraints) har skapat sina index i:
SQL> ALTER TABLE dep ADD (
CONSTRAINT cons_pk_dep
PRIMARY KEY (dep_pk)
USING INDEX
TABLESPACE app1_idx01
);
Table altered.
SQL> ALTER TABLE emp ADD (
CONSTRAINT cons_pk_emp
PRIMARY KEY (emp_pk)
USING INDEX
TABLESPACE app1_idx01
);
Table altered.
SQL> ALTER TABLE emp ADD (
CONSTRAINT cons_fk_emp_dep
FOREIGN KEY ( dep_pk )
REFERENCES dep ( dep_pk )
);
Table altered.
Det verkar också fungera. Nu vet vi att vi kan skapa objekt i båda dessa tabellutrymmen.
SQL> SELECT constraint_name, index_name FROM user_constraints;
CONSTRAINT_NAME INDEX_NAME
-------------------- ------------------------------
SYS_C005313
SYS_C005312
SYS_C005311
CONS_FK_EMP_DEP
CONS_PK_DEP CONS_PK_DEP
CONS_PK_EMP CONS_PK_EMP
SQL> SELECT index_name, tablespace_name FROM user_indexes;
INDEX_NAME TABLESPACE_NAME
------------------------------ ------------------------------
CONS_PK_DEP APP1_IDX01
CONS_PK_EMP APP1_IDX01
7. ALTER USER
Nedan visas syntaxen för ALTER USER:
ALTER USER username options;
ALTER USER username,... {GRANT|REVOKE} proxy_options;
options:
IDENTIFIED BY password [REPLACE old_password]
IDENTIFIED EXTERNALLY
IDENTIFIED GLOBALLY AS external_name
DEFAULT TABLESPACE tablespace
TEMPORARY TABLESPACE tablespace
QUOTA int {K | M} ON tablespace
QUOTA UNLIMITED ON tablespace
PROFILE profile_name
DEFAULT ROLE role [,role,...]
DEFAULT ROLE ALL [EXCEPT role,...]
DEFAULT ROLE NONE
PASSWORD EXPIRE
ACCOUNT {LOCK|UNLOCK}
proxy_options:
CONNECT THROUGH proxy [WITH ROLE role_name,...] [authentication]
CONNECT THROUGH proxy [WITH ROLE ALL EXCEPT role_name,...] [authentication]
CONNECT THROUGH proxy [WITH NO ROLES] [authentication]
authentication:
AUTHENTICATED USING PASSWORD
AUTHENTICATED USING DISTINGUISHED NAME
AUTHENTICATED USING CERTIFICATE [TYPE 'type'] [VERSION 'version']
8. SHOW USER
Vill man se vilken användare man är inloggad som skriver du:
[olle@dev1]$ SHOW USER
USER õr "SYS"