【发布时间】:2017-05-30 15:45:00
【问题描述】:
我想知道是否可以向用户授予EXECUTE 权限而不授予对运行过程的表的SELECT、INSERT 等权限?
将它用于 web 应用程序的登录表。 MySQL 在 Docker 容器中运行。用于创建过程的 SQL 作为 docker build 过程的一部分被复制(运行时,sql 在 entrypoint.sh 中使用)。运行容器时会创建 Login_db(-e 标志)。
我想从下面删除 GRANT SELECT 行,所以无论发生什么,webapp 服务器都无法运行 SELECT 查询 - 例如执行 SELECT * FROM logins。
CREATE USER 'logins'@'172.24.0.7' IDENTIFIED BY 'some-password';
GRANT SELECT, INSERT, UPDATE on logins_db.login TO 'logins'@'172.24.0.7';
GRANT EXECUTE ON PROCEDURE logins_db.sp_login16 TO 'logins'@'172.24.0.7';
FLUSH PRIVILEGES;
这并不能解决问题 - 因为作为表所有者会暴露相同的权限:
Execute stored proc fails with GRANT EXECUTE because of table permissions
这可以解释为什么我不能,但是表名对我来说有点奇怪(MySQL 新手 - 我的印象是 mysql.proc 是一个系统表,所以不确定它是否适用):
How to grant execute on specific stored procedure to user
是否可能是 root 在创建过程时没有 SELECT 权限,因此登录用户无法运行它? (因为 Docker MySQL 运行 entrypoint.sh 然后是环境变量)?
程序代码在这里(我知道,不是最优雅的)-考虑到DEFINER 是root,我可以GRANT 然后REVOKE 在其中为logins 用户提供特权吗?
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_login16`(
IN p_email VARCHAR(120),
IN p_password VARCHAR(120))
BEGIN
SELECT user_id,user_password FROM login WHERE user_email = p_email;
【问题讨论】:
标签: mysql security stored-procedures docker grant