【发布时间】:2016-05-31 03:22:09
【问题描述】:
我有this question for SQL-Server的MySQL版本
我正在使用 readline 6.3 为 debian-linux-gnu (x86_64) 运行 mysql Ver 14.14 Distrib 5.5.49
我创建了一个只有这个权限的用户:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'p@55w0rd';
GRANT EXECUTE ON dbname.* TO 'username'@'localhost';
我在dbname 上创建了这个程序:
DELIMITER $$
CREATE PROCEDURE seed_database()
this_procedure:BEGIN
INSERT INTO `dbtable` VALUES (1,'data');
END $$
DELIMITER ;
但是当我使用该用户登录并尝试CALL seed_database(); 时,我得到:
ERROR 1142 (42000) at line 1: INSERT command denied to user 'username'@'localhost' for table 'dbtable'
我试图通过只允许用户执行存储过程来遵循the principle of least privilege。我不想授予用户权限直接在具有明显GRANT INSERT ON dbname.dbtable TO 'username'@'localhost'; 的表上插入,以防凭据被泄露,并且因为我在存储过程中有一些复杂的逻辑会产生要存储的输入(由硬表示-我不希望用户直接生成和插入的示例(1,'data') 中的编码数据。但我希望他们使用存储过程来实现相同的目标。
【问题讨论】:
标签: mysql sql security stored-procedures insert