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

Mysql 授予特定用户修改特定表行的权限,mysql,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 synt

出于安全原因,我不喜欢审计员有权修改表中的所有行。所以我试着:

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

我在谷歌上搜索了很多,但我找不到答案,也许mysql不允许我们这样做?

您不能在行上指定权限,只能在列上指定权限。检查语法
您需要类似

<代码> dxNAME.cGIS上的授权更新(AudiTwitter注释)到“审核员”“HooStIdNess”< /代码>

< P>可选地,考虑使用A。让过程更新行,并将其设置为使用SQL安全定义器。在存储过程中,可以包括所需的任何验证,并从要对其进行限制的一个或多个用户处撤消修改行的访问权限。这有点复杂,但据我所知,这是限制您正在寻找的访问类型的唯一方法。

您也可以尝试使用视图而不是表,这些表可用于限制对特定类型行的访问。这是一个非常基本的例子

图片表:

CREATE TABLE IF NOT EXISTS pictures_t
(
   id      INT NOT NULL auto_increment,
   public  BOOL NOT NULL DEFAULT TRUE,
   PRIMARY KEY(id)
)
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';
图片视图:

CREATE TABLE IF NOT EXISTS pictures_t
(
   id      INT NOT NULL auto_increment,
   public  BOOL NOT NULL DEFAULT TRUE,
   PRIMARY KEY(id)
)
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';
创建用户:

CREATE TABLE IF NOT EXISTS pictures_t
(
   id      INT NOT NULL auto_increment,
   public  BOOL NOT NULL DEFAULT TRUE,
   PRIMARY KEY(id)
)
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';

显然他们已经从他们的网站上删除了这篇文章。为什么,我不知道,但是谷歌再也找不到它的最新版本了。这里有一个来自互联网档案的链接。这里还有一面镜子: