oracle權限與角色

權限允許用戶訪問屬於其它用戶的對象或執行程序,ORACLE系統提供三種權限:

Object 對象級

System 系統級

Role 角色級

這些權限可以授予給用戶、特殊用戶public或角色,如果授予一個權限給特殊用戶"Public"(用戶public是oracle預定義的,每個用戶享有這個用戶享有的權限),那麼就意味作將該權限授予了該數據庫的所有用戶。

對管理權限而言,角色是一個工具,權限能夠被授予給一個角色,角色也能被授予給另一個角色或用戶。用戶可以通過角色繼承權限,除了管理權限外角色服務沒有其它目的。權限可以被授予,也可以用同樣的方式撤銷。

建立和使用角色

如前所訴,角色存在的目的就是爲了使權限的管理變得輕鬆。建立角色使用CREATE ROLE語句,他的語法如下:

CREATE ROLE role_name IDENTIFIED BY password

CREATE ROLE role_name IDENTIFIED EXTERNALLY

CREATE ROLE role_name IDENTIFIED GLOBALLY

缺省情況下建立的角色沒有password或者其他的識別。如果使用IDENTIFIED BY 子句建立,那麼角色不會自動響應,必須用SET ROLE激活。

SET ROLE role_name IDENTIFIED BY password

EXTERNALLY和GLOBALLY類型的角色由操作系統和ORACLE Service server驗證。通常用戶需要權限修改應用程序中使用的表單中的數據,但是只有在應用程序運行時而不是在使用ad hoc工具時,這種上下文敏感安全可以通過有PASSWORD的角色來實現。當用戶在應用程序內部連結數據庫時,代碼將執行SET ROLE命令,通過安全驗證。所以用戶不需要知道角色的password,也不需要自己輸入SET ROLE命令。

對象權限

對象權限就是指在表、視圖、序列、過程、函數或包等對象上執行特殊動作的權利。有九種不同類型的權限可以授予給用戶或角色。如下表:

 

 

 

 

 

Alter

 

Delete

 

Execute

 

Index

 

Insert

 

Read

 

Reference

 

Select

 

update

 

 

Directiory

 

No

 

No

 

No

 

No

 

No

 

No

 

No

 

No

 

No

 

Function

 

no

 

no

 

yes

 

no

 

no

 

no

 

no

 

no

 

no

 

Proceduce

 

no

 

no

 

yes

 

no

 

no

 

no

 

no

 

no

 

no

 

Package

 

no

 

no

 

yes

 

no

 

no

 

no

 

no

 

no

 

no

 

DB

 

Object

 

no

 

no

 

yes

 

no

 

no

 

no

 

no

 

no

 

Library

 

no

 

no

 

yes

 

no

 

no

 

no

 

no

 

no

 

no

 

Operation

 

no

 

no

 

yes

 

no

 

no

 

no

 

no

 

no

 

no

 

Sequence

 

yes

 

no

 

no

 

no

 

no

 

no

 

no

 

no

 

no

 

Table

 

yes

 

yes

 

no

 

yes

 

yes

 

no

 

yes

 

yes

 

yes

 

Type

 

no

 

no

 

yes

 

no

 

no

 

no

 

no

 

no

 

no

 

View

 

no

 

yes

 

no

 

no

 

yes

 

no

 

no

 

yes

 

yes

對象由不止一個權限,特殊權限ALL可以被授予或撤銷。如TABLE的ALL權限就包括:

SELECT,INSERT,UPDATE和DELETE,還有INDEX,ALTER,和REFERENCE。

如何看這個表我們以ALTER權限爲例進行說明

ALTER權限

允許執行ALTER TABLE和LOCK TABLE操作,ALTER TABLE可以進行如下操作:

. 更改表名

. 增加或刪除列

. 改變列的數據類型或大小

. 將錶轉變爲分區表

在SEQUENCE上的ALTER權限允許執行ALTER Sequence語句,重新給sequence分配最小值、增量和緩衝區大小。

系統權限

系統權限需要授予者有進行系統級活動的能力,如連接數據庫,更改用戶會話、建立表或建立用戶等等。你可以在數據字典視圖SYSTEM_PRIVILEGE_MAP上獲得完整的系統權限。對象權限和系統權限都通過GRANT語句授予用戶或角色。需要注意的是在授予對象權限時語句應該是WITH GRANT OPTION子句,但在授予系統權象時語句是WITH ADMIN OPTION,所以在你試圖授予系統權限時,使用語句WITH GRANT OPTION系統會報告一個錯誤:ONLY ADMIN OPTION can be specified。在考試中要特別注意這個語法和錯誤信息。

角色和角色權限

角色權限就是將屬於用戶的權限授予一個角色。任何權限都可以授予給一個角色。授予系統權限給被授予者必須使用WITH_ADMIN_OPTION子句,在會話期間通過SET ROLE語句授予或撤銷角色權限。然而,角色權限不能依靠存儲在SQL中的權限。如果函數、程序、包、觸發器或者方法使用另一個計劃擁有的對象,那麼就必須直接給對象的擁有者授權,這是因爲權限不會在會話之間改變。

授予和撤銷權限

給用戶或者角色授予權限使用GRANT 語句,GRANT語句的語法如下:

GRANT ROLE(或system privilege) TO user(role,Public) WITH ADMIN OPTION(可選)

對象權限被授予 WITH GRANT OPTION,

權限和數據字典

數據字典是ORACLE存儲有關數據庫結構信息的地方,數據本身存放在其他地方,數據字典由表和視圖組成。在考試中關於數據字典最容易考的內容是:查看那一類權限已經被授予。比如DBA_TAB_PRIV包含了用戶授予給另一用戶的對象權限和在授予時是否帶有WITH GRANT OTPION子串的信息。注意DBA_TAB_PRIV不僅僅包含了對錶的權限的關係,他還包括函數、包、隊列等等上的權限的關係。下表列出了所有的權限和角色的數據字典視圖:

表: 權限的數據字典視圖

視圖 作用

ALL_COL_PRIVS 表示列上的授權,用戶和PUBLIC是被授予者

ALL_COL_PRIVS_MADE 表示列上的授權,用戶是屬主和被授予者

ALL_COL_RECD 表示列上的授權,用戶和PUBLIC是被授予者

ALL_TAB_PRIVS 表示對象上的授權,用戶是PUBLIC或被授予者或用戶是屬主

ALL_TAB_PRIVS_MADE 表示對象上的權限,用戶是屬主或授予者

ALL_TAB_PRIVS_RECD 表示對象上的權限, 用戶是PUBLIC或被授予者

DBA_COL_PRIVS 數據庫列上的所有授權

DBA_ROLE_PRIVS 顯示已授予用戶或其他角色的角色

DBA_SYS_PRIVS 已授予用戶或角色的系統權限

DBA_TAB_PRIVS 數據庫對象上的所有權限

ROLE_ROLE_PRIVS 顯示已授予用戶的角色

ROLE_SYS_PRIVS 顯示通過角色授予用戶的系統權限

ROLE_TAB_PRIVS 顯示通過角色授予用戶的對象權限

SESSION_PRIVS 顯示用戶現在可利用的所有系統權限

USER_COL_PRIVS 顯示列上的權限,用戶是屬主、授予者或被授予者

USER_COL_PRIVS_MADE 顯示列上已授予的權限,用戶是屬主或授予者

USER_COL_PRIVS_RECD 顯示列上已授予的權限,用戶是屬主或被授予者

USER_ROLE_PRIVS 顯示已授予給用戶的所有角色

USER_SYS_PRIVS 顯示已授予給用戶的所有系統權限

USER_TAB_PRIVS 顯示已授予給用戶的所有對象權限

USER_TAB_PRIVS_MADE 顯示已授予給其他用戶的對象權限,用戶是屬主

USER_TAB_PRIVS_RECD 顯示已授予給其他用戶的對象權限,用戶是被授予者

角色相關的視圖.

一. 概述

與權限,角色相關的視圖大概有下面這些:

DBA_SYS_PRIVS: 查詢某個用戶所擁有的系統權限

USER_SYS_PRIVS: 當前用戶所擁有的系統權限

SESSION_PRIVS:  當前用戶所擁有的全部權限

ROLE_SYS_PRIVS:  某個角色所擁有的系統權限

注意: 要以SYS用戶登陸查詢這個視圖,否則返回空.

ROLE_ROLE_PRIVS:  當前角色被賦予的角色

SESSION_ROLES:   當前用戶被激活的角色

USER_ROLE_PRIVS:  當前用戶被授予的角色

另外還有針對表的訪問權限的視圖:

TABLE_PRIVILEGES

ALL_TAB_PRIVS 

ROLE_TAB_PRIVS:   某個角色被賦予的相關表的權限

...

二. Examples

1. 查詢當前用戶所擁有的權限

 Select * from session_privs;

2. 查詢某個用戶被賦予的系統權限.

    可以有多種方式

 Select * from user_sys_privs;

 或者: select * from DBA_SYS_PRIVS where grantee='XXX'

 (需要當前用戶擁有DBA角色)

3. 查詢當前用戶被授予的角色:

 1. Select * from SESSION_ROLES order by ROLE 

 說明: 這個查詢會返回當前用戶所被授予的全部角色, 其中包括嵌套授權的角色. 例如將DBA角色授予了一個用戶,DBA角色已經被授予的角色(例如exp_full_database 和 imp_full_database)也會被查詢出來  

 2. Select * from USER_ROLE_PRIVS    

 3. 查詢某一角色被賦予的系統權限

  Select Privilege from ROLE_SYS_PRIVS where ROLE=&Role

  輸入 role='CONNECT'

  輸出:

  PRIVILEGE

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

  ALTER SESSION

  CREATE CLUSTER

  CREATE DATABASE LINK

  CREATE SEQUENCE

  CREATE SESSION

  CREATE SYNONYM

  CREATE TABLE

  CREATE VIEW

  4. 查詢當前角色被授予的角色

  Select GRANTED_ROLE from ROLE_ROLE_PRIVS where ROLE=&ROLE

  輸入 role= 'DBA'

  輸出:

  GRANTED_ROLE

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

  DELETE_CATALOG_ROLE

  EXECUTE_CATALOG_ROLE

  EXP_FULL_DATABASE

  IMP_FULL_DATABASE

  PLUSTRACE

  SELECT_CATALOG_ROLE

  說明: PLUSTRACE這個角色是用於執行SQL AUTO TRACE的, 通過執行$ORACLE_HOME/sqlplus/admin/plustrce.sql可以生成這個角色.

 

 

[Oracle] 查看某個用戶的系統權限
 
 
有下面3條GRANT語句:

grant create tablespace to cme;

grant create session to cme;

grant resource to cme;

第1條和第2條的意思很好理解,但是第3條的就不那麼明顯了。有什麼方法可以知道它的意思和授予了什麼權限給cme用戶呢?答案就是查詢DBA_SYS_PRIVS表:

SQL> desc dba_sys_privs;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 GRANTEE                                   NOT NULL VARCHAR2(30)
 PRIVILEGE                                 NOT NULL VARCHAR2(40)
 ADMIN_OPTION                                       VARCHAR2(3)

SQL> select * from dba_sys_privs
  2  where grantee='CME';

GRANTEE                        PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
CME                            UNLIMITED TABLESPACE                     NO
CME                            CREATE SESSION                           NO
CME                            CREATE TABLESPACE                        NO

查詢結果清楚地告訴我們第3條語句授予cme用戶的權限是“UNLIMITED TABLESPACE”。
發佈了304 篇原創文章 · 獲贊 10 · 訪問量 84萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章