如何修改mysql 存储过程权限
答案:2 悬赏:30 手机版
解决时间 2021-12-29 01:40
- 提问者网友:藍了天白赴美
- 2021-12-28 02:23
如何修改mysql 存储过程权限
最佳答案
- 五星知识达人网友:青尢
- 2021-12-28 03:17
方法如下:
1. 修改mysql 存储过程的definer
修改mysql.proc表 的definer字段
update mysql.proc set definer='root@%' where db='servant_591up'; UPDATE `mysql`.`proc` SET `definer`='root00@%' WHERe `db`='test' AND `name`='jjjj' AND `type`='PROCEDURE'; UPDATE `mysql`.`proc` SET `definer`='wtc_678869@%' WHERe `db`='servant_591up' AND `type`='PROCEDURE';
2.修改sql security
ALTER PROCEDURE www SQL SECURITY INVOKER ; ALTER PROCEDURE www SQL SECURITY DEFINER ;
(1)MySQL存储过程是通过指定SQL SECURITY子句指定执行存储过程的实际用户;
(2)如果SQL SECURITY子句指定为DEFINER,存储过程将使用存储过程的DEFINER执行存储过程,验证调用存储过程的用户是否具有存储过程的execute权限和DEFINER用户是否具有存储过程引用的相关对象的权限;
(3)如果SQL SECURITY子句指定为INVOKER,那么MySQL将使用当前调用存储过程的用户执行此过程,并验证用户是否具有存储过程的execute权限和存储过程引用的相关对象的权限;
(4)如果不显示的指定SQL SECURITY子句,MySQL默认将以DEFINER执行存储过程。
3.执行存储过程授权
GRANT EXECUTE ON test.* TO 'wtc'@'%'; GRANT CREATE ROUTINE,ALTER ROUTINE, SELECT,CREATE, INSERT, UPDATE, DELETE, EXECUTE ON test.* TO 'wtc'@'%' IDENTIFIED BY '111111'
CREATE ROUTINE : 创建存储过程的权限
ALTER ROUTINE : 修改存储过程的权限
4.删除用户
REVOKE all ON test.* FROM wtc@'%'
DELETe FROM user WHERe User='user_name' and Host='host_name';
FLUSH PRIVILEGES;
好文要顶 关注我
1. 修改mysql 存储过程的definer
修改mysql.proc表 的definer字段
update mysql.proc set definer='root@%' where db='servant_591up'; UPDATE `mysql`.`proc` SET `definer`='root00@%' WHERe `db`='test' AND `name`='jjjj' AND `type`='PROCEDURE'; UPDATE `mysql`.`proc` SET `definer`='wtc_678869@%' WHERe `db`='servant_591up' AND `type`='PROCEDURE';
2.修改sql security
ALTER PROCEDURE www SQL SECURITY INVOKER ; ALTER PROCEDURE www SQL SECURITY DEFINER ;
(1)MySQL存储过程是通过指定SQL SECURITY子句指定执行存储过程的实际用户;
(2)如果SQL SECURITY子句指定为DEFINER,存储过程将使用存储过程的DEFINER执行存储过程,验证调用存储过程的用户是否具有存储过程的execute权限和DEFINER用户是否具有存储过程引用的相关对象的权限;
(3)如果SQL SECURITY子句指定为INVOKER,那么MySQL将使用当前调用存储过程的用户执行此过程,并验证用户是否具有存储过程的execute权限和存储过程引用的相关对象的权限;
(4)如果不显示的指定SQL SECURITY子句,MySQL默认将以DEFINER执行存储过程。
3.执行存储过程授权
GRANT EXECUTE ON test.* TO 'wtc'@'%'; GRANT CREATE ROUTINE,ALTER ROUTINE, SELECT,CREATE, INSERT, UPDATE, DELETE, EXECUTE ON test.* TO 'wtc'@'%' IDENTIFIED BY '111111'
CREATE ROUTINE : 创建存储过程的权限
ALTER ROUTINE : 修改存储过程的权限
4.删除用户
REVOKE all ON test.* FROM wtc@'%'
DELETe FROM user WHERe User='user_name' and Host='host_name';
FLUSH PRIVILEGES;
好文要顶 关注我
全部回答
- 1楼网友:不想翻身的咸鱼
- 2021-12-28 03:22
mysql的存储过程也出来许久了(昨天看到一片今年一月的一片文章说mysql没有存储过程,很郁闷,难道大家的观念已经根深蒂固到如此的程度了?)但是网上的资料却少之又少,更别说书上了。为了让大家少走点弯路——
下面提到的将是几个在使用存储过程的时候需要的几个小细节。
首先,在mysql存储过程出现的同时,用户权限也增加了5种,其中和存储过程有关的权限有
三种:
alter routine 编辑或删除存储过程
create routine 建立存储过程
execute 运行存储过程
在使用grant创建用户的时候分配这三种权限。
存储过程在运行的时候默认是使用建立者的权限运行的。
需要注意的是在一个用户拥有建立存储过程的权限时,如果其没有对于select、update或delete等权限的话,虽然操作数据的存储过程可以建立,但调用存储过程的话仍是无法成功的,会返回权限错误,就算拥有运行存储过程的权限也一样。所以,如果有人给你建立了一个没有select、update、delete权限只有create routine权限的用户,骂他吧,他是故意的。
当然这样的用户建立的存储过程倒并不是完全不能使用,创建存储过程中有一个特征子句可以让存储过程使用运行者的权限,在建立存储过程后只要加上sql security invoker特征子句就可以了。如下。
create procedure p()
sql security invoker
这样的话就可以分配两批人,一批给与创建存储过程的权限,作为开发者,一批给与运行存储过程和select、update、delete权限,作为测试者。(脑筋秀逗了)
有了这种权限分配,mysql的安全性完全不需要在功能层去保护了,我通过root用户建立的存储过程,但是在功能层用一个只拥有运行存储过程权限的用户来调用。那么,你就算从功能层上得到数据库的用户名和密码,并且模拟了ip,也不能得到你想要的任何东西。
有了权限,我们可以放心大胆的使用存储过程,不用担心安全问题了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯