小知识:如何赋予用户查看所有存储过程和触发器的权限
2020-07-28 15:08 AlfredZhao 阅读(1393) 评论(0) 收藏 举报客户有这样一个需求,需要赋予用户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 PROCEDURE和ADMINISTER DATABASE TRIGGER的权限可以实现查看所有存储过程和触发器的权限。
grant DEBUG ANY PROCEDURE, ADMINISTER DATABASE TRIGGER to test;
使用test用户登陆,比如plsql工具,验证可以查看到其他用户的存储过程和触发器,比如jingyu用户下的:
jingyu.sp_pro1
jingyu.insertT1
尝试对其进行删除、修改、重建都会报错权限不足,满足客户需求。
AlfredZhao©版权所有「从Oracle起航,领略精彩的IT技术。」
转载请注明原文链接:https://www.cnblogs.com/jyzhao/p/13391196.html
转载请注明原文链接:https://www.cnblogs.com/jyzhao/p/13391196.html
👋 感谢阅读,欢迎关注我的公众号 「赵靖宇」
浙公网安备 33010602011771号