SESSION_PRIVS和SESSION_ROLES動態檢視

yangtingkun發表於2010-09-20

SESSION_PRIVSSESSION_ROLES用來獲取使用者當前的授權和角色,和V$檢視類似,這兩個檢視訪問的是當前生效的許可權和角色。

 

 

對比呼叫者許可權儲存過程和定義者許可權儲存過程:

QL> SELECT * FROM SESSION_PRIVS;

PRIVILEGE
----------------------------------------
ALTER SYSTEM
CREATE SESSION
ALTER SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE VIEW
CREATE DATABASE LINK
CREATE PROCEDURE
CREATE TRIGGER
CREATE MATERIALIZED VIEW
CREATE TYPE

已選擇11行。

SQL> SELECT * FROM SESSION_ROLES;

ROLE
------------------------------
R_TEST
PLUSTRACE

SQL> SET SERVEROUT ON
SQL> CREATE OR REPLACE PROCEDURE P_DEFINER
  2  AS
  3  BEGIN
  4     DBMS_OUTPUT.PUT_LINE('PRIVILEGE:');
  5     FOR I IN (SELECT PRIVILEGE FROM SESSION_PRIVS) LOOP
  6             DBMS_OUTPUT.PUT_LINE('  ' || I.PRIVILEGE);
  7     END LOOP;
  8     DBMS_OUTPUT.NEW_LINE;
  9     DBMS_OUTPUT.PUT_LINE('ROLE:');
 10     FOR I IN (SELECT ROLE FROM SESSION_ROLES) LOOP
 11             DBMS_OUTPUT.PUT_LINE('  ' || I.ROLE);
 12     END LOOP;
 13  END;
 14  /

過程已建立。

SQL> CREATE OR REPLACE PROCEDURE P_INVOKER
  2     AUTHID CURRENT_USER
  3  AS
  4  BEGIN
  5     DBMS_OUTPUT.PUT_LINE('PRIVILEGE:');
  6     FOR I IN (SELECT PRIVILEGE FROM SESSION_PRIVS) LOOP
  7             DBMS_OUTPUT.PUT_LINE('  ' || I.PRIVILEGE);
  8     END LOOP;
  9     DBMS_OUTPUT.NEW_LINE;
 10     DBMS_OUTPUT.PUT_LINE('ROLE:');
 11     FOR I IN (SELECT ROLE FROM SESSION_ROLES) LOOP
 12             DBMS_OUTPUT.PUT_LINE('  ' || I.ROLE);
 13     END LOOP;
 14  END;
 15  /

過程已建立。

SQL> EXEC P_DEFINER
PRIVILEGE:
ALTER SYSTEM
CREATE SESSION
ALTER SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE VIEW
CREATE DATABASE LINK
CREATE PROCEDURE
CREATE TRIGGER
CREATE MATERIALIZED VIEW
CREATE TYPE
ROLE:

PL/SQL 過程已成功完成。

SQL> EXEC P_INVOKER
PRIVILEGE:
ALTER SYSTEM
CREATE SESSION
ALTER SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE VIEW
CREATE DATABASE LINK
CREATE PROCEDURE
CREATE TRIGGER
CREATE MATERIALIZED VIEW
CREATE TYPE
ROLE:
R_TEST
PLUSTRACE

PL/SQL 過程已成功完成。

對於定義者許可權儲存過程,角色是無效的,因此在儲存過程中訪問SESSION_ROLES檢視查詢不到任何記錄,而呼叫者許可權儲存過程中是可以檢視到。

這種特性和sqlplusSHOW PARAMETER命令有不少相似之處,都是反映查詢時刻的真實情況。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-674527/,如需轉載,請註明出處,否則將追究法律責任。

相關文章