|
|
![](bar/8_5.gif) |
|
Oracle
提供大量的防護功能以保護資料,以避免有人未經授權使用資料以及有意或無心的破壞資料。在以前,Oracle 的 DBA
(資料庫管理者)必須將系統權限或物件權限一一授與每一個使用者,或者將系統權限或物件權限一一從每一個使用者中回收。如此在管理方面並不是很方便,因此
Oracle 就創造了「角色」(Role) 這資料庫物件來方便 DBA 在權限上的管理。
|
![](bar/8_5_1.gif) |
|
在 ORACLE
系統中的權限有兩種:系統權限(System Privilege) 和物件權限(Object Privilege)。 |
1.
系統權限(System Privilege) |
|
系統權限是指對於系統中執行特殊的資料庫操作的權利。系統權限可授權給使用者(User)
或角色(Role)。 |
|
|
2. 物件權限(Object Privilege) |
|
物件權限允許授與者對資料庫物件執行某種操作。每種資料庫物件型態可授的物件權限如表二所示: |
|
表二 物件權限 |
物件權限 |
表 |
視觀表格 |
序列 |
副程式、函數、套裝程式 |
快照 |
ALTER |
ü |
|
ü |
|
|
DELETE |
ü |
ü |
|
|
|
EXECUTE |
|
|
|
ü |
|
INDEX |
ü |
|
|
|
|
INSERT |
ü |
ü |
|
|
|
REFERENCES |
ü |
|
|
|
|
SELECT |
ü |
ü |
ü |
|
ü |
UPDATE |
ü |
ü |
|
|
|
|
ALTER 權限 |
允許被授與者進行修改。 |
DELETE 權限 |
允許被授與者進行刪除操作。 |
INDEX 權限 |
允許被授與者建立索引。 |
INSERT 權限 |
允許被授與者進行新增操作。 |
REFERENCES 權限 |
允許被授與者建立參考整合限制參考該表格。注意:這種物件權限是不能授給角色。 |
SELECT 權限 |
允許被授與者進行查詢操作。 |
UPDATE 權限 |
允許被授與者進行修改操作。 |
|
|
|
![](bar/8_5_2.gif) |
|
一個角色(role)
是一組已選擇的權限,它可授權給其他使用者或其他角色。ORACLE 系統利用角色來方便資料庫的權限管理。ORACLE
使用角色管理資料庫有以下的主要優點: |
![](point-32.gif) |
減少權限管理 |
![](point-32.gif) |
動態權限管理 |
|
在 ORACLE 中,有些角色由 ORACLE
自動建立。ORACLE 預先定義的角色及其所具有權限如表三所示。ORACLE 8
以上的版本之預先定義的角色與授予系統權限將會比較多,此處作者只列出部分常見的預定角色與系統權限。 |
表三 ORACLE 常見預定的角色 |
角 色 名 |
授 給 的 系 統 權 限 和
角 色 |
CONNECT |
ALTER SESSION,
CREATE CLUSTER,
CREATE DATABASE LINK,
CREATE SEQUENCE,
CREATE SESSION,
CREATE SYNONYM,
CREATE TABLE,
CREATE VIEW |
RESOURCE |
CREATE CLUSTER,
CREATE INDEXTYPE,
CREATE OPERATOR,
CREATE PROCEDURE,
CREATE SEQUENCE,
CREATE TABLE,
CREATE TRIGGER,
CREATE TYPE |
DBA |
全部系統權限並具 WITH
ADMIN OPTION,
DELETE_CATALOG_ROLE 角色,
EXECUTE_CATALOG_ROLE 角色,
EXP_FULL_DATABASE 角色,
IMP_FULL_DATABASE 角色,
JAVA_ADMIN 角色,
SELECT_CATALOG_ROLE 角色, |
EXP_FULL_DATABASE |
包含資料庫的輸出所需的權限:
SELECT ANY TABLE,
BACKUP ANY TABLE,
EXECUTE ANY PROCEDURE,
EXECUTE ANY TYPE,
ADMINISTER RESOURCE MANAGER,
表格 SYS.INCVID, SYS.INCFIL與SYS.INCEXP的新增、刪除與修改的物件權限,
EXECUTE_CATALOG_ROLE 角色, SELECT_CATALOG_ROLE 角色 |
IMP_FULL_DATABASE |
包含資料庫的輸入所需的權限:
EXECUTE_CATALOG_ROLE 角色, SELECT_CATALOG_ROLE 角色
詳細的系統權限可利用
SELECT * FROM DBA_SYS_PRIVS
WHERE GRANTEE =’ IMP_FULL_DATABASE’
來列出 |
|
以下我們對於常見的預定角色做說明: |
![](point-4.gif) |
具有 CONNECT
角色的使用者 |
|
![](point-4.gif) |
具有 RESOURCE
角色的使用者 |
|
![](point-4.gif) |
擁有 DBA
角色的使用者 |
|
|
|
![](bar/8_5_3.gif) |
|
1. 建立角色─CREATE ROLE
|
操作必須擁有 CREATE
ROLE 系統權限,不然會出現權限不足的錯誤。語法如下:
CREATE ROLE <角色名> [IDENTIFIED BY <密碼>]
IDENTIFIED BY 密碼: 指定授予該角色的使用者,在使用 SET ROLE 指令時必須檢驗密碼。
|
![](8-5.ht8.gif) |
當使用者 NEWDBA 沒有
CREATE ROLE 系統權限時,建立新的角色會出現的錯誤。 |
|
![](8-5.ht94.gif) |
![](8-5.ht95.gif) |
因為使用者 NEWDBA 沒有
CREATE ROLE 系統權限,所以我們可以要求 DBA 給予使用者 CREATE ROLE 系統權限或 DBA 角色。我們以
SYSTEM 身份登錄系統,並授權使用者 NEWDBA 予角色 DBA: |
|
![](8-5.ht96.gif)
|
![](8-5.ht97.gif) |
建立新的角色 TESTROLE
並加上密碼確認。 |
|
![](8-5.ht98.gif)
|
![](8-5.ht99.gif) |
建立新的角色 STUDENTS
不需加上密碼確認。 |
|
![](8-5.ht1.gif)
|
2. 更改角色─ALTER ROLE
|
操作必須擁有 ALTER
ROLE 系統權限,或在該角色上具有 ADMIN OPTION 的授權。語法如下:
ALTER ROLE <角色名> [ IDENTIFIED BY <密碼>]
|
![](8-5.ht2.gif) |
更改角色 STUDENTS
的密碼。(本來角色 STUDENTS 是沒有密碼) |
|
![](8-5.ht3.gif) |
![](8-5.ht4.gif) |
由以上的介紹,我們了解到
ORACLE 系統預先定義的角色與如何自定新的角色。我們可以利用資料字典 DBA_ROLES 來知道目前 ORACLE
系統中已被定義的角色,其中包含 ORACLE 系統預先定義的角色。因為資料字典 DBA_ROLES 的擁有者為
SYS,所以操作者必須具備有 DBA 角色或系統管理者 SYS 有授予查詢 DBA_ROLES 的權限,亦即系統管理者 SYS
執行“GRANT SELECT ON DBA_ROLES TO <使用者>”,才能作查詢的動作。
|
3. 刪除角色─DROP ROLE
|
操作必須擁有 DROP
ROLE 系統權限或在該角色上具有 ADMIN OPTION 的授權,語法如下:
DROP ROLE <角色名>
|
![](8-5.ht5.gif) |
刪除角色 TESTROLE。 |
|
![](8-5.ht6.gif)
|
![](8-5.ht7.gif) |
查詢目前 ORACLE
系統中已被定義的角色。 |
|
![](8-5.ht8.jpg) |
![](8-5.ht9.gif) |
其中 PASSWORD
表示當該角色建立時,是否有設定密碼。NO 表示建立時沒有設定密碼,YES 表示建立時有設定密碼。因為我們在上面例 4
中,設定了角色 STUDENTS 的密碼,所以它的 PASSWORD 則為 YES。
|
4.
暫時讓使用者所擁有的角色有效(Enable) 或失效(Disable)─SET ROLE
|
有時候使用者在連線會談期間(Session),希望將自己所擁有的某些角色暫時使之失效(Disable)
或有效(Enable),以便使自己以某些特定的角色身份執行某些工作,語法如下:
SET ROLE {<角色名>|ALL [ EXCEPT <角色名>]|NONE}
[IDENTIFIED BY <密碼>]
|
![](8-5.ht10.gif) |
暫時讓使用者 NEWDBA
所有的角色全部失效。(假設使用者 NEWDBA 擁有 CONNECT、RESOURCE、DBA 與 STUDENTS 角色) |
|
![](8-5.ht11.gif) |
![](8-5.ht12.gif) |
此時若欲建立新的表格,則會出現以下權限不足的錯誤。 |
|
![](8-5.ht13.gif) |
因為我們暫時讓使用者所有的角色全部失效,當然其中包括 RESOURCE 角色中的 CREATE TABLE
系統權限。所以我們可以利用例 8,例 9 或例 10 來更正錯誤。
|
![](8-5.ht14.gif) |
恢復除了 STUDENTS
角色以外之使用者所有的角色。 |
|
![](8-5.ht15.gif)
|
![](8-5.ht16.gif) |
恢復使用者的 RESOURCE
角色。 |
|
![](8-5.ht17.jpg)
|
![](8-5.ht18.gif) |
恢復使用者所有的角色。 |
|
![](8-5.ht19.jpg) |
![](8-5.ht20.gif) |
為何會出現錯誤呢?問題出現在我們建立 STUDENTS 角色時,有加上密碼要求確認所致,所以只要我們使用到 STUDENTS
角色時,一定要加上密碼確認才行。所以只好將全部的角色一個一個列出設定。假設使用者 NEWDBA 擁有
CONNECT、RESOURCE、DBA 與 STUDENTS 角色。
|
|
![](8-5.ht21.jpg) |
|
我們可以利用資料字典來查詢目前使用者 NEWDBA 所擁有的角色。
|
|
![](8-5.ht22.gif) |
資料字典
USER_ROLE_PRIVS 中有使用者所擁有的角色資料。因為使用者 NEWDBA 是角色 STUDENTS
的建立者,自然就擁有 ADMIN OPTION 的權限。所以角色 STUDENTS 對應的 ADM 部份就為 YES。 |
|
|
![](bar/8_5_4.gif) |
|
1. 系統權限或角色之授予 ─ GRANT
|
操作者若欲將某系統權限授予某角色或使用者時,必須具備有 GRANT ANY PRIVILEGE
的系統權限或者對於該系統權限上具有 ADMIN OPTION 的授權;操作者若欲將某角色授予另一角色或使用者時,必須具備有
GRANT ANY ROLE 的系統權限或對於該角色具有 ADMIN OPTION 的授權。其語法為:
GRANT {<系統權限>| <角色>} TO {<使用者> | <角色> |
PUBLIC}
[ WITH ADMIN OPTION]
WITH ADMIN OPTION:允許被授予者將系統權限或角色授予其他使用者或角色。
PUBLIC:表示將系統權限和角色授予系統中全部使用者。
若將系統權限或角色授予某使用者,ORACLE
系統會將該系統權限或角色加入使用者的權限中,使用者立即可以使用該系統權限或角色;若將系統權限或角色授予
PUBLIC,ORACLE 系統會將該系統權限或角色加入到 ORACLE 系統中的每一個使用者。
|
![](8-5.ht23.gif) |
以 SYSTEM
身份登錄系統並授權 ALTER ANY TABLE 系統權限給角色 STUDENTS,並允許角色 STUDENTS
再將該權限授予他人。(授予系統權限給予某角色的例子) |
|
|
|
![](8-5.ht24.jpg) |
因為資料字典
ROLE_SYS_PRIVS 中有角色所擁有的系統權限資料。我們可以查詢資料字典 ROLE_SYS_PRIVS 來獲得角色
STUDENTS 的系統權限:
|
![](8-5.ht25.gif) |
查詢角色 STUDENTS
所擁有的系統權限。 |
|
|
|
![](8-5.ht26.jpg) |
![](8-5.ht27.gif) |
其中因為授權角色
STUDENTS 的 ALTER ANY TABLE 系統權限時,有授予 ADMIN OPTION 的權限。所以系統權限
ALTER ANY TABLE 所對應的 ADM 部份則為 YES。
|
![](8-5.ht28.gif) |
以 NEWDBA
身份登錄系統並將角色 STUDENTS 授予使用者 SCOTT,並允許 SCOTT 將該角色授予他人。(將角色授予使用者的例子) |
|
|
|
![](8-5.ht29.gif)
|
![](8-5.ht30.gif) |
以 SCOTT
身份登錄系統並查詢使用者本身的角色。 |
|
|
![](8-5.ht31.gif) |
我們可以先以 SCOTT
身份登錄系統,再利用資料字典 USER_ROLE_PRIVS 來查詢 SCOTT 所擁有的角色:
|
|
![](8-5.ht32.gif)
|
其中因為授權 SCOTT 角色
STUDENTS 時,有授予 ADMIN OPTION 的權限。所以角色 STUDENTS 所對應的 ADM 部份則為 YES。
|
![](8-5.ht33.gif) |
以 SYSTEM
身份登錄系統並將 ALTER SESSION 系統權限授予使用者 SCOTT,並允許 SCOTT
將該系統權限授予他人。(將系統權限授予使用者的例子) |
|
|
|
![](8-5.ht34.gif)
|
![](8-5.ht35.gif) |
因為資料字典
USER_SYS_PRIVS 中有使用者所擁有的系統權限資料。我們可以先以 SCOTT 登錄,再利用資料字典
USER_SYS_PRIVS 來查詢 SCOTT 所擁有的系統權限。
|
![](8-5.ht36.gif) |
以 SCOTT
身份登錄系統並查詢使用者本身的系統權限。 |
|
|
|
![](8-5.ht37.gif)
|
![](8-5.ht38.gif) |
其中因為授權 SCOTT
系統權限 ALTER SESSION 時,有授予 ADMIN OPTION 的權限。所以系統權限 ALTER SESSION
所對應的 ADM 部份則為 YES。而系統權限 UNLIMITED TABLESPACE 是由於內定角色 RESOURCE
所產生的。
|
![](8-5.ht39.gif) |
以 NEWDBA
身份登錄系統,先建立新的角色 NEWROLE,再授權 STUDNETS 角色給新的角色 NEWROLE,並且允許新的角色
NEWROLE 將該權限授予他人。(將角色授予某角色的例子) |
|
|
|
![](8-5.ht40.gif) |
![](8-5.ht41.gif) |
因為資料字典
ROLE_ROLE_PRIVS 中有角色所擁有的角色資料。我們可以查詢資料字典 ROLE_ROLE_PRIVS 來獲得角色
STUDENTS 的角色。
|
![](8-5.ht42.gif) |
查詢角色 NEWROLE
所擁有的角色。 |
|
|
|
![](8-5.ht43.jpg) |
|
|
2. 回收系統權限或角色 ─ REVOKE
|
操作者欲對某使用者或角色回收系統權限,則必須具備有 GRANT ANY PRIVILEGE 的系統權限或者對於該系統權限上具備有
ADMIN OPTION 的授權;操作者欲對某使用者或角色回收角色,必須具備有 GRANT ANY ROLE
的系統權限或對於該角色上具備有 ADMIN OPTION 的授權。其語法為:
REVOKE {<系統權限> | <角色>}
FROM{<使用者>|<角色>|PUBLIC}
回收權限指令可從角色、使用者或 PUBLIC (ORACLE 系統中的全部使用者)
中回收系統權限或角色。當從使用者中回收某系統權限時,ORACLE
系統就會將權限從使用者的權限中移除,而且立即生效;當從使用者中回收某角色時,ORACLE
系統就會將角色從使用者的角色中移除,而且立即生效,回收角色的方式也雷同。我們可利用 REVOKE 指令刪除系統權限:
|
![](8-5.ht79.gif) |
以 NEWDBA
身份登錄系統,並從角色 STUDENTS 中刪除 CREATE SESSION 與 CREATE TABLE
系統權限。(從角色中回收系統權限的例子) |
|
|
|
![](8-5.ht66.jpg) |
|
以 NEWDBA 身份登錄系統,並從角色 NEWROLE 中刪除角色STUDENTS。(從角色中回收角色的例子)
|
![](8-5.ht103.gif) |
假設我們利用查詢資料表格
ROLE_ROLE_PRIVS 得知角色 NEWROLE 所擁有的角色: |
|
![](8-5.ht69.jpg) |
|
再從角色 NEWROLE 中刪除角色 STUDENTS:
|
|
![](8-5.ht70.jpg) |
|
我們可以再利用查詢資料表格 ROLE_ROLE_PRIVS 得知角色 NEWROLE 所擁有的角色:
|
|
![](8-5.ht81.gif) |
|
我們發現結果為“沒有任何資料列被選取”,表示角色 NEWROLE 沒有任何角色。
|
![](8-5.ht105.gif) |
以 NEWDBA
身份登錄系統,並從使用者 SCOTT 的角色中刪除角色 STUDENTS。(從使用者的角色中回收角色的例子) |
|
|
![](8-5.ht104.gif) |
我們可以先以 SCOTT
身份登錄系統,再利用以下方式查詢 SCOTT 擁有的角色: |
|
![](8-5.ht81.gif)
|
|
再以 NEWDBA
身份登錄系統並從使用者 SCOTT 的角色中刪除角色 STUDENTS:
|
|
![](8-5.ht75.jpg)
|
|
我們可以以 SCOTT
身份登錄系統,再利用以下方式查詢 SCOTT 所擁有的角色:
|
|
![](8-5.ht81.gif)
|
|
我們可以先以 SCOTT
登錄系統,再利用以下方式查詢 SCOTT 擁有的系統權限:
|
|
![](8-5.ht81.gif)
|
![](8-5.ht106.gif) |
以 SYSTEM
身份登錄系統,並從使用者 SCOTT 刪除系統權限 CREATE ANY TABLE。(從使用者的系統權限中回收系統權限的例子) |
|
|
|
![](8-5.ht81.gif)
|
![](8-5.ht104.gif) |
我們可以用 SCOTT
身份登錄系統,再利用以下方式查詢 SCOTT 所擁有的系統權限: |
|
![](8-5.ht81.gif)
|
|
我們也可利用同樣的方法從使用者
SCOTT 刪除系統權限 ALTER SESSION:
|
|
![](8-5.ht82.jpg) |
|
我再們可以用 SCOTT 身份登錄系統,再利用以下方式查詢 SCOTT 所擁有的系統權限:
|
|
![](8-5.ht83.jpg) |
|
|
|
![](bar/8_5_5.gif) |
|
1.
授予物件權限指令-GRANT
操作者本身必須擁有該物件的權限並具備有
GRANT OPTION 權限。其語法為:
GRANT {<物件權限> | ALL} ON <物件名>
TO { <使用者> | <角色> | PUBLIC}
[ WITH GRANT OPTION]
ALL:表示操作者被授予在該物件權限上具有包括 GRANT OPTION 的全部物件權限的授權。
WITH GRANT OPTION:允許被授權者可將該物件權限授權給其他的使用者或角色。
若將物件權限授予某使用者,則 ORACLE 系統會將該物件權限加到該使用者的權限中,而且立即生效;若將物件權限授予某角色,則 ORACLE
系統會將該物件權限加到該角色的權限中,而且立即生效。
|
![](8-5.ht61.gif) |
以 SCOTT
身份登錄系統,再授權使用者 STUDENT 對於 SCOTT 的 EMP 表格之查詢(SELECT) 權限,並允許使用者
STUDENT 將此權限授予他人。(將物件權限授予使用者的例子) |
|
|
|
![](8-5.ht62.gif) |
|
|
![](8-5.ht63.gif) |
以 SCOTT
身份登錄系統,再查詢使用者本身所授予其他使用者表格的物件權限。 |
|
|
|
![](8-5.ht64.gif) |
![](8-5.ht65.gif) |
SIDURAIC
項目的意義如下:
S:查詢資料的物件權限,N
表示沒有查詢資料的物件權限,Y 表示有查詢資料的物件權限,G 表示可授予他人此查詢資料的物件權限(GRANT OPTION)。
I:新增資料的物件權限,N
表示沒有新增資料的物件權限,A 表示有新增資料的物件權限,G 表示可授予他人此新增資料的物件權限(GRANT OPTION)。
D:刪除資料的物件權限,N
表示沒有刪除資料的物件權限,Y 表示有刪除資料的物件權限,G 表示可授予他人此刪除資料的物件權限(GRANT OPTION)。
U:更新資料的物件權限,N
表示沒有更新資料的物件權限,A 表示有更新資料的物件權限,G 表示可授予他人此更新資料的物件權限(GRANT OPTION)。
R:參考資料的物件權限,N
表示沒有參考資料的物件權限,A 表示有參考資料的物件權限,G 表示可授予他人此參考資料的物件權限(GRANT OPTION)。
A:更新結構的物件權限,N
表示沒有更新結構的物件權限,Y 表示有更新結構的物件權限,G 表示可授予他人此更新結構的物件權限(GRANT OPTION)。
I:建立索引的物件權限,N
表示沒有建立索引的物件權限,Y 表示有建立索引的物件權限,G 表示可授予他人此建立索引的物件權限(GRANT OPTION)。
除了資料字典 TABLE_PRIVILEGES 外,我們亦可查詢資料字典 USER_TAB_PRIVS,因為資料字典
USER_TAB_PRIVS
中有使用者所有的物件權限資料,其中包含使用者為擁有者(OWNER)、使用者為授予者(GRANTOR)、使用者為被授予者(GRANTEE)
與授予之物件權限。我們可以查詢資料字典 USER_TAB_PRIVS 來獲得表格的物件權限資料。USER_TAB_PRIVS 與
TABLE_PRIVILEGES 最大的差異為 USER_TAB_PRIVS 只列出與使用者有關的物件權限資料,不像
TABLE_PRIVILEGES 會列出全部使用者有關的物件權限資料。 |
|
|
![](8-5.ht66.gif) |
以 SCOTT
身份登錄系統,再利用資料字典 USER_TAB_PRIVS 查詢使用者本身有關 EMP 表格所授予的表格之物件權限。 |
|
|
|
![](8-5.ht67.gif)
|
![](8-5.ht68.gif) |
其中 GRA 為
GRANTABLE 表示是否有被授予 GRANT OPTION 權限,GRA 為 YES 則為有授予 GRANT OPTION
權限,GRA 為 NO 則為沒有授予 GRANT OPTION 權限。例子中,在表格 EMP 使用者 SCOTT 有授予使用者
STUDENT 查詢資料(SELECT) 的物件權限。
|
|
若是想要知道使用者授予其他使用者物件權限資料,可查詢資料字典 USER_TAB_PRIVS_MADE;若是想要知道使用者被其他使用者授予物件權限資料,可查詢資料字典
USER_TAB_PRIVS_RECD: |
|
|
![](8-5.ht69.gif) |
以 SCOTT
身份登錄系統,再利用資料字典 USER_TAB_ PRIVS_MADE 查詢使用者 SCOTT 有關 DEPT
表格所授予其他使用者表格的物件權限。 |
|
|
|
![](8-5.ht70.gif) |
|
|
![](8-5.ht71.gif) |
以 SCOTT
身份登錄系統,再授權使用者 JEHUANG 對於 SCOTT 的 EMP 表格之所有物件權限(ALL),並允許使用者
JEHUANG 將此權限授予他人。然後再以 JEHUANG 身份登錄系統,將 SCOTT 的 EMP 的刪除(DELETE)
權限給使用者 STUDENT。 |
|
|
![](8-5.ht72.gif) |
首先以 SCOTT
身份登錄系統,再授權給使用者 JEHUANG: |
|
![](8-5.ht73.gif)
|
|
然後再以 JEHUANG
身份登錄系統,將 SCOTT 的 EMP 的刪除(DELETE) 權限給使用者 STUDENT:
|
|
![](8-5.ht74.jpg) |
|
|
![](8-5.ht75.gif) |
以STUDENT身份登錄系統,並利用資料字典USER_TAB_ PRIVS_RECD 查詢使用者 STUDENT
所被授予的表格之物件權限。 |
|
|
|
![](8-5.ht76.gif)
|
![](8-5.ht77.gif) |
其中,OWNER
表示表格的擁有者,GRANTOR 表示物件權限的授予者,PRIVILEGE 表示被授予的物件權限,GRANTABLE
表示是否有被授予 GRANT OPTION 權限,由上面的結果,我們可以看出使用者 STUDENT 被使用者 JEHUANG 與
SCOTT 授予 SCOTT 的表格 EMP 的 SELECT、INSERT 與 DELETE
物件權限。其中值得我們注意的是,GRANTOR (授予者) 不一定是 OWNER (擁有者),只要 GRANTOR
有被授予該物件權限的 GRANT OPTION 即可授予其他使用者該物件權限,例如:使用者 STUDENT 得到表格 EMP 的
DELETE 物件權限,但是其 GRANTOR 為 JEHUANG 而非表格 EMP 的原擁有者 SCOTT。 |
|
|
![](8-5.ht78.gif) |
以 SCOTT
身份登錄系統,並授權角色 STUDENTS 予表格 EMP 的 SELECT (查詢) 權限與表格 DEPT 的
INSERT(新增) 權限。(將物件權限授予角色的例子) |
|
|
|
![](8-5.ht79.jpg)
|
![](8-5.ht80.gif) |
因為資料字典
ROLE_TAB_PRIVS 中有角色所擁有的物件權限資料。我們可以以 SYSTEM 身份登錄系統,並查詢資料字典
ROLE_TAB_PRIVS 來獲得角色 STUDENTS 的物件權限資料: |
|
![](8-5.ht81.jpg)
|
|
|
![](8-5.ht19.gif) |
以 SCOTT
身份登錄系統,並授權使用者 NEWUSER 與 USER1 在表格 EMP 中的部份欄位(EMPNO, ENAME, SAL,
DEPTNO) 有 INSERT 權限與部份欄位(ENAME, SAL) 有 UPDATE 權限,並且允許使用者 NEWUSER
與 USER1 將這些物件權限授予別的使用者。 |
|
|
|
![](8-5.ht3.jpg)
|
|
我們可以以其中一位使用者
NEWUSER 登錄系統,並利用資料字典中的 USER_COL_PRIVS 來查詢目前使用者 NEWUSER
被授予了那些欄位的物件權限,其中GRANTEE 表示被授權者,OWNER 表示授權表格的擁有者,TABLE_NAME
表示表格名,COLUMN_NAME 表示被授權欄位名,GRANTOR 表示授權者,PRIVILEGE
表示授予的物件權限,GRANTABLE 表示是 ADMIN OPTION:
|
|
![](8-5.ht3.jpg) |
|
|
2.
回收物件權限指令-REVOKE
操作者必須曾將該物件權限授予某使用者或角色。其語法如下:
REVOKE {<物件權限> | ALL} ON <物件名>
FROM { <使用者> | <角色> | PUBLIC}
[ CASCADE CONSTRAINT]
其中CASCADE CONSTRAINT為刪除任何整合性限制(Integrity Constraint)。
回收權限指令可從角色、使用者或 PUBLIC (ORACLE 系統中的全部使用者)
回收某物件的物件權限。當從使用者中回收某物件的物件權限時,ORACLE
系統就會將該物件權限從該使用者的物件權限中移除,而且立即生效;當從角色中回收某物件的物件權限時,ORACLE
系統就會將該物件的物件權限從該角色的物件權限中移除,而且立即生效。
|
![](8-5.ht101.gif) |
以 SCOTT
身份登錄系統,並回收使用者 STUDENT 所擁有的 SCOTT 的表格物件權限。(從使用者回收物件權限的例子) |
|
|
![](8-5.ht80.gif) |
由上面的例子中,我們可以知道
STUDENT 所擁有的 SCOTT 的表格物件權限為表格 EMP 的 SELECT、INSERT 與 DELETE
物件權限。我們先以 SCOTT 帳號登錄,嘗試利用以下的指令試試:
|
|
![](8-5.ht10.jpg) |
|
結果如預期般地順利,我們再試試下面的指令:
|
|
結果出現了錯誤。到底問題出現在那裡呢? 原來是使用者 STUDENT 所被授予 SCOTT 的表格 EMP 之 DELETE
物件權限是由使用者 JEHUANG 所授予的,而非原 EMP 表格的擁有者 SCOTT所授予,雖然 SCOTT 為 EMP
表格的擁有者,它也不能回收它沒有授出的物件權限,因此必須由使用者 JEHUANG 回收 STUDENT 所被授予 SCOTT 的
EMP 表格之 DELETE 物件權限。所以我們必須以 JEHUANG 帳號登錄,再利用以下的指令回收表格物件權限:
|
|
![](8-5.ht12.jpg) |
|
|
![](8-5.ht102.gif) |
以 SCOTT
身份登錄系統,並撤消角色 STUDENTS 所擁有的 SCOTT 的表格物件權限。(從角色回收物件權限的例子) |
|
|
|
![](8-5.ht14.jpg) |
|
|
![](8-5.ht102.gif) |
以 SCOTT
身份登錄系統,並撤消使用者 NEWUSER 與 USER1 在表格 EMP 中的部份欄位(EMPNO, ENAME, SAL,
DEPTNO) 的 INSERT 權限與部份欄位(ENAME, SAL) 的 UPDATE 權限。 |
|
|
|
![](8-5.ht16.jpg) |
|
|
![](bar/8_5_6.gif) |
|
除此之外,若是想要知道系統管理者 DBA
授予其他使用者或角色那些系統權限資料,可查詢資料字典 DBA_SYS_PRIVS;若是想要知道系統管理者 DBA
授予其他使用者或角色那些角色資料,可查詢資料字典 DBA_ROLE_PRIVS。因為資料字典 DBA_SYS_PRIVS 與
DBA_ROLE_PRIVS 的擁有者為 SYS,所以操作者必須具備有 DBA 的角色或系統管理者 SYS 有授予查詢
DBA_ROLE_PRIVS 或 DBA_SYS_PRIVS 的權限,才能做查詢的動作。
|
![](8-5.ht89.gif) |
以 SYSTEM
身份登錄系統,並查詢系統管理者 DBA 授予使用者 STUDENT 那些系統權限資料。 |
|
|
|
![](8-5.ht90.gif)
|
![](8-5.ht91.gif) |
其中系統權限
UNLIMITED TABLESPACE 是因為系統管理者 DBA 授予使用者 STUDENT 角色 RESOURCE
而產生的。也就是說如果系統管理者 DBA 刪除使用者 STUDENT 角色 RESOURCE,則系統權限 UNLIMITED
TABLESPACE 亦不會存在。 |
|
|
![](8-5.ht92.gif) |
以 SYSTEM
身份登錄系統,並查詢系統管理者 DBA 授予使用者 STUDENT 那些角色資料。 |
|
|
|
![](8-5.ht93.gif) |
|
|