mysql 创建存储过程权限问题

来源:互联网 发布:淘宝卖家如何查询等级 编辑:程序博客网 时间:2024/05/01 20:58

在mysql下创建存储过程,一直提示如下信息:

刚开始我给该用户授予create routine权限,但是还是不能创建,后来才发现在存储过程中也有select,insert等其他操作,并看到一篇日志如下

首先,在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,也不能得到你想要的任何东西。 有了权限,我们可以放心大胆的使用存储过程,不用担心安全问题了

我给用户授权,是指定数据库的

grant all privileges on unisoftdb.* to unisoft@'192.168.0.10' identified by 'unisoft@a1b2c3$4';

但是

还是没有这些权限

再次授权:

grant all privileges on *.* to unisoft@'192.168.0.10' identified by 'unisoft@a1b2c3$4';

这样才可以。

一个指定库,一个没指定库,查询结果就不一样,而且第二次授权后就可以创建存储过程了。

 

如果大家指定原因,欢迎留言,如有不对的地方,欢迎指正。

0 0
原创粉丝点击