用戶管理

用戶管理

口令資源管理參數

 

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權限的自己,因此前者權限大於後者)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章