用戶(hù)是使用者合法訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)內(nèi)容的必需的方式,其包含了使用者對(duì)數(shù)據(jù)庫(kù)各種操作的權(quán)限、各種資源使用的限制,同時(shí),每個(gè)數(shù)據(jù)庫(kù)對(duì)象必然隸屬于某一個(gè)用戶(hù),任何數(shù)據(jù)庫(kù)對(duì)象隸屬于其被創(chuàng)建時(shí)連接的用戶(hù)。
創(chuàng)建用戶(hù)
create user u_sample identified by passwd;
dba_users視圖
SQL> desc dba_users
名稱(chēng) 空值? 類(lèi)型
--------------------------- -------- --------------
USERNAME NOT NULL VARCHAR2(30)
USER_ID NOT NULL NUMBER
PASSWORD VARCHAR2(30)
ACCOUNT_STATUS NOT NULL VARCHAR2(32)
LOCK_DATE DATE
EXPIRY_DATE DATE
DEFAULT_TABLESPACE NOT NULL VARCHAR2(30)
TEMPORARY_TABLESPACE NOT NULL VARCHAR2(30)
CREATED NOT NULL DATE
PROFILE NOT NULL VARCHAR2(30)
INITIAL_RSRC_CONSUMER_GROUP VARCHAR2(30)
EXTERNAL_NAME VARCHAR2(4000)
用戶(hù)密碼
--查看加密密碼
SQL> select username,password from dba_users
where username like 'U_SAMPLE';
USERNAME PASSWORD
------------------------------ ------------------------------
U_SAMPLE 5CC163D09B897DCD
--修改密碼
SQL> alter user u_sample identified by oracle;
User U_SAMPLE已變更。
USERNAME PASSWORD
------------------------------ ------------------------------
U_SAMPLE 7EB47D942C3BED5B
password字段存放明文密碼被hash算法加密后的密文
賬戶(hù)狀態(tài)
SQL> select username,account_status from dba_users
where username like 'U_SAMPLE';
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
U_SAMPLE OPEN
- OPEN表示賬戶(hù)為解鎖狀態(tài);
- EXPIRED表示賬戶(hù)為過(guò)期狀態(tài)(需要設(shè)置口令才能解除此狀態(tài));
- LOCKED表示賬戶(hù)為鎖定狀態(tài)。
演示
SQL> alter user u_sample account lock;
User U_SAMPLE已變更。
SQL> select username,account_status from dba_users
where username like 'U_SAMPLE';
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
U_SAMPLE LOCKED
SQL> alter user u_sample account unlock;
User U_SAMPLE已變更。
SQL> select username,account_status
from dba_users
where username like 'U_SAMPLE';
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
U_SAMPLE OPEN
SQL> alter user u_sample identifid by oracle; --重新設(shè)置密碼,可解除expired狀態(tài),這里不便重現(xiàn)賬戶(hù)過(guò)期的場(chǎng)景
User U_SAMPLE已變更。
默認(rèn)表空間
用戶(hù)的默認(rèn)表空間
SQL> select username,default_tablespace
from dba_users
where username like 'U_SAMPLE';
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
U_SAMPLE USERS
- 表空間是由一個(gè)或多個(gè)數(shù)據(jù)文件組成的用于存放各種數(shù)據(jù)庫(kù)對(duì)象的命名集合
- 用戶(hù)的默認(rèn)表空間是指用戶(hù)創(chuàng)建表或索引等對(duì)象且語(yǔ)句中未指定表空間時(shí),數(shù)據(jù)庫(kù)會(huì)為對(duì)象默認(rèn)分配的表空間
數(shù)據(jù)庫(kù)默認(rèn)表空間
SQL> select property_name,property_value
from database_properties
where property_name like 'DEFAULT_PERMANENT_TABLESPACE';
PROPERTY_NAME PROPERTY_VALUE
------------------------------ ----------------------------
DEFAULT_PERMANENT_TABLESPACE USERS
- 數(shù)據(jù)庫(kù)默認(rèn)表空間是指新建用戶(hù)且語(yǔ)句中未指定默認(rèn)表空間時(shí),數(shù)據(jù)庫(kù)會(huì)為用戶(hù)默認(rèn)分配的默認(rèn)表空間
- 數(shù)據(jù)庫(kù)默認(rèn)表空間在數(shù)據(jù)庫(kù)創(chuàng)建時(shí)已經(jīng)被指定為USERS表空間,因此新建用戶(hù)u_sample的默認(rèn)表空間為USERS
修改默認(rèn)表空間(以新建的sample_tbs表空間為例)
--創(chuàng)建表空間
SQL> create tablespace sample_tbs datafile '/oracle/ITLTEST/sample_tbs01.dbf' size 50M;
Tablespace SAMPLE_TBS 已創(chuàng)建。
SQL> select tablespace_name,sum(bytes/1024/1024) size_mb from dba_data_files
where tablespace_name like 'SAMPLE_TBS'
group by tablespace_name;
TABLESPACE_NAME SIZE_MB
------------------------------ ----------
SAMPLE_TBS 50
--修改數(shù)據(jù)庫(kù)默認(rèn)表空間
SQL> alter database default tablespace sample_tbs;
Database已變更。
SQL> select property_name,property_value from database_properties
where property_name like 'DEFAULT_PERMANENT_TABLESPACE';
PROPERTY_NAME PROPERTY_VALUE
------------------------------ ----------------------------
DEFAULT_PERMANENT_TABLESPACE SAMPLE_TBS
--修改用戶(hù)默認(rèn)表空間
SQL> alter user u_sample default tablespace sample_tbs;
User U_SAMPLE已變更。
SQL> select username,default_tablespace from dba_users where username like 'U_SAMPLE';
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
U_SAMPLE SAMPLE_TBS
用戶(hù)Profile
限制用戶(hù)對(duì)數(shù)據(jù)庫(kù)和實(shí)例資源的使用相關(guān)的資源限制參數(shù)和密碼參數(shù)的命名集合
--查看用戶(hù)分配的profile
SQL> select username,profile from dba_users where username like 'U_SAMPLE';
USERNAME PROFILE
------------------------------ ------------------------------
U_SAMPLE DEFAULT
--查看default profile內(nèi)容
SQL> select * from dba_profiles where profile like 'DEFAULT';
PROFILE RESOURCE_NAME RESOURCE LIMIT
------------------------------ -------------------------------- -------- ----------------------------------------
DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED
DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED
DEFAULT CPU_PER_SESSION KERNEL UNLIMITED
DEFAULT CPU_PER_CALL KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITED
DEFAULT IDLE_TIME KERNEL UNLIMITED
DEFAULT CONNECT_TIME KERNEL UNLIMITED
DEFAULT PRIVATE_SGA KERNEL UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10
DEFAULT PASSWORD_LIFE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULL
DEFAULT PASSWORD_LOCK_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_GRACE_TIME PASSWORD UNLIMITED
- 資源類(lèi)
- COMPOSITE_LIMIT:資源使用綜合限制。考慮用四個(gè)參數(shù)來(lái)計(jì)算加權(quán)的composite_limit,分別
為:cpu_per_session,logical_reads_per_sessions,connect_time,private_sga。可以使用alter resource cost來(lái)設(shè)置.。- SESSIONS_PER_USER:限制用戶(hù)可以并發(fā)打開(kāi)的最大會(huì)話(huà)數(shù)。
- CPU_PER_SESSION:限制每個(gè)用戶(hù)會(huì)話(huà)內(nèi)使用CPU的最大時(shí)間,單位為0.01s。
- CPU_PER_CALL:限制用戶(hù)會(huì)話(huà)中每個(gè)調(diào)用使用CPU的最大時(shí)間,單位為0.01s。
- LOGICAL_READS_PER_SESSION:限制每個(gè)用戶(hù)會(huì)話(huà)的最大數(shù)據(jù)塊邏輯讀取次數(shù)。
- LOGICAL_READS_PER_CALL:限制每個(gè)會(huì)話(huà)調(diào)用的最大數(shù)據(jù)塊邏輯讀取次數(shù)。
- IDLE_TIME:限制用戶(hù)會(huì)話(huà)處于空閑狀態(tài)下能持續(xù)的最大分鐘數(shù)。
- CONNECT_TIME:限制用戶(hù)會(huì)話(huà)能保持連接到數(shù)據(jù)庫(kù)的最大分鐘數(shù)
- PRIVATE_SGA:限制用戶(hù)請(qǐng)求私有SGA(僅適用于共享服務(wù)器模式)。
- 密碼類(lèi)
- FAILED_LOGIN_ATTEMPTS:指用戶(hù)被鎖之前可以嘗試的最大登錄數(shù)。
- PASSWORD_LIFE_TIME:指定使用特定密碼的時(shí)間限制,如果超出此時(shí)間間隔,那么密碼將過(guò)期。
- PASSWORD_REUSE_TIME:指定重新使用密碼要經(jīng)過(guò)多少天。
- PASSWORD_REUSE_MAX:指定重新使用某個(gè)特定密碼前,要經(jīng)過(guò)多少次修改。
- PASSWORD_VERIFY_FUNCTION:此參數(shù)允許指定Oracle提供的密碼驗(yàn)證函數(shù)(主要是復(fù)雜度驗(yàn)證)來(lái)建立自動(dòng)密碼驗(yàn)證。
- PASSWORD_LOCK_TIME:指用戶(hù)被鎖之前可以嘗試的最大登錄次數(shù)。
- PASSWORD_GRACE_TIME:設(shè)置一個(gè)時(shí)間段,在此時(shí)間段內(nèi)將發(fā)出一個(gè)密碼過(guò)期警告。
- 在名為default的profile中,所有資源相關(guān)的限制值均為unlimited,表示無(wú)限制,密碼相關(guān)的限制中,除了FAILED_LOGIN_ATTEMPTS限制密碼最大錯(cuò)誤嘗試為10次和PASSWORD_VERIFY_FUNCTION為null表示無(wú)密碼復(fù)雜度驗(yàn)證以外,其他均無(wú)限制。
- 用戶(hù)會(huì)話(huà)是指用戶(hù)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)時(shí)建立的連接,必須建立連接才能向數(shù)據(jù)庫(kù)請(qǐng)求運(yùn)行SQL
- 用戶(hù)會(huì)話(huà)的調(diào)用是運(yùn)行SQL語(yǔ)句的子處理過(guò)程。一條SQL的運(yùn)行分為多個(gè)階段,而每個(gè)階段都由多個(gè)調(diào)用組成
創(chuàng)建新的用戶(hù)profile
SQL> create profile pf_sample limit PASSWORD_LOCK_TIME 1 PASSWORD_GRACE_TIME 7 IDLE_TIME 30;
Profile PF_SAMPLE 已創(chuàng)建。
SQL> select * from dba_profiles where profile like 'PF_SAMPLE';
PROFILE RESOURCE_NAME RESOURCE LIMIT
------------------------------ -------------------------------- -------- ----------------------------------------
PF_SAMPLE COMPOSITE_LIMIT KERNEL DEFAULT
PF_SAMPLE SESSIONS_PER_USER KERNEL DEFAULT
PF_SAMPLE CPU_PER_SESSION KERNEL DEFAULT
PF_SAMPLE CPU_PER_CALL KERNEL DEFAULT
PF_SAMPLE LOGICAL_READS_PER_SESSION KERNEL DEFAULT
PF_SAMPLE LOGICAL_READS_PER_CALL KERNEL DEFAULT
PF_SAMPLE IDLE_TIME KERNEL 30
PF_SAMPLE CONNECT_TIME KERNEL DEFAULT
PF_SAMPLE PRIVATE_SGA KERNEL DEFAULT
PF_SAMPLE FAILED_LOGIN_ATTEMPTS PASSWORD DEFAULT
PF_SAMPLE PASSWORD_LIFE_TIME PASSWORD DEFAULT
PF_SAMPLE PASSWORD_REUSE_TIME PASSWORD DEFAULT
PF_SAMPLE PASSWORD_REUSE_MAX PASSWORD DEFAULT
PF_SAMPLE PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT
PF_SAMPLE PASSWORD_LOCK_TIME PASSWORD 1
PF_SAMPLE PASSWORD_GRACE_TIME PASSWORD 7
新建的profile,除了語(yǔ)句中指定了的限制項(xiàng)以外,其他限制項(xiàng)的值均為DEFAULT,表示繼承default 用戶(hù)profile中的值。 因此可以看出,default profile主要有兩個(gè)特點(diǎn)
- 新建用戶(hù)默認(rèn)分配的profile為default
- 新建profile未指定的限制項(xiàng)的值來(lái)自于default
用戶(hù)的權(quán)限、角色
權(quán)限
- 權(quán)限規(guī)定了用戶(hù)可以對(duì)數(shù)據(jù)庫(kù)執(zhí)行哪些操作
- 權(quán)限分為系統(tǒng)權(quán)限和對(duì)象權(quán)限,對(duì)象權(quán)限是指用戶(hù)對(duì)于特定對(duì)象的操作權(quán)限,而系統(tǒng)權(quán)限是指某一類(lèi)操作的權(quán)限
- 權(quán)限可以被授予和廢除,需要
--給用戶(hù)授予create table系統(tǒng)權(quán)限
SQL> grant create table to u_sample;
Grant 成功。
--給用戶(hù)授予訪(fǎng)問(wèn)dba_tables的權(quán)限
SQL> grant select on dba_tables to u_sample;
Grant 成功。
--查看用戶(hù)被授予的系統(tǒng)權(quán)限
SQL> select * from DBA_SYS_PRIVS where grantee like 'U_SAMPLE';
GRANTEE PRIVILEGE ADMIN_OPTION
------------------------------ ---------------------------------------- ---------------
U_SAMPLE CREATE TABLE NO
--查看用戶(hù)被授予的對(duì)象權(quán)限
SQL> select * from DBA_TAB_PRIVS where grantee like 'U_SAMPLE';
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRANTABLE HIERARCHY
-------------------- --------------- -------------------- -------------- --------------------- ---------- ----------
U_SAMPLE SYS DBA_TABLES SYS SELECT NO NO
--廢除權(quán)限
SQL> revoke create table from u_sample;
Revoke 成功。
SQL> revoke select on dba_tables from u_sample;
Revoke 成功。
SQL> select * from DBA_TAB_PRIVS where grantee like 'U_SAMPLE';
未選擇任何行
SQL> select * from DBA_SYS_PRIVS where grantee like 'U_SAMPLE';
未選擇任何行
- 具有某種權(quán)限的用戶(hù)可以將該權(quán)限授予給其他用戶(hù),同時(shí)也可以廢除該權(quán)限,但需要注意的是:
- 用戶(hù)在被授予系統(tǒng)權(quán)限時(shí)語(yǔ)句中必須帶有with admin option,才可以將該系統(tǒng)權(quán)限授予給其他用戶(hù)
- 用戶(hù)在被授予對(duì)象權(quán)限時(shí)語(yǔ)句中必須帶有with grant option,才可以將該系統(tǒng)權(quán)限授予個(gè)其他用戶(hù)
角色
角色是權(quán)限的命名集合,可以包含系統(tǒng)權(quán)限或?qū)ο髾?quán)限,也可以不包含任何權(quán)限
- 角色里權(quán)限的來(lái)源:像用戶(hù)一樣被授予或廢除權(quán)限或其他角色
- 角色的使用:像系統(tǒng)權(quán)限一樣,可以授予給用戶(hù),且授予用戶(hù)需要對(duì)該角色具有admin_optiion(參考系統(tǒng)權(quán)限的授予)
- 角色的創(chuàng)建:創(chuàng)建角色的用戶(hù)本身需要具有create role系統(tǒng)權(quán)限(sys用戶(hù)是最高權(quán)限用戶(hù),無(wú)需考慮)
- 系統(tǒng)預(yù)先建立的角色:有很多系統(tǒng)里已經(jīng)預(yù)先建立好的角色,理論上可以像用戶(hù)新定義的角色那樣添加或廢除權(quán)限,但存在很高的風(fēng)險(xiǎn),因?yàn)橛泻芏嘞到y(tǒng)用戶(hù)可能會(huì)使用這些角色,修改風(fēng)險(xiǎn)難以預(yù)估。
--創(chuàng)建新角色
SQL> create role rl_sample;
Role RL_SAMPLE 已創(chuàng)建。
--向新建角色里添加connect和resource角色
SQL> grant connect,resource to rl_sample;
Grant 成功。
--向角色里添加權(quán)限
SQL> grant select any table to rl_sample;
Grant 成功。
SQL> grant select on dba_tables to rl_sample;
Grant 成功。
--查看角色中的系統(tǒng)權(quán)限
SQL> select * from ROLE_SYS_PRIVS where role in ('CONNECT','RESOURCE','RL_SAMPLE') order by 1;
ROLE PRIVILEGE ADMIN_OPTION
------------------------------ ---------------------------------------- --------------
CONNECT CREATE SESSION NO
RESOURCE CREATE CLUSTER NO
RESOURCE CREATE INDEXTYPE NO
RESOURCE CREATE OPERATOR NO
RESOURCE CREATE PROCEDURE NO
RESOURCE CREATE SEQUENCE NO
RESOURCE CREATE TABLE NO
RESOURCE CREATE TRIGGER NO
RESOURCE CREATE TYPE NO
--查看角色中的對(duì)象權(quán)限
SQL> select * from ROLE_TAB_PRIVS where role in ('CONNECT','RESOURCE','RL_SAMPLE');
ROLE OWNER TABLE_NAME COLUMN_NAME PRIVILEGE GRANTABLE
--------------- --------------- -------------------- -------------------- ------------------------- ---
RL_SAMPLE SYS DBA_TABLES SELECT NO
--查看角色中的角色
SQL> select * from ROLE_ROLE_PRIVS where role in ('CONNECT','RESOURCE','RL_SAMPLE');
ROLE GRANTED_ROLE ADMIN_OPTION
------------------------------ ------------------------------ -------------
RL_SAMPLE CONNECT NO
RL_SAMPLE RESOURCE NO
--將新建角色授予用戶(hù)
SQL> grant rl_sample to u_sample;
Grant 成功。
--查看用戶(hù)被授予的角色
SQL> select * from dba_role_privs where grantee like 'U_SAMPLE';
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
U_SAMPLE RL_SAMPLE NO YES
--權(quán)限驗(yàn)證
SQL> conn u_sample/oracle
Connected.
SQL> select count(*) from dba_tables;
COUNT(*)
----------
10160
SQL> conn / as sysdba
connected.
SQL> revoke select on dba_tables from rl_sample;
Revoke 成功.
SQL> conn u_sample/oracle
Connected.
SQL> select count(*) from dba_tables;
select count(*) from dba_tables
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> conn / as sysdba
Connected.
SQL> revoke connect from rl_sample;
Revoke 成功.
sys@ITLTEST>conn u_sample/oracle
ERROR:
ORA-01045: user U_SAMPLE lacks CREATE SESSION privilege; logon denied
Warning: You are no longer connected to ORACLE.