程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> ORACLE權限管理調研筆記

ORACLE權限管理調研筆記

編輯:Oracle教程

ORACLE權限管理調研筆記


在默認的方式下,任何非授權用戶都不能在ORACLE執行任何操作,且默認情況下,只有SYSTEM和SYS能給其他用戶授予權限。

ORACLE的用戶權限分為系統權限(SYSTEMPRIVILEGE)和對象權限(OBJECTPRIVILEGE)。

* 系統權限控制了對數據字典的修改。

* 對象權限控制了對數據的修改。

1 系統權限

系統權限通常是針對修改表數據字典、修改數據庫實例的情況進行控制。例如創建用戶、創建表空間、控制會話等。

1.1 語法支持

\

其中權限部分可以有兩種選擇,分別是:<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+oaQgICAgICAgIMioz96junN5c3RlbV9wcml2aWxldGW6zUFMTCBQUklWSUxFR0U8L3A+CjxwPqGkICAgICAgICC9x8mro7pyb2xlIDwvcD4KPHA+ttTT2qOosbvK2sioyMujqWdyYW50ZWVfY2xhdXNltKajrNKy09DBvdbW0aHU8aO6PC9wPgo8cD6hpCAgICAgICAg08O7p6O6dXNlcrrNUFVCTElDPC9wPgo8cD6hpCAgICAgICAgvcfJq6O6cm9sZTwvcD4KPHA+IDwvcD4KPHA+y/nS1LbU09rPtc2zyKjP3sC0y7WjrNPvt6jKtc/Wyc/W99Kqv8nS1NPQy8TW1sfpv/ajujwvcD4KPHA+MS4gICAgICDIqM/eIKhDJmd0OyDTw7unPC9wPgo8cD5HUkFOVCAgPGVtPnByaXZpbGVnZXNbLHByaXZpbGVnZaGtXSA8L2VtPlRPIDxlbT51c2VybmFtZSA8L2VtPltXSVRIIEFETUlOIE9QVElPTl07PC9wPgo8cD631sXkyKjP3qOoUFJJVklMRUdFo6m4+NPDu6coVVNFUk5BTUUpoaPI57n7yKjP3srHQUxMIFBSSVZJTEVHRVOjrNTaVVNFUl9TWVNfUFJJVlO74c/Uyr624NDQo6zDv7j2yKjP3tK70NCjrMHtzeKjrHVzZXJuYW1lv8nS1MrHUFVCTElDoaM8L3A+CjxwPrbU06a1xM+1zbPK0828zqqjukRCQV9TWVNfUFJJVlOjrFVTRVJfU1lTX1BSSVZToaM8L3A+Cjx0YWJsZSBib3JkZXI9"1" cellspacing="0" cellpadding="0">

SQL> grant create any table to test2;

授權成功。

SQL> select * from sysauth$ where sequence# >= 1273

GRANTEE# PRIVILEGE# SEQUENCE# OPTION$

---------- ---------- ---------- ----------

88 92 1273 1

89 -41 1291

SQL> select * from system_privilege_map where privilege=-41;

PRIVILEGE NAME PROPERTY

---------- ---------------------------------------- ----------

-41 CREATE ANY TABLE 0

2. 權限 –> 角色

GRANT privilege[,privilege…]TO role [WITH ADMIN OPTION];

分配系統權限(PRIVILEGE)給一個角色(ROLE)。

對應的系統視圖:ROLE_SYS_PRIVS。

SQL> create role role1;

角色已創建。

SQL> grant create any table to role1 with admin option;

授權成功。

SQL> select name, option$,grantee# from sysauth$,system_privilege_map where priv

ilege = privilege# and sequence# >= 1274;

NAME OPTION$ GRANTEE#

---------------------------------------- ---------- ----------

CREATE ANY TABLE 1 94

3. 角色 -> 角色

GRANT role TO role [WITH ADMIN OPTION];

給一個角色(ROLE)授予另一個角色的權限。

對應的系統視圖:ROLE_ROLE_PRIVS。

SQL> create role role1;

角色已創建。

SQL> create role role2;

角色已創建。

SQL> grant role1 to role2 with admin option;

授權成功。

SQL> select * from role_role_privs where role='ROLE2';

ROLE GRANTED_ROLE ADM

------------------------------ ------------------------------ ---

ROLE2 ROLE1 YES

4. 角色 –> 用戶

GRANT role TO username [WITH ADMINOPTION];

分配角色(ROLE)給用戶(USERNAME),username可以是public。

對應的系統視圖為:USER_ROLE_PRIVS。

SQL> create user test1 identified by 123456;

用戶已創建。

SQL> grant role1 to test1 with admin option;

授權成功。

SQL> select * from dba_role_privs where grantee='TEST1';

GRANTEE GRANTED_ROLE ADM DEF

------------------------------ ------------------------------ --- ---

TEST1 ROLE1 YES YES

1.2 ANY

ANY:系統權限使用ANY關鍵字來給數據庫下的所有對象賦予權限,使用ANY關鍵字賦予權限後,對象的訪問權限不僅限於自身所在的SCHEMA,可以跨SCHEMA進行操作。

ANY: System privileges thatuse the ANY keywordenable you to set privileges for an entire category of objects in the database. The behavior of an object created byusers with the ANY privilegeis not restricted to the schema in which it was created.

1.3 PUBLIC

PUBLIC:PUBLIC是一種系統內置的角色,對PUBLIC賦予的權限,系統內的所用用戶都可以獲得。

PUBLIC:You can grant privileges to the PUBLIC role,which then makes the privileges available to every user in the Oracle database.

1.4 WITH ADMIN OPTION

系統權限使用WITH ADMIN OPTION來制定被授權用戶是否可以把獲取到的權限轉授給他人。

當權限回收時,轉授他人的權限不會回收,不存在級聯回收的情況。

1.5 授權需要的權限

能夠授予和回收系統權限的用戶包含以下兩類:

l 通過WITH ADMIN OPTION獲得權限的用戶。

l 有GRANT ANY PRIVILEGE權限的用戶。

2 對象權限

對象權限主要應用在表、視圖、序列這些對象上,目前OSCAR主要實現的是對象權限,其內容主要是把某個權限應用到對象上。

l 在ORACLE中對應的主要的系統視圖是:ALL_TAB_PRIVS、DBA_TAB_PRIVS、USER_TAB_PRIVS和ROLE_TAB_PRIVS。

l 對於設置了列權限的情況,對應的系統視圖為:ALL_COL_PRIVS、USER_COL_PRIVS。

2.1 語法支持

首先創建兩個用戶user1和user2,並且分別授予CREATE SESSION權限,對USER1授予CREATE TABLE系統權限。

這時,user2是不能訪問user1創建的表:

SQL> select * from user1.test;

select * from user1.test

*

第 1 行出現錯誤:

ORA-00942: 表或視圖不存在

通過授予對象權限,可以實現授權:

SQL> grant select on user1.test to user2 with grant option;

授權成功。

SQL> select * from dba_tab_privs where grantee='USER2';

GRANTEE OWNER

------------------------------ ------------------------------

TABLE_NAME GRANTOR

------------------------------ ------------------------------

PRIVILEGE GRA HIE

---------------------------------------- --- ---

USER2 USER1

TEST USER1

SELECT YES NO

並且授權後,能訪問grantor表:

SQL> select * from user1.test;

A

----------

2

2.2 對象及權限

對象

權限

DIRECTORY

READ、WRITE、EXECUTE

EDITION

USE

INDEXTYPE

EXECUTE

FLASHBACK DATA ARCHIVE

FLASHBACK ARCHIVE

LIBRARY

EXECUTE

MATERIALIZED VIEW

ON COMMIT REFRESH、QUERY REWRITE、SELECT

MINING MODEL

ALTER 、SELECT

OBJECT TYPE

DEBUG 、EXECUTE、UNDER

OLAP

INSERT、ALTER、DELETE、SELECT、UPDATE

OPERATOR

EXECUTE、DEBUG 、EXECUTE

SCHEDULER

EXECUTE、ALTER

SEQUENCE

ALTER 、SELECT

SYNONYM

和目標項權限相同

TABLE

ALTER 、DEBUG、DELETE 、INDEX 、INSERT 、REFERENCES、 SELECT 、UPDATE

VIEW

DEBUG、DELETE 、INSERT 、MERGE VIEW、REFERENCES、SELECT 、UNDER、UPDATE

按照ORACLE文檔,去掉重復,對象權限主要包含如下18個權限:READ、WRITE、EXECUTE、USE、FLASHBACKARCHIVE、ON COMMITREFRESH、QUERY REWRITE、SELECT、ALTER 、DEBUG 、UNDER、INSERT、DELETE、UPDATE、INDEX 、REFERENCES 、UPDATE、MERGE VIEW。

在TABLE_PRIVILEGE_MAP中的對象權限會多於上述的數量,有26個,除了上述的權限外,還有AUDIT、COMMENT、GRANT、LOCK、RENAME、ENQUEUE、DEQUEUE、CREATE。

2.3 WITH GRANT OPTION

在ORACLE中,對象權限通過WITHGRANT OPTION來實現權限的轉授,作用和WITHADMIN OPTION類似,但是在REVOKE權限時會發生級聯撤銷。這種權限通過基表中的單獨一個屬性來標識的,比如系統權限是通過sysauth$表中的OPTION#列來標識的。

ORACLE對系統權限的轉授沒有實現級聯回收,也就是說用戶A將權限轉給用戶B,用戶B再將權限轉給用戶C,這時收回用戶B的權限,而用戶C的權限不會被收回。

ORACLE的對象權限的轉授是可以實現級聯回收的,即回收B用戶的權限,C用戶的權限也會被回收。要實現權限的級聯回收,需要記錄權限之間的分配關系,ORACLE由於是通過單獨的表(objauth$)實現對象權限管理,表中的GRANTOR#列記錄了權限的來源,所以可以通過GRANTOR#列將分配關系串聯起來形成樹的關系,在REVOKE權限時,通過廣度優先遍歷清除,即可以實現級聯回收。

在OSCAR是通過一個單獨的ACL_GRANTABLE權限來實現的轉授的功能,選用該實現方式應該是受到了存儲模式的制約。

3 數據字典

Oracle中關於權限的系統視圖。

3.1 系統權限映射

SYSTEM_PRIVILEGE_MAP:記錄系統權限標識和權限名稱的映射關系。

PRIVILEGE

NUMBER

權限標識

NAME

VARCHAR2(40)

權限名,負數

PROPERTY

NUMBER

???

該表的詳細信息如下:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved