十七 oracle 許可權

2021-06-20 21:32:22 字數 4424 閱讀 5304

一、介紹

這一部分我們主要看看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/tiger@accp

sql> revoke select on emp from blake

請大家思考,jones能否查詢scott.emp表資料。

答案:查不了了(級聯**,和系統許可權不一樣,剛好1相反)

Oracle第十七章 使用者 許可權和角色

建立使用者 sys create user tom identified by 123 給使用者授權 建立會話的許可權 sys grant create session to tom 給使用者授權 創表許可權 sys grant create table to tom 修改配額 tom 建立表 表空...

Oracle學習筆記(十七)

103 date,timestamp,interval 這三個是oracle 處理時間方面的型別。從字面上面,就可以很清楚的明白這其中的區別。date 是正常的時間。timestamp 是時間戳。而interval 則是表示一段時間。覺得分割的好細緻 還有一點需要明白的是,在資料庫中,儲存的時間無論...

oracle學習記錄之十七

使用isql plus 檢視埠配置 d oracle product 10.1.0 db 1 install 下的portlist.ini ultra search http 埠號 5620 enterprise manager agent port isql plus http 埠號 5560 檢...