Users, Roles, Privileges in Oracle Database
阿新 • • 發佈:2018-12-23
許可權
許可權(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;