小知識:如何賦予用戶查看所有存儲過程和觸發器的權限


客戶有這樣一個需求,需要賦予用戶test查看所有存儲過程和觸發器的權限,但是不能夠對其進行修改或刪除。
當前用戶test具備的權限是基本的connect, resource,其實如果對象是表的話,有點像SELECT ON TABLE_NAME的權限。
但是實際查詢存儲過程和觸發器,並沒有顯示SELECT這樣的權限,可以這樣查詢:

SQL> select * from session_privs where PRIVILEGE like '%TRIGGER%';

PRIVILEGE
--------------------------------------------------------------------------------
CREATE TRIGGER
CREATE ANY TRIGGER
ALTER ANY TRIGGER
DROP ANY TRIGGER
ADMINISTER DATABASE TRIGGER

SQL> select * from session_privs where PRIVILEGE like '%PROCEDURE%';

PRIVILEGE
--------------------------------------------------------------------------------
CREATE PROCEDURE
CREATE ANY PROCEDURE
ALTER ANY PROCEDURE
DROP ANY PROCEDURE
EXECUTE ANY PROCEDURE
DEBUG ANY PROCEDURE

6 rows selected.

現在在用戶jingyu下創建測試用的存儲過程和觸發器:

--create procedure jingyu.sp_pro1
create or replace procedure jingyu.sp_pro1 is
  begin
  insert into jingyu.t1 values('Alfred','Zhao');
  end;
/

--create trigger jingyu.insertT1
create or replace trigger jingyu.insertT1
 after insert on jingyu.t1
 for each row
declare
 -- local variables here
begin
 dbms_output.put_line('新增員工成功');
end insertStaffHint;
/

依次嘗試TRIGGER和PROCEDURE相關的權限,發現分別授予DEBUG ANY PROCEDUREADMINISTER DATABASE TRIGGER的權限可以實現查看所有存儲過程和觸發器的權限。

grant DEBUG ANY PROCEDURE, ADMINISTER DATABASE TRIGGER to test;

使用test用戶登陸,比如plsql工具,驗證可以查看到其他用戶的存儲過程和觸發器,比如jingyu用戶下的:

jingyu.sp_pro1
jingyu.insertT1

嘗試對其進行刪除、修改、重建都會報錯權限不足,滿足客戶需求。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM