我想知道是否可能在不授予用户对表的 SELECT
,INSERT
等权限的情况下授予用户 EXECUTE
权限,以运行过程中的表格?
这是用于 Web 应用程序的登录表。MySQL 在 Docker 容器中运行。创建存储过程的 SQL 语句作为 Docker 构建过程的一部分进行复制(运行时,SQL 在 entrypoint.sh 中使用)。Login_db 是在运行容器时创建的(-e 标志)。
我想从下面的代码中删除 GRANT SELECT
行,这样无论发生什么情况,Web 应用程序服务器都无法运行类似于 SELECT * FROM logins
的 SELECT
查询。
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;
这并不能解决问题 - 因为表的所有者会暴露相同的权限:
这可能解释了我为什么不能,但表名对我来说有点奇怪(MySQL新手 - 我的印象是mysql.proc
是一个系统表,所以不确定它是否适用):
是不是因为创建该过程时root没有SELECT权限,所以登录用户无法运行它?(因为Docker MySQL运行entrypoint.sh然后才是环境变量)?
该过程代码在这里(我知道,不是最优雅的代码) - 我能否在其中为logins
用户GRANT
然后REVOKE
权限,考虑到DEFINER
是root?
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;