用戶管理
口令及資源管理參數
SQL> select resource_name,limit fromdba_profiles where profile='DEFAULT';
【查詢所有口令及資源管理參數】
RESOURCE_NAME LIMIT
------------------------------------------------------------------------
COMPOSITE_LIMIT UNLIMITED
SESSIONS_PER_USER UNLIMITED【用戶最多能同時發起的會話連接個數】
CPU_PER_SESSION UNLIMITED【每次會話(連接)所佔用的CPU總時(0.01s)】
CPU_PER_CALL UNLIMITED【每次調用(命令)所佔用的CPU總時(0.01S)】
LOGICAL_READS_PER_SESSION UNLIMITED
LOGICAL_READS_PER_CALL UNLIMITED
IDLE_TIME UNLIMITED【會話中單次最長空閒時間(minutes)】
CONNECT_TIME UNLIMITED【每次會話的最大連接時長(minutes)】
PRIVATE_SGA UNLIMITED
FAILED_LOGIN_ATTEMPTS 10【用戶登錄連續失敗多少次後即所定用戶】
PASSWORD_LIFE_TIME UNLIMITED【口令最長有效天數,應與下條聯用,否則無意義】
RESOURCE_NAME LIMIT
------------------------------------------------------------------------
PASSWORD_REUSE_TIME UNLIMITED【多少天內舊口令不能重用(與下參數互斥)】
PASSWORD_REUSE_MAX 【重複使用舊口令前口令需被改變過的次數】
PASSWORD_VERIFY_FUNCTION NULL
PASSWORD_LOCK_TIME UNLIMITED【用戶被鎖定天數,到期自動解鎖】
PASSWORD_GRACE_TIME UNLIMITED【口令到期後寬限期天數(提示用戶),超過寬限期限則強制修改口令(非禁止登錄)】
16 rows selected.
對指定用戶進行口令或資源限制,需將被限制參數組合成爲profile,profile即資源管理參數概要文件,再將該profile分配給指定用戶。
爲指定用戶分配profile後,僅對該用戶的新生會話生效,而對該用戶在分配profile前已登錄的會話無效。
每個用戶只能分配一個profile.
SQL> select distinct profile fromdba_profiles;
【查詢系統中所有profile】
PROFILE
------------------------------
MONITORING_PROFILE
DEFAULT
SQL> create profile myprofile limitfailed_login_attempts 4 password_lock_time 2 password_life_time 7password_grace_time 3;
【建立profile並指定限制參數】
Profile created.
SQL> select resource_name,limit fromdba_profiles where profile='MYPROFILE';
【查看指定profile設置的口令和資源限制參數】
RESOURCE_NAME LIMIT
------------------------------------------------------------------------
COMPOSITE_LIMIT DEFAULT
SESSIONS_PER_USER DEFAULT
CPU_PER_SESSION DEFAULT
CPU_PER_CALL DEFAULT
LOGICAL_READS_PER_SESSION DEFAULT
LOGICAL_READS_PER_CALL DEFAULT
IDLE_TIME DEFAULT
CONNECT_TIME DEFAULT
PRIVATE_SGA DEFAULT
FAILED_LOGIN_ATTEMPTS 4
PASSWORD_LIFE_TIME 7
RESOURCE_NAME LIMIT
-------------------------------- ----------------------------------------
PASSWORD_REUSE_TIME DEFAULT
PASSWORD_REUSE_MAX DEFAULT
PASSWORD_VERIFY_FUNCTION DEFAULT
PASSWORD_LOCK_TIME 2
PASSWORD_GRACE_TIME 3
16 rows selected.
SQL> create user test identified bytest123 profile myprofile;
【建立用戶時分配使用profile】
User created.
SQL> grant connect to test;
【授予用戶會話權限以進行限制參數測試】
Grant succeeded.
SQL> select profile from dba_users whereusername='TEST';
【查看用戶所使用的profile】
PROFILE
------------------------------
MYPROFILE
測試test 用戶4 個限制參數
SQL> alter system set resource_limit=truescope=both;
【使用profile管理口令時,口令管理選項總是處於被激活狀態,但若使用profile管理資源,必須要激活資源限制】
System altered.
SQL> alter profile myprofile limitsessions_per_user 3 connect_time 2 idle_time 1;
【修改profile,添加參數 若未重新指定,則原參數不被覆蓋】
Profile altered.
注意:因oracle的檢查最小時間間隔是5分鐘左右,故用戶的實際連接時間最多可能是設置值加5分鐘。
測試:
Kitty用戶最多能同時發起3個會話連接;
Kitty用戶每次會話連接超過2分鐘就被斷開;
Kitty用戶每次會話空閒時間超過1分鐘就被斷開。
SQL> alter user scott profile DEFAULT;
【修改用戶使用的profile】
User altered.
SQL> drop profile myprofile;【刪除profile】
drop profile myprofile
*
ERROR at line 1:
ORA-02382: profile MYPROFILE has usersassigned, cannot drop without CASCADE
SQL> drop profile myprofile cascade;
【刪除已分配給用戶的profile】
Profile dropped.
(已讀)
用戶創建及授權
SQL> create profile myprofile limitfailed_login_attempts 4 password_lock_time 2 password_life_time 7password_grace_time 3;
Profile created.
SQL> create tablespace testspacedatafile '/u01/test.dat' size 10M;
Tablespace created.
SQL> create tablespace tempspacedatafile '/u01/temp.dat' size 10M;
Tablespace created.
SQL> create user mary identified bymary123 default tablespace testspace temporary tablespace temp profilemyprofile;
【創建用戶】
User created.
權限的3種類型:
1. 系統權限:如create table,alter view等。
2. 對象權限:如delete on table,insert on kitty.table等。
3. 角色權限:各類權限的一種組合。
權限的2種授予方式:
1. 將權限直接授予給用戶
2. 先把權限授予給某角色,再把該角色(所擁有的權限)授給一個或多個用戶。
SQL> grant create table to mary;
【將系統權限(建表)授予給用戶】
Grant succeeded.
SQL> grant connect to mary;
【將角色權限(登錄)授予給用戶】
Grant succeeded.
SQL> create table kitty.test (i int);
Table created.
SQL> grant select on kitty.test topublic;
【將對象權限授予給所有人】
Grant succeeded.
SQL> grant update (sal) on scott.emp tomary;
【將對象中指定列的update或insert權限(不能指定select /delete權限)授予用戶,提供列級安全控制(行級安全控制權限需由精細審計實現)。另注意revoke列級安全控制權限時不能指定列名 】
Grant succeeded.
SQL> select * from dba_sys_privs wheregrantee='MARY';
GRANTEE PRIVILEGE ADM
---------------------------------------------------------------------- ---
MARY CREATE TABLE NO
SQL> select * from dba_role_privs wheregrantee='MARY';
GRANTEE GRANTED_ROLE ADM DEF
------------------------------------------------------------ --- ---
MARY CONNECT NO YES
SQL> select * from dba_tab_privs wheregrantee='MARY';
no rows selected
SQL> select * from dba_col_privs wheregrantee='MARY';
GRANTEE (被授予者) OWNER
------------------------------------------------------------
TABLE_NAME COLUMN_NAME
------------------------------------------------------------
GRANTOR 【授予者】 PRIVILEGE GRA
------------------------------ -------------------------------------------
MARY SCOTT
EMP SAL
SCOTT UPDATE NO
【查用戶所擁有的系統權限,角色權限,對象權限及對象列權限】
SQL> create table test (i int);
create table test (i int)
*
ERROR at line 1:
ORA-01950: no privileges on tablespace 'TESTSPACE'
SQL> grant unlimited tablespace to mary;
【將系統權限(任意表空間上任意配額)直接授予給用戶】
Grant succeeded.
SQL> alter user mary quota 10M on users;
【修改用戶的空間配額爲指定表空間上的指定大小】
User altered.
SQL> alter user mary quota unlimited onusers;
【修改用戶的空間配額爲指定表空間上的不限大小】
User altered.
[oracle@desktop241 ~]$ sqlplus mary/mary123
SQL*Plus: Release 10.2.0.5.0 - Productionon Wed Oct 17 21:27:43 2012
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise EditionRelease 10.2.0.5.0 - Production
With the Partitioning, OLAP, Data Miningand Real Application Testing options
SQL> create table test (i int);
Table created.
SQL> create user mary2 identified bymary2;
User created.
SQL> grant connect,resource to mary2;
Grant succeeded.
SQL> select * from dba_role_privs wheregrantee='MARY2';
GRANTEE GRANTED_ROLE ADM DEF
------------------------------------------------------------ --- ---
MARY2 RESOURCE NO YES
MARY2 CONNECT NO YES
SQL> select * from dba_sys_privs wheregrantee='MARY2';
GRANTEE PRIVILEGE ADM
---------------------------------------------------------------------- ---
MARY2 UNLIMITED TABLESPACE NO
SQL> select * from dba_tab_privs wheregrantee='MARY2';
no rows selected
SQL> select * from dba_col_privs wheregrantee='MARY2';
no rows selected
SQL> select name fromsystem_privilege_map;
【查詢系統權限,ANY 權限表示某用戶在其他任何schema中(SYS除外)】
NAME
----------------------------------------
CREATE EXTERNAL JOB
CHANGE NOTIFICATION
READ ANY FILE GROUP
MANAGE ANY FILE GROUP
MANAGE FILE GROUP
EXEMPT IDENTITY POLICY
CREATE ANY SQL PROFILE
ADMINISTER ANY SQL TUNING SET
ADMINISTER SQL TUNING SET
ALTER ANY SQL PROFILE
DROP ANY SQL PROFILE
SQL> grant create any table to mary withadmin option;
Grant succeeded.
SQL> select * from dba_sys_privs wheregrantee='MARY';
GRANTEE PRIVILEGE ADM
---------------------------------------------------------------------- ---
MARY CREATE TABLE NO
MARY UNLIMITED TABLESPACE NO
MARY CREATE ANY TABLE YES
[oracle@desktop241 ~]$ sqlplus mary/mary123
SQL*Plus: Release 10.2.0.5.0 - Productionon Wed Oct 17 21:44:26 2012
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise EditionRelease 10.2.0.5.0 - Production
With the Partitioning, OLAP, Data Miningand Real Application Testing options
SQL> create table kitty.ttt(i int);
【mary用戶具有any權限】
Table created.
SQL> grant create any table to john;
【mary用戶具有轉受權限】
Grant succeeded.
SQL> select * from dba_sys_privs wheregrantee='JOHN';
【證實john已被轉受權限】
GRANTEE PRIVILEGE ADM
---------------------------------------------------------------------- ---
JOHN CREATE ANY TABLE NO
SQL> revoke create any table from mary;
【從mary處回收any系統權限】
Revoke succeeded.
SQL> select * from dba_sys_privs wheregrantee='JOHN';
【被轉授給他人的系統權限並不會隨之收回】
GRANTEE PRIVILEGE ADM
---------------------------------------------------------------------- ---
JOHN CREATE ANY TABLE NO
SQL> grant select on kitty.test to marywith grant option;
【賦予用戶對象權限並允許轉受他人】
Grant succeeded.
SQL> select * from dba_tab_privs wheregrantee='MARY';
GRANTEE OWNER
------------------------------ ------------------------------
TABLE_NAME GRANTOR
------------------------------------------------------------
PRIVILEGE GRA HIE
------------------------------------------- ---
MARY KITTY
TEST KITTY
SELECT YES NO
[oracle@desktop241 ~]$ sqlplus mary/mary123
SQL*Plus: Release 10.2.0.5.0 - Productionon Wed Oct 17 22:07:08 2012
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise EditionRelease 10.2.0.5.0 - Production
With the Partitioning, OLAP, Data Miningand Real Application Testing options
SQL> select * from kitty.test;【Mary用戶具有對象權限】
no rows selected
SQL> grant select on kitty.test to john;
【mary用戶具有轉手權限
Grant succeeded.
SQL> select * from dba_tab_privs wheregrantee='JOHN';
【證實john 已被轉手權限】
GRANTEE OWNER
------------------------------------------------------------
TABLE_NAME GRANTOR
------------------------------------------------------------
PRIVILEGE GRA HIE
------------------------------------------- ---
JOHN KITTY
TEST MARY
SELECT NO NO
SQL> revoke select on kitty.test frommary;
【從mary處回收select 對象權限】
Revoke succeeded.
SQL> select * from dba_tab_privs wheregrantee='JOHN';
【被轉手給他人的對象權限會隨之收回】
no rows selected
角色創建及授權
角色是一組權限的集合,用戶將一組定製的權限一次性授予給角色,使得需將大批權限授予給多個用戶時更加方便,同時在其後的權限管理中,通過對該角色權限的修改,即能達到多個用戶的權限被同步進行修改的目的。
SQL> select * from dba_roles;
【查系統中所有角色,oracle默認的最主要5個定義角色包括】
Connect角色用於授予用戶以鏈接會話的權限
Resource角色用於授予用戶進行數據庫對象的基本操作權限
Dba具有全部系統權限
Exp_full_database/imp_full_database具有卸出與裝入數據庫的權限
ROLE PASSWORD
------------------------------ --------
CONNECT NO
RESOURCE NO
DBA NO
SELECT_CATALOG_ROLE NO
EXECUTE_CATALOG_ROLE NO
DELETE_CATALOG_ROLE NO
EXP_FULL_DATABASE NO
IMP_FULL_DATABASE NO
RECOVERY_CATALOG_OWNER NO
GATHER_SYSTEM_STATISTICS NO
SQL> select * from role_sys_privs whererole='CONNECT';
ROLE PRIVILEGE ADM
------------------------------ -------------------------------------------
CONNECT CREATE SESSION NO
SQL> select * from role_sys_privs whererole='RESOURCE';
ROLE PRIVILEGE ADM
---------------------------------------------------------------------- ---
RESOURCE CREATE TRIGGER NO
RESOURCE CREATE SEQUENCE NO
RESOURCE CREATE TYPE NO
RESOURCE CREATE PROCEDURE NO
RESOURCE CREATE CLUSTER NO
RESOURCE CREATE OPERATOR NO
RESOURCE CREATE INDEXTYPE NO
RESOURCE CREATE TABLE NO
SQL> select * from role_sys_privs whererole='DBA';
ROLE PRIVILEGE ADM
---------------------------------------------------------------------- ---
DBA CHANGE NOTIFICATION YES
DBA ADMINISTER ANY SQL TUNING SET YES
DBA ALTER ANY SQL PROFILE YES
DBA CREATE RULE YES
DBA EXPORT FULL DATABASE YES
【查看角色所擁有的系統權限】
SQL> create role role1;
Role created.
【創建角色
SQL> create role role2;
Role created.
SQL> grant connect,create table torole1;
【將預定義角色和權限授予給新建角色】
Grant succeeded.
SQL> grant insert,select on kitty.testto role2;
【對象權限(須單獨授權)授予給新建角色
Grant succeeded.
SQL> grant insert (empno) on scott.empto role1;
【對象上指定列的插改權限授予角色(不能指定查刪權限)】
Grant succeeded.
SQL> select * from role_sys_privs whererole='ROLE1';
【查詢角色所擁有的系統權限】
ROLE PRIVILEGE ADM
---------------------------------------------------------------------- ---
ROLE1 CREATE TABLE NO
SQL> select * from role_tab_privs where role='ROLE2';
【查詢角色所擁有的對象權限及對象上指定列權限】
ROLE OWNER
------------------------------------------------------------
TABLE_NAME COLUMN_NAME
------------------------------------------------------------
PRIVILEGE GRA
-------------------------------------------
ROLE2 KITTY
TEST
SELECT NO
ROLE2 KITTY
TEST
INSERT NO
ROLE OWNER
------------------------------------------------------------
TABLE_NAME COLUMN_NAME
------------------------------ ------------------------------
PRIVILEGE GRA
-------------------------------------------
SQL> select * from role_role_privs whererole in ('ROLE1','ROLE2');
【查看角色所擁有的角色權限】
ROLE GRANTED_ROLE ADM
------------------------------------------------------------ ---
ROLE1 CONNECT NO
SQL> grant role1,role2 to mary;
【將新建角色授予給用戶】
Grant succeeded.
SQL> revoke role2 from mary;
【從用戶處收回角色】
Revoke succeeded.
SQL> drop role role1;
【刪除角色】
Role dropped.
【刪除角色後,原擁有該角色的用戶即失去該角色所擁有的所有權限】
角色使用注意的事項:
DBA創建3個角色:A,B和C;
先由DBA將權限resource授予給角色A
再將角色A授予角色B,再將角色B授予角色C
1. 不支持角色循環授權:角色C授予角色A時系統報錯
2. 刪除角色A:角色B和C的resource權限同時也被收回
3. 刪除角色A:但角色B和角色C依然存在
修改用戶
除用戶名外其他各項均可以修改
SQL> alter user kitty identified by kitty123 default tablespacetestspace temporary tablespace temp profile my_profile;
SQL> alter user kitty account lock;
【用戶立即鎖定】
User altered.
SQL> alter user kitty account unlock;
【用戶解鎖】
User altered.
SQL> alter user kitty password expire;
【強制用戶立即修改口令】
User altered.
SQL> connect kitty/kitty123
ERROR: ORA-28001: the password has expired
Changing password for kitty
New password:
SQL> conn sys/song as sysdba
Connected.
【轉換身份登錄】
SQL> select username,account_status fromdba_users;
【查用戶狀態】
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
MARY OPEN
RMAN OPEN
MARY2 OPEN
TEST OPEN
SCOTT OPEN
JOHN OPEN
KITTY EXPIRED
HR EXPIRED & LOCKED
SYSTEM OPEN
SYS OPEN
MGMT_VIEW OPEN
監視用戶
SQL> show user;
USER is "SYS"【查看當前登錄用戶名】
SQL> select username,sid,serial# fromv$session;
【查詢用戶會話信息】
USERNAME SID SERIAL#
------------------------------ --------------------
MARY 137 50
138 192
140 286
144 325
145 2
146 290
147 382
153 7
155 1
156 1
SYS 158 8
USERNAME SID SERIAL#
------------------------------ --------------------
160 1
161 1
162 1
SQL> alter system kill session'sid,serial';
【中斷用戶會話】
SQL> alter system kill session '137,50';
System altered.
刪除用戶(當前正連接的用戶不能刪除)
SQL> drop user kitty;
drop user kitty
*【用戶未創建對象時】
ERROR at line 1:
ORA-01922: CASCADE must be specified todrop 'KITTY'
SQL> drop user kitty cascade;
【用戶已創建對象時】
User dropped.
Sysdba & sysoper
相同點:
兩者都是系統權限(查system_privilege_map可見),都可啓停數據庫。歸檔日誌,create spfile,使用兩者無需啓動實例。
不同點:
1:前者登錄時使用的schema是sys(show user可見),後者登錄時使用的schema是public(show user 可見)。
3. 前者有查看普通用戶數據(select* from scott.emp)的權限,建刪庫(startup nomount;create/drop database iii;)的權限,改字符集(startup mount;alter system enablerestricted session;alter database character set zhs16gbk;)的權限,及執行不完全恢復的權限,而後者沒有。
Sysdba(and sysoper)vs dba
相同點:
3者都是oracle9引入的,代替oracle8的internal和svrmgrl;
不同點:
1. 前者是一種特殊的系統權限(查system _privilege_map可見);後者是一種角色權限(查dba_roles可見),且不包括sysdba/sysoper系統權限。
2. 對於前者,因爲grant sysdba/sysoper to user後權限是保存在口令文件V$pwfile_users中的所以使用時無需啓動實例;對於後者,因爲grant dba to user後權限是保存在系統數據字典dba_role_privs中的所以依賴於實例啓動後才能使用。
3. 前者是一種登錄認證時的身份標識,用來執行數據庫管理任務如啓停DB,create spfile及恢復DB等庫外操作(而後者無法實現);後者是對DB內對象的操作權限的集合。
4. 任何用戶均可以前者身份登錄,登錄後show user是sys/public而不是用戶自己;對於後者,表示用戶進入到DB中後具有DBA權限,登錄後show user是用戶自己。(因爲前者以sysdba登錄後實際是sys用戶而後者登錄仍是dba權限的自己,因此前者權限大於後者)