MYSQL 执行数据库权限问题

探讨了在数据库中设置特定账号权限以执行SQL存储过程,包括SQLSECURITYINVOKER与SQLSECURITYDEFINER的区别,以及如何解决权限问题以确保数据安全,同时讨论了在执行存储过程时遇到的权限限制及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在写程序,把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/DEFINER
BEGIN
    
		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 para2
		AND 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与存储过程结合,但权限却还要放开.

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值