1. 程式人生 > >Users, Roles, Privileges in Oracle Database

Users, Roles, Privileges in Oracle Database

許可權

許可權(Privilege):即執行特定語句的能力。許可權允許使用者訪問資料庫中其他使用者的物件,執行儲存過程,或者執行一些系統級的操作。在Oracle資料庫系統中,一般分為系統許可權,和物件許可權。

1.系統許可權

與具體的物件無關,是在任何物件上執行操作的權利,以及執行批處理、改變系統引數、建立角色等方面的許可權。

--查詢所有系統許可權
SELECT * FROM SYSTEM_PRIVILEGE_MAP;

--查詢某個使用者/角色的所有系統許可權
SELECT * FROM DBA_SYS_PRIVS DSP WHERE DSP.GRANTEE = UPPER('&grantee');	

2.物件許可權

在特定物件上執行特定操作的許可權,如SELECT,INSERT,UPDATE等。物件:表、檢視、過程等。

--所有物件許可權
SELECT * FROM DBA_TAB_PRIVS;

--某角色被授予的相關表的許可權
SELECT * FROM ROLE_TAB_PRIVS RTP WHERE RTP.ROLE = UPPER('&role');

--使用密碼檔案的使用者
SELECT * FROM V$PWFILE_USERS;

3.角色相關

一組許可權的集合,簡化許可權的管理。被授予給角色的使用者,將繼承該角色所授予的所有許可權以及角色。角色可以使用密碼認證加強安全性。

--所有角色
SELECT * FROM DBA_ROLES;

--某一角色被授予的系統許可權
SELECT * FROM ROLE_SYS_PRIVS RSP WHERE RSP.ROLE = UPPER('&role');

--使用者角色分配關係
SELECT * FROM DBA_ROLE_PRIVS DRP WHERE DRP.GRANTEE = UPPER('&user');

4.當前使用者

與當前登入使用者相關的系統許可權、物件許可權、角色等相關的檢視。

--檢視當前使用者
SELECT USER FROM DUAL;

--當前使用者授予的系統許可權
SELECT * FROM USER_SYS_PRIVS;

--當前使用者所擁有的全部許可權
SELECT * FROM SESSION_PRIVS;

--當前使用者所授予的直接角色
SELECT * FROM USER_ROLE_PRIVS;

--當前使用者被授予的所有角色
SELECT * FROM SESSION_ROLES;

--當前使用者所有角色被授予的角色
SELECT * FROM ROLE_ROLE_PRIVS;

--當前使用者的物件許可權
SELECT * FROM TABLE_PRIVILEGES;

許可權、角色配置與管理

1.授權

SQL> ? grant

 GRANT (Object Privileges)
 -------------------------

 Use this command to grant privileges for a particular object to
 users and roles. To grant system privileges and roles, use the GRANT
 command (System Privileges and Roles).

 GRANT
   { object_priv | ALL [PRIVILEGES] }
   [ ( column [, column] ...) ]
   [, { object_priv | ALL [PRIVILEGES] }
      [ ( column [, column] ...) ] ] ...
 ON [ schema.| DIRECTORY] object
 TO { user | role | PUBLIC} ...
    [ WITH GRANT OPTION]

 For detailed information on this command, see the Oracle8 Server SQL
 Reference.


 GRANT (System Privileges and Roles)
 -----------------------------------

 Use this command to grant system privileges and roles to users and
 roles. To grant object privileges, use the GRANT command (Object
 Privileges).

 GRANT
   { system_priv | role}
   [, { system_priv | role} ] ...
 TO
   { user | role | PUBLIC}
   [, { user | role | PUBLIC} ] ...
   [ WITH ADMIN OPTION]

 For detailed information on this command, see the Oracle8 Server SQL
 Reference.

注:

  • WITH ADMIN OPTION:帶有該選項,則被授權使用者也可以管理該許可權,即授權、取消授權給其他使用者。
  • GRANT ANY PRIVILEGE:帶有該選項,則被授權使用者可以對任何許可權進行授權或取消授權。

2.取消授權

SQL> ? revoke

 REVOKE (Schema Object Privileges)
 ---------------------------------

 Use this command to revoke object privileges for a particular object
 from users and roles. To revoke system privileges or roles, use the
 REVOKE command (System Privileges and Roles).

 REVOKE
   { object_priv | ALL [PRIVILEGES] }
   [, {object_priv | ALL [PRIVILEGES] } ] ...
 ON
   [ schema.| DIRECTORY] object
 FROM
   { user | role | PUBLIC}
   [, {user | role | PUBLIC} ] ...
   [ CASCADE CONSTRAINTS]

 For detailed information on this command, see the Oracle8 Server SQL
 Reference.


 REVOKE (System Privileges and Roles)
 ------------------------------------

 Use this command to revoke system privileges and roles from users
 and roles. To revoke object privileges from users and roles, use the
 REVOKE command (Object Privileges).

 REVOKE
   { system_priv | role}
   [, { system_priv | role} ] ...
 FROM
   { user | role | PUBLIC}
   [, {user | role | PUBLIC} ] ...

 For detailed information on this command, see the Oracle8 Server SQL
 Reference.

3.角色

建立角色

SQL> ? create role

 CREATE ROLE
 -----------

 Use this command to create a role. A role is a set of privileges
 that can be granted to users or to other roles.

 CREATE ROLE role [NOT IDENTIFIED | IDENTIFIED {BY password |
   EXTERNALLY | GLOBALLY} ]

 For detailed information on this command, see the Oracle8 Server SQL
 Reference.

角色選擇

建立角色後,可以使用GRANT/REVOKE給角色授予、取消授予適當許可權,並最終分配給使用者。一個使用者可以擁有多個角色,在一個使用者會話過程中,使用者可以選擇性的使某些角色生效或禁用,以控制對系統、物件的訪問。

設定當前角色

SQL> set role connect;

Role set.

SQL> create table role_t(id number);
create table role_t(id number)
*
ERROR at line 1:
ORA-01031: insufficient privileges

使使用者所有角色生效

SQL> set role all;

Role set.

SQL> create table role_t(id number);

Table created.

排除某些角色

SQL> select count(1) from v$session;

  COUNT(1)
----------
	88

SQL> set role all except dba;

Role set.

SQL> select count(1) from v$session;
select count(1) from v$session
                     *
ERROR at line 1:
ORA-00942: table or view does not exist

預設角色

當設定使用者預設角色時,這些角色會在使用者初始化會話時自動生效。

alter user username defautl role role_list;

延伸閱讀

blog comments powered by Disqus