Oracle 11g學習筆記–角色
說明:本文總結自《Oracle Database 11g SQL 開發指南》 Jason Price著
角色就是一組特權,他可以分配給一個用戶或者其他角色,角色的優點和特性:
●並不是將特權直接授予一個用戶,而是先創建角色,向該角色授予一些特權,然後再將該角色授予多個用戶或者角色;
●在增加或刪除一個角色的某種特權時,被授予該角色的所有用戶和角色都會自動獲得新增加的特權或自動失去這種特權;
●可以將多個角色授予給一個用戶或角色;
●可以爲角色設置密碼;
創建角色
--授權
connect sys/admin as sysdba
grant create role to user1;
--創建角色
connect user1/admin
--創建角色時可以設置密碼,因爲重新進入系統時,用戶的非默認角色不會生效,所以必須執行set role role_name [identified by password].對於其他的不需要密碼的,可以運行set role all except need_password_role
create role read [identified by admin];
爲角色授權
grant select, insert on user1.friends to read;
將角色授予用戶
grant read to user2;
檢查授予用戶的角色
通過查詢user_role_privs可以檢查已經授予一個用戶哪些角色,
部分列的定義如下
列 | 類型 | 說明 |
---|---|---|
username | varchar2(20) | 該角色所授予的用戶名 |
granted_role | varchar(30) | 授予該角色的角色名 |
admin_option | varchar2(3) | 該角色是否可以將該角色授予其他用戶或角色 |
default_role | varchar2(3) | 當用戶登錄到數據庫上是,是否默認啓用該角色 |
os_granted | varchar2(3) | 該角色是否有操作系統授予 |
檢查授予角色的系統特權
通過查詢role_sys_privs可以檢查已經授予一個角色哪些系統特權。
部分的定義如下:
列 | 類型 | 說明 |
---|---|---|
role | varchar2(30) | 角色名 |
privilege | varchar2(40) | 授予該角色的系統特權 |
admin_option | varchar2(3) | 授予該特權時是否使用了with admin option選項 |
檢查授予角色的對象特權
通過查詢role_tab_privs可以檢查已經授予一個角色哪些對象特權。
部分列的定義如下:
列 | 類型 | 說明 |
---|---|---|
role | varchar2(30) | 該特權所授予的用戶 |
owner | varchar2(30) | 擁有該角色對象的用戶 |
table_name | varchar2(30) | 所授予的特權所操作的對象名 |
column_name | varchar(30) | 列名(如果適用) |
privilege | varchar2(40) | 對該對象的特權 |
grantable | varchar2(3) | 授予該特權時是否使用with grant option選項 |
默認角色
默認的情況下,在將角色授予用戶時,就爲該用戶啓用了該角色。這就是說,在用戶連接到數據庫時,就可以自動使用這種角色了。爲了增強安全性,可以默認地禁用一個角色;在這種情況下,當用戶連接到數據庫上時,必須啓用蓋角色,若有密碼,必須輸入密碼;
connect sys/admin as sysdba
--默認禁用read
alter user user1 default role all except read;
--清空角色
set role none;
--設置角色可以參考創建角色的內容;
撤銷角色
connect user1/admin
revoke read from user2;
從角色中撤銷特權
revoke all on table_name from user2;
刪除角色
drop role read;