mysql GRANT + WHERE

and*_*bin 5 mysql grant

我想只授予mysql中特定行的权限.table:messages cols:from,to,message

GRANT ALL ON db.messages TO 'jeffrey'@'localhost' WHERE messages.from = 'jeffrey' OR messages.to = 'jeffrey' ;

有了这样的东西,用户只能访问自己的消息.

你知道如何解决这个问题吗?

new*_*rey 4

根据该GRANT命令,无法按行设置权限级别(表/列,是的 - 但不是单个行)。

您可以设置一个视图来处理此问题,并授予用户访问该视图的权限。

如下所示的视图应该为您提供基于当前用户的消息:

CREATE VIEW user_messages AS
    SELECT *
    FROM messages
    WHERE
        messages.from = user() OR messages.to = user();
Run Code Online (Sandbox Code Playgroud)

授予声明应该类似:

GRANT ALL ON db.user_messages TO 'jeffrey'@'localhost';
Run Code Online (Sandbox Code Playgroud)