標籤:
一、介紹
這一部分我們主要看看oracle中如何系統管理權限和角色,許可權和角色的區別在哪裡。
當剛剛建立使用者時,使用者沒有任何許可權,也不能執行任何操作。如果要執行某種特定的資料庫操作,則必須為其授予系統的許可權;如果使用者要訪問其它方案的對象,則必須為其授予對象的許可權。為了簡化許可權的管理,可以使用角色。這裡我們會詳細的介紹。
二、許可權
許可權是指執行特定類型sql命令或是訪問其它方案對象的權利,包括系統許可權和對象許可權兩種。
三、系統許可權
1)、系統許可權是指執行特定類型sql命令的權利。它用於控制使用者可以執行的一個或是一組資料庫操作。比如當使用者具有create table許可權時,可以在其方案中建表,當使用者具有create any table許可權時,可以在任何方案中建表。oracle提供了100多種系統許可權。
常用的有:
create session 串連資料庫
create table 建表
create view 建視圖
create public synonym 建同義字
create procedure 建過程、函數、包
create trigger 建觸發器
create cluster 建簇
2)、顯示系統許可權
oracle提供了100多種系統許可權,而且oracle的版本越高,提供的系統許可權就越多,我們可以查詢資料字典視圖system_privilege_map,可以顯示所有系統許可權。
select * from system_privilege_map order by name;
3)、授予系統許可權
一般情況,授予系統許可權是由dba完成的,如果用其他使用者來授予系統許可權,則要求該使用者必須具有grant any privilege的系統許可權。在授予系統許可權時,可以帶有with admin option選項,這樣,被授予許可權的使用者或是角色還可以將該系統許可權授予其它的使用者或是角色。為了讓大家快速理解,我們舉例說明:
1.建立兩個使用者ken,tom。初始階段他們沒有任何許可權,如果登入就會給出錯誤的資訊。
create user ken identified by ken;
2 給使用者ken授權
1). grant create session, create table to ken with admin option;
2). grant create view to ken;
3 給使用者tom授權
我們可以通過ken給tom授權,因為with admin option是加上的。當然也可以通過dba給tom授權,我們就用ken給tom授權:
1. grant create session, create table to tom;
2. grant create view to ken; --ok 嗎?不ok
4)、回收系統許可權
一般情況下,回收系統許可權是dba來完成的,如果其它的使用者來回收系統許可權,要求該使用者必須具有相應系統許可權及轉授系統許可權的選項(with admin option)。回收系統許可權使用revoke來完成。當回收了系統許可權後,使用者就不能執行相應的操作了,但是請注意,系統許可權級聯收回的問題?[不是級聯回收!]
system --------->ken ---------->tom
(create session)(create session)( create session)
用system 執行如下操作:
revoke create session from ken; --請思考tom還能登入嗎?
答案:能,可以登入
四、對象許可權
1)、對象許可權介紹
指訪問其它方案對象的權利,使用者可以直接存取自己方案的對象,但是如果要訪問別的方案的對象,則必須具有對象的許可權。
比如smith使用者要訪問scott.emp表(scott:方案,emp:表)
常用的有:
insert 添加
delete 刪除
alter 修改
select 查詢
index 索引
references 引用
execute 執行
2)、顯示對象許可權
通過資料欄位視圖可以顯示使用者或是角色所具有的對象許可權。視圖為dba_tab_privs
SQL> conn system/manager;
SQL> select distinct privilege from dba_tab_privs;
SQL> select grantor, owner, table_name, privilege from dba_tab_privs where grantee = ‘BLAKE‘;
3)、授予對象許可權
在oracle9i前,授予對象許可權是由對象的所有者來完成的,如果用其它的使用者來操作,則需要使用者具有相應的(with grant option)許可權,從oracle9i 開始,dba使用者(sys,system)可以將任何對象上的對象許可權授予其它使用者。授予對象許可權是用grant 命令來完成的。對象許可權可以授予使用者,角色,和public。在授予許可權時,如果帶有with grantoption 選項,則可以將該許可權轉授給其它使用者。但是要注意with grant option選項不能被授予角色。
1.monkey 使用者要操作scott.emp 表,則必須授予相應的對象許可權
1). 希望monkey可以查詢scott.emp 表的資料,怎樣操作?
grant select on emp to monkey;
2). 希望monkey可以修改scott.emp 的表資料,怎樣操作?
grant update on emp to monkey;
3). 希望monkey可以刪除scott.emp 的表資料,怎樣操作?
grant delete on emp to monkey;
4). 有沒有更加簡單的方法,一次把所有許可權賦給monkey?
grant all on emp to monkey;
2.能否對monkey存取權限更加精細控制。(授予列許可權)
1). 希望monkey只可以修改scott.emp的表的sal欄位,怎樣操作?
grant update on emp(sal) to monkey
2).希望monkey 只可以查詢scott.emp 的表的ename,sal 資料,怎樣操作?
grant select on emp(ename,sal) to monkey
3.授予alter許可權
如果black使用者要修改scott.emp表的結構,則必須授予alter對象許可權
SQL> conn scott/tiger
SQL> grant alter on emp to blake;
當然也可以用system,sys 來完成這件事。
4.授予execute許可權
如果使用者想要執行其它方案的包/過程/函數,則須有execute許可權。
比如為了讓ken可以執行包dbms_transaction,可以授予execute 許可權。
SQL> conn system/manager
SQL> grant execute on dbms_transaction to ken;
5.授予index許可權
如果想在別的方案的表上建立索引,則必須具有index 對象許可權。
如果為了讓black 可以在scott.emp 表上建立索引,就給其index 的對象許可權
SQL> conn scott/tiger
SQL> grant index on scott.emp to blake;
6.使用with grant option 選項
該選項用於轉授對象許可權。但是該選項只能被授予使用者,而不能授予角色
SQL> conn scott/tiger;
SQL> grant select on emp to blake with grant option;
SQL> conn black/shunping
SQL> grant select on scott.emp to jones;
4)、回收對象許可權
在oracle9i 中,收回對象的許可權可以由對象的所有者來完成,也可以用dba使用者(sys,system)來完成。
這裡要說明的是:收回對象許可權後,使用者就不能執行相應的sql命令,但是要注意的是對象的許可權是否會被級聯收回?【級聯回收】
如:scott------------->blake-------------->jones
select on emp select on emp select on emp
SQL> conn scott/[email protected]
SQL> revoke select on emp from blake
請大家思考,jones能否查詢scott.emp表資料。
答案:查不了了(級聯回收,和系統許可權不一樣,剛好1相反)
十七、oracle 許可權