小知识:如何赋予用户查看所有存储过程和触发器的权限
时间:2022-07-22
本文章向大家介绍小知识:如何赋予用户查看所有存储过程和触发器的权限,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
客户有这样一个需求,需要赋予用户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
尝试对其进行删除、修改、重建都会报错权限不足,满足客户需求。
- 工厂模式进阶之Android中工厂模式源码分析
- C加加游戏编程,大神十年的绝技,正确的入门,这才叫学习
- 我们应该担心吗?人工智能现在可以通过交谈来学习新单词!
- 印度财政部:比特币是纯粹投机行为 区块链资产是“庞氏骗局”
- 法律人工智能实验室成立,法官和律师会丢饭碗吗?
- 让GridView中CheckBox列支持FireFox
- 在ASP.NET MVC中通过URL路由实现对多语言的支持
- AI加持下的假肢将会越来越聪明
- 通过几个Hello World感受.NET Core全新的开发体验
- ASP.NET MVC三个重要的描述对象:ControllerDescriptor
- 基于自制数据集的MobileNet-SSD模型训练
- .NET Core采用的全新配置系统[1]: 读取配置数据
- ASP.NET MVC三个重要的描述对象:ActionDescriptor
- 升级比特币区块链后,以特币已叩响成功的大门
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- django-模板之URL标签(五)
- 【猫狗数据集】读取数据集的第二种方式
- django-模板之comment标签(六)
- 【猫狗数据集】对一张张图像进行预测(而不是测试集)
- 【猫狗数据集】pytorch训练猫狗数据集之创建数据集
- 【猫狗数据集】可视化resnet18的输出
- springmvc实例之修改雇员相关信息(四)
- 基于TypeScript封装Axios笔记(六)
- 蓝桥杯 k好数 java版
- 强烈推介的几个微信小程序开发小技巧,简单又实用
- 【pytorch-ssd目标检测】验证自己创建的数据集
- django-模板之自动转义autoescape(八)
- 【pytorch-ssd目标检测】测试自己创建的数据集
- 【pytorch-ssd目标检测】训练自己创建的数据集
- SwiftUI:更高级的 MKMapView