oracle 許可權與角色

來源:互聯網
上載者:User

 許可權允許使用者訪問屬於其它使用者的對象或執行程式,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
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許可權允許執行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       

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

        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

 

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

       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可以產生這個角色.

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.