授予特定用户修改特定表行的权限

时间:2011-05-31 02:14:46

标签: mysql

出于安全考虑,我不喜欢审核员有权修改表的所有行。所以我试过了:

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不允许我们这样做?

3 个答案:

答案 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。在存储过程中,您可以包含所需的任何验证,并撤消访问权限以修改要限制其的人员或行。它有点复杂,但这是我所知道的限制你正在寻找的访问类型的唯一方式。