目的
使用
CREATE
USER
語句來建立和配置數據庫。用戶,它是一個賬戶,您能夠經過該賬戶登陸數據庫,並創建Oracle數據庫容許用戶訪問的方法。sql能夠在Oracle自動存儲管理(Oracle ASM)羣集中發出此語句,以便將用戶和密碼組合添加到當前節點的Oracle ASM實例的本地密碼文件中。每一個節點的Oracle ASM實例均可以使用此語句更新本身的密碼文件。密碼文件自己必須是由
ORAPWD
效用。數據庫您可使用戶經過代理應用程序或應用程序服務器鏈接到數據庫。 vim
先決條件
你必定有
CREATE
USER
系統特權建立一個具備CREATE
USER
語句時,用戶的權限域爲空。要登陸到Oracle數據庫,用戶必須具備CREATE
SESSION
系統特權所以,在建立用戶以後,您應該至少將CREATE
SESSION
系統特權參考格蘭特想了解更多信息。安全只有通過身份驗證的用戶
AS
SYSASM
能夠發出此命令修改Oracle ASM實例密碼文件。bash
句法
CREATE USER user IDENTIFIED { BY password | EXTERNALLY [ AS 'certificate_DN' | AS 'kerberos_principal_name' ] | GLOBALLY [ AS '[ directory_DN ]' ] } [ DEFAULT TABLESPACE tablespace | TEMPORARY TABLESPACE { tablespace | tablespace_group_name } | { QUOTA { size_clause | UNLIMITED } ON tablespace }... | PROFILE profile | PASSWORD EXPIRE | ACCOUNT { LOCK | UNLOCK } [ DEFAULT TABLESPACE tablespace | TEMPORARY TABLESPACE { tablespace | tablespace_group_name } | { QUOTA { size_clause | UNLIMITED } ON tablespace }... | PROFILE profile | PASSWORD EXPIRE | ACCOUNT { LOCK | UNLOCK } | ENABLE EDITIONS ]... ] ;
IDENTIFIED:
子句容許您指示Oracle數據庫如何對用戶進行身份驗證。服務器
BY
password:
子句容許您建立本地用戶並指示用戶必須指定password
登陸到數據庫。密碼區分大小寫。任何後續CONNECT
中使用的相同狀況(上、下或混合),用於將此用戶鏈接到數據庫的字符串必須指定密碼。CREATE
USER
聲明或後續ALTER
USER
聲明。密碼能夠包含數據庫字符集中的任何單字節、多字節或特殊字符,或這些字符的任何組合。session
EXTERNALLY:
若要建立一個外部用戶。這樣的用戶必須經過外部服務(如操做系統或第三方服務)進行身份驗證。在這種狀況下,Oracle數據庫依賴於操做系統或第三方服務的身份驗證,以確保特定的外部用戶可以訪問特定的數據庫用戶。架構certificate_DN:此子句僅適用於經過SSL身份驗證的外部用戶。大
證書DN
用戶錢包中的PKI證書中的可分辨名稱。最大長度證書DN
是1024個字符oracleKerberos_main_name :此子句僅用於Kerberos認證的外部用戶。最大長度
Kerberos_main_name
是1024個字符。app警告:Oracle強烈建議您不要使用
IDENTIFIED
EXTERNALLY
具備固有的弱登陸安全性的操做系統。對建立外部用戶的限制如下限制適用於建立外部用戶:用戶
SYS
不能是外部用戶。Oracle ASM不支持建立外部用戶。GLOBALLY :子句容許您建立全局用戶。這樣的用戶必須獲得企業目錄服務(Oracle Internet Directory)的受權。
directory_DN
字符串能夠採起兩種形式之一:最大長度
標識此用戶的企業目錄服務中的X.509名稱。它應該是形式的
CN=
username,other_attributes
,在哪裏other_attributes
是目錄中用戶的其餘可分辨名稱(DN)。此表單建立私有全局模式.;一個空字符串(‘),指示企業目錄服務將經過身份驗證的全局用戶映射到此數據庫模式,並具備適當的角色。此表單與指定
GLOBALLY
關鍵字並建立共享全局模式.directory_DN
是1024個字符。 您能夠控制應用程序服務器以指定用戶的身份鏈接並使用ALTER
USER
聲明
對建立全局用戶的限制:Oracle ASM不支持建立全局用戶。
DEFAULT TABLESPACE:爲在用戶架構中建立的對象指定默認表空間。若是省略此子句,則用戶的對象將存儲在數據庫默認表空間中。若是沒有爲數據庫指定默認表空間,則用戶的對象將存儲在
SYSTEM
表空間。對默認表空間的限制:不能指定本地管理的臨時表空間(包括撤消表空間)或字典管理的臨時表空間做爲用戶的默認表空間。
TEMPORARY TABLESPACE :爲用戶的臨時段指定表空間或表空間組。若是省略此子句,則用戶的臨時段存儲在數據庫默認臨時表空間中,若是沒有指定,則存儲在
SYSTEM
表空間。
指定
tablespace
指示用戶的臨時表空間。指定
tablespace_group_name
指定的表空間組中的任何表空間中,用戶能夠保存臨時段。tablespace_group_name
.
對臨時表空間的限制該條款受如下限制:
表空間必須是臨時表空間,而且必須具備標準塊大小。
表空間不能是撤消表空間或具備自動段空間管理的表空間。
QUOTA :配額條款
使用
QUOTA
子句指定用戶能夠在表空間中分配的最大空間。A
CREATE
USER
語句能夠有多個QUOTA
用於多個表空間的子句。
UNLIMITED
容許用戶不受綁定地在表空間中分配空間。您能夠指定的最大空間爲2TB(TB)。若是須要更多的空間,請指定
UNLIMITED
.
PROFILE:指定要分配給用戶的配置文件。配置文件限制了用戶可使用的數據庫資源的數量。若是省略此子句,則Oracle數據庫將指定
DEFAULT
配置文件給用戶。
注:Oracle建議您使用數據庫資源管理器而不是SQL配置文件來創建數據庫資源限制。數據庫資源管理器提供了一種更靈活的管理和跟蹤資源使用的方法。有關數據庫資源管理器的詳細信息,請參閱Oracle數據庫管理員指南。
PASSWORD EXPIRE :指定
PASSWORD
EXPIRE
若是您但願用戶的密碼過時。此設置強制用戶或DBA在用戶登陸到數據庫以前更改密碼。ACCOUNT:指定
ACCOUNT
LOCK
若要鎖定用戶賬戶並禁用訪問權限,請執行如下操做。指定ACCOUNT
UNLOCK
若要解除用戶賬戶的鎖定並啓用對賬戶的訪問,請執行如下操做。ENABLE :啓用版本;這個條款是不可逆的。指定
ENABLE
EDITIONS
容許用戶使用版本在此架構中建立多個版本的可編輯對象。不能編輯架構中未啓用版本的可編輯對象。
--0)查表空間 select tablespace_name from dba_tablespaces; --1)以管理員身份登陸 SQL>CONNECT / AS SYSDBA 已鏈接。 --2)建立用戶 SQL> CREATE USER w01 IDENTIFIED BY w01 DEFAULT TABLESPACE users TEMPORARY TABLESPACE tempts QUOTA 10M ON users PASSWORD EXPIRE; 用戶已建立 --3)爲用戶授基本權限 SQL> GRANT CONNECT,RESOURCE TO w01; 受權成功。 --4)使用新用戶登陸數據庫 SQL> CONN w01/w01 ERROR: ORA-28001: the password has expired 更改u01 的口令 新口令: 從新鍵入新口令: 口令已更改 已鏈接。
---0)查表空間 select tablespace_name from dba_tablespaces; --建立表空間 Create tablespace indx datafile '/u01/app/oracle/oradata/orcl/indx.dbf' size 2M; --1)以管理員身份登陸 SQL>CONNECT / AS SYSDBA 已鏈接。 --2)建立用戶 SQL>CREATE USER w02 IDENTIFIED BY w02 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON indx QUOTA 1m ON users ACCOUNT LOCK; 用戶已建立 --3)爲用戶授基本權限 SQL> grant connect,resource to w02; 受權成功。 --4)使用新用戶登陸數據庫 SQL> CONN w02/w02 ERROR: ORA-28000: the account is locked 警告: 您再也不鏈接到ORACLE。 --5)以管理員身份從新登陸 SQL>CONNECT / AS SYSDBA 已鏈接。 --6)爲帳戶解鎖 SQL> ALTER USER w02 ACCOUNT UNLOCK; 用戶已更改。 --7)使用新帳戶登陸數據庫 SQL> CONN w02/w02 已鏈接。
--1.使用root建立用戶 [root@oracle ~]# useradd -G oinstall w03 [root@oracle ~]# passwd w03 --2.修改環境變量 [root@oracle ~]# su – w03 [w03@ocp ~]$ whoami [w03@ocp ~]$ vim .bash_profile export ORACLE_SID=orcl export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1 export PATH=$ORACLE_HOME/bin:$PATH [w03@ocp ~]$source .bash_profile --3.在ORACLE中建立 SQL> conn / as sysdba SQL>create user ops$w03 identified externally; ----4.爲用戶受權鏈接 SQL>grant connect to ops$w03; --5.嘗試鏈接 [w03@ocp ~]$ sqlplus / SQL> show user USER is "OPS$W03"
--1)以管理員身份登陸 SQL>CONNECT / AS SYSDBA 已鏈接。 --2)修改配額 SQL>ALTER USER w02 QUOTA 0 ON USERS; 用戶已更改。 CREATE USER w011 IDENTIFIED BY w011 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users; SELECT tablespace_name,blocks*100/max_blocks || '%' "ok" FROM dba_ts_quotas WHERE username='W011' AND max_blocks<>-1; TABLESPACE_NAME ok ------------------------------ ----------------------------------------- USERS 0% SQL> alter user w011 quota 1k on users; SQL> grant connect to w011; Grant succeeded. SQL> grant create table to w011; Grant succeeded. SQL> conn w011/w011 SQL> create table ss(sdf int); insert into ss values(1); create table ss(sdf int) * ERROR at line 1: ORA-01536: space quota exceeded for tablespace 'USERS'
--1)以管理員身份登陸 SQL>CONNECT / AS SYSDBA 已鏈接。 --2)刪除用戶 SQL>DROP USER w01 CASCADE; --當前正鏈接的用戶是不能刪除的,若是肯定要刪除該用戶, 那麼首先終止用戶會話,而後刪除該用戶 Select sid,serial# from v$session where username=’u1’; Alter system kill session ‘8,25’; DROP USER u1 CASCADE;
---1)以管理員身份登陸 SQL>CONNECT / AS SYSDBA 已鏈接。 --2)查詢信息 SQL> SELECT username, default_tablespace FROM dba_users; USERNAME DEFAULT_TABLESPACE ------------------------------ ------------------------------ SYS SYSTEM SYSTEM SYSTEM SCOTT SYSTEM U02 USERS HR EXAMPLE RMAN TOOLS …… 已選擇35 行。
--1)以管理員身份登陸 SQL>CONNECT / AS SYSDBA 已鏈接。 --2)查詢信息 SQL> SELECT default_tablespace,temporary_tablespace FROM dba_users WHERE username='W02'; DEFAULT_TABLESPACE TEMPORARY_TABLESPACE ------------------------------ ------------------------------ USERS TEMP
--1)以管理員身份登陸 SQL>CONNECT / AS SYSDBA 已鏈接。 --2)查詢信息 SQL>SELECT tablespace_name,blocks*100/max_blocks || '%' FROM dba_ts_quotas WHERE username='SCOTT' AND max_blocks<>-1; TABLESPACE_NAME 已用空間百分比 ----------------------------- ------------------- USERS 6.25%
--1)以管理員身份登陸 SQL>CONNECT / AS SYSDBA 已鏈接。 -2)建立用戶 SQL> CREATE USER aaron1 IDENTIFIED BY aaron1 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp; 用戶已建立 --3)授予權限 SOL>GRANT create session,CREATE TABLE,CREATE VIEW to aaron1; GRANT UNLIMITED TABLESPACE TO aaron1 ; 受權成功。 --4)使用權限建立表 SOL>connect aaron1/aaron1 已鏈接。 SOL>create table t1(cola int, colb char(3)); 表已建立。 SOL>insert into t1 values(1,'a'); 已建立1 行。 SOL>COMMIT; 提交完成。 create view a as select * from t1;
--1)以管理員身份登陸 SQL>CONNECT / AS SYSDBA 已鏈接。 --2)建立用戶 SQL> CREATE USER w01d IDENTIFIED BY w01d DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users; --3)授予權限 SOL>GRANT create session,CREATE TABLE to w01d; --4)使用權限建立表 SOL>connect w01d/w01d 已鏈接。 SOL>create table t1(cola int, colb char(3)); 表已建立。
--1)以管理員身份登陸 SQL>CONNECT / AS SYSDBA 已鏈接。 --2)建立用戶 SQL> CREATE USER dd IDENTIFIED BY dd DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users; --3)授予權限 SOL>GRANT SYSDBA to dd; 受權成功。 SOL>CONN dd/dd AS SYSDBA; 已鏈接。 Show user SOL>SHUTDOWN immediate
--1)以管理員身份登陸 SQL>CONNECT / AS SYSDBA 已鏈接。 --2)建立用戶 SQL> CREATE USER bb1 IDENTIFIED BY bb1 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users; SQL> CREATE USER bb2 IDENTIFIED BY bb2 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users; --3)管理員授予系統權限,並容許傳遞 SOL>GRANT create session,CREATE PROCEDURE to bb1 WITH ADMIN OPTION; 受權成功。 --4)以aa1用戶登陸,授予用戶aa2建立存儲過程的權限 SOL>CONNECT bb1/bb1 已鏈接。 SOL>GRANT create session,CREATE PROCEDURE to bb2; 受權成功。 --5)建立存儲過程 SOL>connect bb2/bb2 已鏈接。 SOL> CREATE OR REPLACE PROCEDURE pp AS BEGIN DBMS_OUTPUT.PUT_LINE('ok '); END; / 過程已建立
--1)以管理員身份登陸 SOL>CONNECT / AS SYSDBA 已鏈接。 --2)回收權限 SOL>REVOKE CREATE PROCEDURE FROM bb1; 撤銷成功。 --3)建立存儲過程 SOL>connect bb2/bb2 已鏈接。 SOL> CREATE OR REPLACE PROCEDURE pp1 AS BEGIN DBMS_OUTPUT.PUT_LINE('ok'); END; / 過程已建立 --當DBA 收回了bb1的CREATE PROCEDURE 系統權限後,用戶bb2仍然具備CREATE PROCEDURE 系統權限。由於系統權限不會被級聯收回.
--1)以管理員身份登陸 SQL>CONNECT / AS SYSDBA 已鏈接。 --2)建立用戶 SQL> CREATE USER ss IDENTIFIED BY ss DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users; SQL> CREATE USER cc IDENTIFIED BY cc DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users; --3)管理員授予系統權限,並容許傳遞 SOL>GRANT create session,CREATE table to ss; Grant create session to cc; --4)以ss用戶登陸,建立表插入記錄 SOL>CONNECT ss/ss Create table wq (ee int); Insert into wq values(12); --5)ss授予wq對象權限 SOL>GRANT SELECT ON wq to cc; 受權成功。 --6)cc查詢wq表 SOL>connect cc/cc 已鏈接。 SOL>SELECT * FROM ss.wq;
--1)以ss用戶登陸 SOL>CONNECT ss/ss 已鏈接。 --2)ss用戶授予cc列權限 SOL>GRANT INSERT(ee),UPDATE(ee) ON wq to cc; 受權成功。 --3)cc插入數據到ss的wq表 SOL>connect cc/cc 已鏈接。 SOL>INSERT INTO ss.wq(ee) VALUES(343); 已建立1 行。
--1)以SYSTEM 用戶登陸 SOL>CONNECT ss/ss 已鏈接。 --2)受權 SOL>GRANT INDEX ON wq to cc; 受權成功。 --3)建立索引 SQL>connect cc/cc 已鏈接。 SQL>CREATE INDEX idx1 ON ss.wq(ee); 索引已建立。 --4)查詢索引 SQL> select index_name from user_indexes;
--1)以SYSTEM 用戶登陸 SQL>connect ss/ss 已鏈接。 --2)建約束 SQL> alter table wq add constraint pk_wq primary key (ee); SQL> select constraint_name from user_constraints; 刪除約束 alter table tempi drop constraint SYS_C002845; --2)受權 SQL>GRANT REFERENCES ON wq TO cc; 受權成功。 --3)建立外鍵 conn / as sysdba SYS@orcl> grant create table to cc; SQL>connect cc/cc 已鏈接。 SQL> CREATE TABLE tempi(cola int constraint fk_wq_tempi REFERENCES ss.wq(ee)); 表已建立。 SQL> select constraint_name from user_constraints;
--1)以ss用戶登陸 SOL>CONNECT ss/ss 已鏈接。 --2)回收權限 SOL>REVOKE SELECT ON wq FROM cc; 撤銷成功。 --3)回收權限後,查詢出錯 SQL>connect cc/cc 已鏈接。 SQL>SELECT * FROM ss.wq;
--1)以SYSTEM 用戶登陸 SOL>CONNECT ss/ss 已鏈接。 --2)受權 SOL>revoke INDEX ON wq from cc; 受權成功。 --3)建立索引 SQL>connect cc/cc 已鏈接。 SQL>CREATE INDEX idx11 ON ss.wq(ee);
--1)以管理員身份登陸 SQL>CONNECT / AS SYSDBA 已鏈接。 --2)建立用戶 SQL> CREATE USER x1 IDENTIFIED BY x1_x1 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users; SQL> CREATE USER x2 IDENTIFIED BY x2_x2 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users; SQL> CREATE USER x3 IDENTIFIED BY x3_x3 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users; --3)管理員授予系統權限,並容許傳遞 SOL>GRANT create session,CREATE table to x1; SOL>Grant create session to x2; SOL>Grant create session to x3; --4)以x1用戶登陸 SOL>CONNECT x1/x1_x1 已鏈接。 --5)創建表 SOL>create table ww(w1 int); Insert into ww values(123); --6)授予x2對象權限 SOL>GRANT select ON ww to x2 WITH GRANT OPTION; --7)以x2用戶登陸 SOL>CONNECT x2/x2_x2 已鏈接。 --8)授予x3對象權限 SOL>GRANT select ON x1.ww to x3; 受權成功。 --9)以x3用戶登陸 SOL>CONNECT x3/x3_x3 Select * from x1.ww;
--1)以x1用戶登陸 SOL>CONNECT x1/x1_x1 --2)回收權限 SOL>REVOKE select ON ww FROM x2; --3)以x2用戶登陸 SOL>CONNECT x2/x2_x2 Select * from x1.ww; --4)以x3用戶登陸 SOL>CONNECT x3/x3_x3 Select * from x1.ww;
conn / as sysdba SQL> create user desk identified by desk; SQL> grant create session to desk; SQL> conn desk SQL> select PRIVILEGE from user_sys_privs; SQL> conn / as sysdba DESK@orcl> conn / as sysdba SYS@orcl> SELECT PRIVILEGE FROM ROLE_SYS_PRIVS WHERE ROLE='RESOURCE'; SQL> grant resource to desk; SQL> conn desk SQL> select PRIVILEGE from user_sys_privs; SELECT username, granted_role FROM user_role_privs WHERE username='DESK'; SQL> show user USER is "SYS" SQL> create role testrole identified using testrole; SQL> revoke resource from desk; SQL> grant resource to testrole; SQL> grant testrole to desk; SQL> conn desk SQL> select privilege from user_sys_privs;
--1)以管理員身份登陸 SOL>CONNECT / AS SYSDBA 已鏈接。 --2)建立角色 SOL>CREATE ROLE oe_clerk not identified; 十一、建立數據庫驗證的角色hr_clerk。 --1)以管理員身份登陸 SOL>CONNECT / AS SYSDBA 已鏈接。 --2)建立角色 SOL>CREATE ROLE hr_clerk IDENTIFIED BY bonus; 角色已建立 驗證角色生效
create user wl identified by wl DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users; grant create session to wl; create role ro_wl identified by ro_wl; grant ro_wl to wl; create role ro1_wl identified by ro1_wl; grant ro1_wl to wl; SQL> conn wl/wl select PRIVILEGE from user_sys_privs; create table ww(w1 int); create view aa as select * from ww; SQL> conn / as sysdba grant create table to ro_wl; Grant create view to ro1_wl; SQL> conn wl/wl SELECT username, granted_role FROM user_role_privs WHERE username='WL'; SQL> create table ww(w1 int); 不能夠建視圖 SQL> create view aa as select * from ww; 不能夠建視圖 SQL> SET ROLE ro_wl IDENTIFIED BY ro_wl; SQL> create table ww1(w1 int); 能夠建表 create view a1a as select * from ww1; 不能建視圖 SQL> SET ROLE ro1_wl IDENTIFIED BY ro1_wl; create view a1a as select * from ww1; 能夠建視圖 SQL> create table ww2(w1 int); 不能夠建表 --顯示當前會話生效的角色 SOL>SELECT * FROM session_roles; SOL>SET ROLE NONE; create view a2a as select * from ww1; 不能夠建視圖 create table ww3(w1 int); 不能夠建表
--1)以管理員身份登陸 SOL>CONNECT / AS SYSDBA 已鏈接。 -2)角色受權 SOL>GRANT CREATE SESSION,CREATE TABLE,CREATE VIEW TO oe_clerk WITH ADMIN OPTION; 受權成功。
SQL> CONNECT / AS SYSDBA SQL> CREATE USER wl IDENTIFIED BY wl_3 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users; CREATE USER wll IDENTIFIED BY wll_3 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users; CREATE ROLE a3; GRANT CREATE SESSION TO a3; CREATE ROLE a4; GRANT CREATE SESSION,create table TO a4; Grant a4 to wl; SQL> conn wl/wl_3 SQL> create table aa(ad int); SQL> insert into aa values(34); Conn / as sysdba Grant delete on wl.aa to a3; Grant a3 to wll; Conn wll/wll_3 SQL> delete from wl.aa; 1 row deleted.
此子句僅適用於經過SSL身份驗證的外部用戶。大證書DN
用戶錢包中的PKI證書中的可分辨名稱。最大長度證書DN
是1024個字符