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

 

轉自:http://blog.csdn.net/wwweducn/archive/2006/03/19/629434.aspx
  缺省情況下建立的角色沒有password或者其他的識別。如果使用IDENTIFIED BY子句建立,那麼角色不會自動響應,必須用SET ROLE激活。

SET ROLE role_name IDENTIFIED BY password

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

  對象權限

  對象權限就是指在表、視圖、序列、過程、函數或包等對象上執行特殊動作的權利。有九種不同類型的權限可以授予給用戶或角色。如下表:
權限 ALTER DELETE EXECUTE INDEX INSERT READ REFERENCE SELECT UPDATE
Directory no no no no no yes no no no
function no no yes no no no no no no
procedure 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 no
Libary 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權限允許執行ALTERSequence語句,重新給sequence分配最小值、增量和緩衝區大小。

  系統權限

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

  角色和角色權限

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

  授予和撤銷權限

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

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

  對象權限被授予 WITH GRANT OPTION,

  權限和數據字典

  數據字典是ORACLE存儲有關數據庫結構信息的地方,數據本身存放在其他地方,數據字典由表和視圖組成。在考試中關於數據字典最容易考的內容是:查看那一類權限已經被授予。比如DBA_TAB_PRIV包含了用戶授予給另一用戶的對象權限和在授予時是否帶有WITHGRANTOTPION子串的信息。注意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  *  fromSESSION_ROLES order byROLE  

           說明: 這個查詢會返回當前用戶所被授予的全部角色, 其中包括嵌套授權的

角色.例如將DBA角色授予了一個用戶,DBA角色已經被授予的角色(例如

exp_full_database 和 imp_full_database)也會被查詢出來   

       2. Select * fromUSER_ROLE_PRIVS       

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

        SelectPrivilege from ROLE_SYS_PRIVS whereROLE=&Role

       輸入 role='CONNECT'

        輸出:
          PRIVILEGE
          --------------------
           ALTER SESSION
           CREATE CLUSTER
           CREATE DATABASE LINK
           CREATE SEQUENCE
           CREATE SESSION
           CREATE SYNONYM
           CREATE TABLE
           CREATE VIEW

 

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

       SelectGRANTED_ROLE from ROLE_ROLE_PRIVS whereROLE=&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可以生成這個角色.

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

connect resource權限;
    grant connect,resource to user;
    後用戶包括的權限:
    CONNECT角色: --是授予最終用戶的典型權利,最基本的
    ALTER SESSION --修改會話
    CREATE CLUSTER --建立聚簇
    CREATE DATABASE LINK --建立數據庫鏈接
    CREATE SEQUENCE --建立序列
    CREATE SESSION --建立會話
    CREATE SYNONYM --建立同義詞
    CREATE VIEW --建立視圖
    RESOURCE角色: --是授予開發人員的
    CREATE CLUSTER --建立聚簇
    CREATE PROCEDURE --建立過程
    CREATE SEQUENCE --建立序列
    CREATE TABLE --建表
    CREATE TRIGGER --建立觸發器
    CREATE TYPE --建立類型
    從dba_sys_privs裏可以查到:
    SQL> select grantee,privilege from dba_sys_privs
    2 where grantee='RESOURCE' order by privilege;
    GRANTEE PRIVILEGE
    ------------ ----------------------
    RESOURCE CREATE CLUSTER
    RESOURCE CREATE INDEXTYPE
    RESOURCE CREATE OPERATOR
    RESOURCE CREATE PROCEDURE
    RESOURCE CREATE SEQUENCE
    RESOURCE CREATE TABLE
    RESOURCE CREATE TRIGGER
    RESOURCE CREATE TYPE

 

3, Oracle 9i預定義的角色

角色名稱 說明
CONNECT 數據庫連接角色,用於連接數據庫,具有創建簇、數據庫鏈接、序列、同義詞、表和視圖,以及修改會話的權利
DBA 數據庫管理員角色,具有所有使用ADMIN選項創建的系統權限,可以將系統權限授予其他用戶或角色
DELETE_CATALOG_ROLE 刪除目錄角色,可以刪除或重建數據字典
EXECUTE_CATALOG_ROLE 執行目錄角色,能夠執行所有系統包
EXP_FULL_DATABASE 能夠使用導出程序執行數據庫的完全和增量導出
IMP_FULL_DATABASE 能夠使用導入程序執行數據庫的完全導入
RESOURCE 可以創建簇、表、序列以及PL/SQL編程用方案對象,包括過程、程序包、觸發器等
SELECT_CATALOG_ROLE 查詢數據字典表或視圖

轉自:http://blog.sina.com.cn/s/blog_625651900100ifrk.html

      http://blog.csdn.net/levine2008/article/details/4575018

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章