MYSQL 执行数据库权限问题

来源:互联网 发布:股票网络销售技巧 编辑:程序博客网 时间:2024/05/18 01:39

最近在写程序,把SQL都丢到数据库后,只给一个账号执行数据库的权限.

1.我们也可以不给 权限

至于这二项,要给还是不给,暂时还不明白.

2.这个账号目前只能执行存储过程,不能执行SQL语句.

如下以下存储过程

DELIMITER $$USE `tymes`$$DROP PROCEDURE IF EXISTS `Prod_UPH_GetMAX`$$CREATE DEFINER=`root`@`localhost` PROCEDURE `Prod_UPH_GetMAX`(IN para0 VARCHAR(2) -- 模式,IN para1 VARCHAR(30)-- 开始日期,IN para2 VARCHAR(30)-- 结束日期)    SQL SECURITY DEFINER COMMENT 'GetMaxUPH' -- SQL SECURITY INVOKER/DEFINERBEGIN    SELECT * FROM ( SELECT    w.`TypeName` AS 产品   ,MAX(u.`UPH`) AS MAXUPH   ,u.`ProdQTY` AS 产量   ,u.`SpentTime` AS 时间FROM  `ns_product_uph` u  INNER JOIN `ns_order_work` w    ON (u.`MOKEY` = w.`uuidOrderWork`) WHERE u.`CREATE_DATE` BETWEEN para1 AND para2AND u.`IsUPH`='true'GROUP BY w.`TypeName` ASC) uph LIMIT 0,1000;    END$$DELIMITER ;

解释一下这一句 SQL SECURITY INVOKER/DEFINER
SQL SECURITY INVOKER 以执行存储过程的实际用户执行存储过程,此时,因为此用户没有Select insert update dalete 所以最终则是失败

SQL SECURITY DEFINER 以创建存储过程的用户执行,一般情况下,此用户权限会开放Select insert update dalete 所以存储过程能成功执行

 

调用过程中发现一问题

SELECT privilege on mysql.proc to parse column types

意思很明显,就是说,没有查询mysql.proc表权限,奇怪的是我们,其实并不需求执行这个操作.此表是存储整个数据存储过程信息的地方.

查了一些资料显示,说是MYSQL官方JDBC驱动的问题.

所以,只好放弃.把这个表的查询权限也给予到此执行存储过程的用户.(要有相关权限)

GRANT SELECT ON `mysql`.`proc` TO 'webuser'@'192.168.1.%';

 

此时再执行存储过程,OK,没问题了.数据安全就好一点

1.此时,无法通过phpmyadmin登录

2.可以看到information_schema 表信息mysql.proc 表内容.可以看到项目表的存在过程信息,但看不到表信息.

 

SQL SECURITY DEFINER 如果此时还出现权限问题,请检查相关权限,首先是创建存储过程的用户是什么,权限是什么,建议(只开执行存储过程权限,创建临时表权限, (不知道是不是创建存储过程的账号开了就不用开?))大家可以试一下,性能.

 SQL SECURITY INVOKER 很简单,就检查实际用户权限,不建议,除非.sql与存储过程结合,但权限却还要放开.

 之前曾有一个问题就是,连接数据库时,提示无权限,检查后发现,返回的主机名称竟不是我电脑的,检查网络,本机都没找到问题,最后,把服务器重启后就正常了.

原创粉丝点击