十五:角色
介紹
角色就是相關(guān)權限的命令集合,使用角色的主要目的就是為了簡(jiǎn)化權限的管理,假定有用戶(hù)a,b,c為了讓他們都擁有權限
1. 連接數據庫
2. 在scott.emp表上select,insert,update。
如果采用直接授權操作,則需要進(jìn)行12次授權。
因為要進(jìn)行12次授權操作,所以比較麻煩喔!怎么辦?
如果我們采用角色就可以簡(jiǎn)化:
首先將creat session,select on scott.emp,insert on scott.emp, update on scott.emp授予角色,然后將該角色授予a,b,c用戶(hù),這樣就可以三次授權搞定。
角色分為預定義和自定義角色兩類(lèi):
預定義角色
預定義角色是指oracle所提供的角色,每種角色都用于執行一些特定的管理任務(wù),下面我們介紹常用的預定義角色connect,resource,dba
1.connect角色
connect角色具有一般應用開(kāi)發(fā)人員需要的大部分權限,當建立了一個(gè)用戶(hù)后,多數情況下,只要給用戶(hù)授予connect和resource角色就夠了,那么connect角色具有哪些系統權限呢?
alter session
create cluster
create database link
create session
create table
create view
create sequence
2.resource角色
resource角色具有應用開(kāi)發(fā)人員所需要的其它權限,比如建立存儲過(guò)程,觸發(fā)器等。這里需要注意的是resource角色隱含了unlimited tablespace系統權限。
resource角色包含以下系統權限:
create cluster
create indextype
create table
create sequence
create type
create procedure
create trigger
3.dba角色
dba角色具有所有的系統權限,及with admin option選項,默認的dba用戶(hù)為sys和system,它們可以將任何系統權限授予其他用戶(hù)。但是要注意的是dba角色不具備sysdba和sysoper的特權(啟動(dòng)和關(guān)閉數據庫)。
自定義角色
顧名思義就是自己定義的角色,根據自己的需要來(lái)定義。一般是dba來(lái)建立,如果用別的用戶(hù)來(lái)建立,則需要具有create role的系統權限。在建立角色時(shí)可以指定驗證方式(不驗證,數據庫驗證等)。
1.建立角色(不驗證)
如果角色是公用的角色,可以采用不驗證的方式建立角色。
create role 角色名 not identified;
2.建立角色(數據庫驗證)
采用這樣的方式時(shí),角色名、口令存放在數據庫中。當激活該角色時(shí),必須提供口令。在建立這種角色時(shí),需要為其提供口令。
create role 角色名 identified by 密碼;
角色授權
當建立角色時(shí),角色沒(méi)有任何權限,為了使得角色完成特定任務(wù),必須為其授予相應的系統權限和對象權限。
1.給角色授權
給角色授予權限和給用戶(hù)授權沒(méi)有太多區別,但是要注意,系統權限的unlimited tablespace和對象權限的with grant option選項是不能授予角色的。
SQL> conn system/manager;
SQL> grant create session to 角色名 with admin option
SQL> conn scott/tiger@myoral;
SQL> grant select on scott.emp to 角色名;
SQL> grant insert, update, delete on scott.emp to 角色名;
通過(guò)上面的步驟,就給角色授權了。
2.分配角色給某個(gè)用戶(hù)
一般分配角色是由dba來(lái)完成的,如果要以其它用戶(hù)身份分配角色,則要求用戶(hù)必須具有grant any role的系統權限。
SQL> conn system/manager;
SQL> grant 角色名 to blake with admin option;
因為我給了with admin option選項,所以,blake可以把system分配給它的角色分配給別的用戶(hù)。
刪除角色
使用drop role,一般是dba來(lái)執行,如果其它用戶(hù)則要求該用戶(hù)具有drop any role系統權限。
SQL> conn system/manager;
SQL> drop role 角色名;
問(wèn)題:如果角色被刪除,那么被授予角色的用戶(hù)是否還具有之前角色里的權限?
答案:不具有了
顯示角色信息
1.顯示所有角色
SQL> select * from dba_roles;
2.顯示角色具有的系統權限
SQL> select privilege, admin_option from role_sys_privs where role='角色名';
3.顯示角色具有的對象權限
通過(guò)查詢(xún)數據字典視圖dba_tab_privs可以查看角色具有的對象權限或是列的權限。
4.顯示用戶(hù)具有的角色,及默認角色
當以用戶(hù)的身份連接到數據庫時(shí),oracle會(huì )自動(dòng)的激活默認的角色,通過(guò)查詢(xún)數據字典視圖dba_role_privs可以顯示某個(gè)用戶(hù)具有的所有角色及當前默認的角色
SQL> select granted_role, default_role from dba_role_privs where grantee = ‘用戶(hù)名’;
精細訪(fǎng)問(wèn)控制
精細訪(fǎng)問(wèn)控制是指用戶(hù)可以使用函數,策略實(shí)現更加細微的安全訪(fǎng)問(wèn)控制。如果使用精細訪(fǎng)問(wèn)控制,則當在客戶(hù)端發(fā)出sql語(yǔ)句(select,insert,update,delete)時(shí),oracle會(huì )自動(dòng)在sql語(yǔ)句后追加謂詞(where子句),并執行新的sql語(yǔ)句,通過(guò)這樣的控制,可以使得不同的數據庫用戶(hù)在訪(fǎng)問(wèn)相同表時(shí),返回不同的數據信息,如:
用戶(hù) scott blake jones
策略 emp_access
聯(lián)系客服