出于安全考虑,我不喜欢审核员有权修改表的所有行。所以我试过了:
GRANT UPDATE audit_comment ON cgis TO auditor IDENTIFIED BY 'audit@TE';
但它失败了
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'audit_comment ON cgis TO auditor IDENTIFIED BY 'audit@TE'' at line 1
我已经google了很多,但我找不到答案,也许mysql不允许我们这样做?
答案 0 :(得分:2)
您还可以尝试使用视图而不是表,这些表可用于限制对特定类型行的访问。这是一个非常基本的例子
PICTURES表:
CREATE TABLE IF NOT EXISTS pictures_t
(
id INT NOT NULL auto_increment,
public BOOL NOT NULL DEFAULT TRUE,
PRIMARY KEY(id)
)
PICTURES视图:
CREATE VIEW pictures_v
AS
SELECT
P.*
FROM pictures_t AS P
WHERE
P.public = TRUE
ORDER BY id;
创建用户
GRANT SELECT, INSERT, UPDATE ON db.pictures_t TO 'god'@'localhost' IDENTIFIED BY 'heaven';
GRANT SELECT, INSERT, UPDATE ON db.pictures_v TO 'satan'@'localhost' IDENTIFIED BY 'hell';
答案 1 :(得分:0)
您无法在行上指定权限,只能在列上指定权限。检查语法here
你需要像这样的东西
GRANT UPDATE (audit_comment) ON db_name.cgis TO 'auditor'@'host_name'
答案 2 :(得分:0)
或者,考虑使用stored procedure。让过程更新行,并将其设置为使用SQL SECURITY DEFINER。在存储过程中,您可以包含所需的任何验证,并撤消访问权限以修改要限制其的人员或行。它有点复杂,但这是我所知道的限制你正在寻找的访问类型的唯一方式。