SESSION_PRIVS和SESSION_ROLES動態檢視
SESSION_PRIVS和SESSION_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檢視查詢不到任何記錄,而呼叫者許可權儲存過程中是可以檢視到。
這種特性和sqlplus的SHOW PARAMETER命令有不少相似之處,都是反映查詢時刻的真實情況。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-674527/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 8.1關於動態效能檢視
- db2常用動態效能檢視DB2
- 系統狀態統計和檢視
- Depends.exe檢視dll動態鏈檔案
- (重要)關於效能的幾個主要動態檢視
- Alibaba Java診斷工具Arthas檢視Dubbo動態代理類Java
- Linux如何檢視系統和程式的執行狀態?Linux
- 檢視BW執行狀態
- GitLab 的元件狀態檢視Gitlab元件
- linux停止和檢視啟動服務的命令Linux
- 基於圖神經網路的動態物化檢視管理神經網路
- Oracle普通檢視和物化檢視的區別Oracle
- Django檢視之檢視類和中介軟體Django
- day04-檢視和檢視解析器
- Centos7.2 上防火牆的狀態檢視和關閉CentOS防火牆
- 模態檢視控制器:GCTUIModalPresentationViewControllerGCUIViewController
- Kylin系統檢視firewalld狀態
- firewalld:檢視版本/幫助/狀態
- ASP.NET Core 5.0 MVC中的檢視分類——佈局檢視、啟動檢視、具體檢視、分部檢視ASP.NETMVC
- django 的類檢視和函式檢視-雜談Django函式
- drf : 通用檢視類和(GenericAPIView)5個檢視擴充套件類,九個檢視子類,檢視集。APIView套件
- 拖拽滾動檢視(一)
- 使用 telescope 檢視 schedule 執行狀態
- 如何檢視CATIA許可證狀態
- 檢視一個通訊埠狀態
- linux程式和埠檢視Linux
- JavaScript 檢視全文和收起JavaScript
- mysql建立索引和檢視MySql索引
- Flask URL和檢視(一)Flask
- Django的檢視和模板Django
- Android檢視動畫集合AndoridViewAnimationsAndroid動畫View
- 檢視程序的啟動命令
- 3.4.4 檢視例項的靜默狀態
- linux檢視伺服器狀態命令--lsloadLinux伺服器
- 通過Python檢視Azure VM的狀態Python
- 檢視使用 MySQL Shell 的連線狀態MySql
- cmd 檢視防火牆狀態以及關閉防火牆
- Elasticsearch 檢視節點狀態資訊(qbit)Elasticsearch
- mysql檢視主從同步狀態的方法MySql主從同步