[MySQL] 存储过程、函数、触发器和视图的权限检查
来源:互联网 发布:华硕truelife软件 编辑:程序博客网 时间:2024/05/01 15:24
当存储过程、函数、触发器和视图创建后,不单单创建者要执行,其它用户也可能需要执行,换句话说,执行者有可能不是创建者本身,那么在执行存储过程时,MySQL是如何做权限检查的?
在默认情况下,MySQL将检查创建者的权限。假设用户A创建了存储过程p()访问表T,并把execute的权限赋给了B,即使用户B没有访问表T的权限,也能够通过执行存储过程p()访问表T。
下面看一个例子:
首先,我们创建一个表test.t和两个用户a,b,并把权限赋予用户a
MySQL这样的设置有一定的道理,但同时也带来了安全隐患:比如如果一个用户通过创建一个存储过程来访问敏感数据,则可以调用该存储过程的所有用户都能访问敏感数据。
如果你不想使用MySQL的默认设置,可以在定义存储程序和视图时在create语句里使用definer = account字句指定定义者,这样在执行存储程序和视图时,将检查definer的权限,而不是创建者的权限。
举个例子,当你用root 创建一个存储过程时,在默认情况下,在执行该存储过程时,执行者将获得root的权限,但当你加上definer = A后,执行者只能获得A的权限。
但是definer还是没能完全解决上面提到的安全隐患,别急,MySQL还提供了SQL SECURITY选项来控制权限,它有两个取值:
1)DEFINER:以定义者的权限执行(默认)
2)INVOKER:以调用者的权限执行
如果你不想在存储程序或试图在执行时的权限多于调用者,就设置SQL SECURITY INVOKER即可。
例如,下面的试图将访问mysql.user,并设置了SQL SECURITY INVOKER选项,这样如果调用者没有访问mysql.user的权限,则无法通过权限检查。
注意:因为触发器和事件是由系统调用的,没有调用者的概念,所以它们没有SQL SECURITY选项。- [MySQL] 存储过程、函数、触发器和视图的权限检查
- [MySQL] 存储过程、函数、触发器和视图的权限检查
- mysql查询存储过程和函数、视图、触发器
- mysql事务、触发器、视图、存储过程、函数
- mysql导出存储过程、函数、视图、触发器
- mysql事务、触发器、视图、存储过程、函数
- mysql 函数、存储过程、视图、触发器
- MySql—视图、函数、存储过程、触发器
- mySQL查看存储过程、函数、视图、触发器
- MySQL 的触发器、存储过程、函数、视图实验
- MySQL触发器、存储过程、自定义函数、视图的一些笔记
- 修改MySQL存储过程、函数、事件、触发器、视图的DEFINER
- 修改MySQL存储过程、函数、事件、触发器、视图的DEFINER
- Mysql存储过程,函数,视图,触发器的用法
- 修改MySQL存储过程、函数、事件、触发器、视图的DEFINER
- mysql存储过程,视图和触发器
- MySql视图、存储过程和触发器
- MySQL修改存储过程和函数、事件、触发器、视图的DEFINER
- poj_1182_食物链(并查集)
- C++ 学习网站
- Android 4学习(8):用户界面 - Fragment
- property 等
- java开发环境搭建
- [MySQL] 存储过程、函数、触发器和视图的权限检查
- 数据挖掘方面的一个算法——FP-Tree
- ERD Commander 2005搞定win7 系统平移换硬盘
- vs2010中在输出窗口COutputWnd中输出文字和自动滚动
- 博客1
- LDM中的基础技术信息
- cocos2d-x将win32移植到android上
- C语言中的位域、字节序、比特序、大小端
- 【QT开发环境搭建】