5

我只想授予 mysql 中指定行的权限。表:消息 cols:从,到,消息

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

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

你知道如何解决问题吗?

4

3 回答 3

4

根据该GRANT命令,无法在每行的基础上设置权限级别(表/列,是的 - 但不是单独的行)。

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

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

CREATE VIEW user_messages AS
    SELECT *
    FROM messages
    WHERE
        messages.from = user() OR messages.to = user();

并且授权声明应该是类似的:

GRANT ALL ON db.user_messages TO 'jeffrey'@'localhost';
于 2012-07-27T18:39:49.357 回答
1

MySQL 没有行级权限。您有数据库、表和列。不是行。对于行级,使用视图和/或适当的where子句。

于 2012-07-27T18:38:37.413 回答
0

如果您想要行级权限,则必须添加自己的机制。通常它是一个整数,用作位模式

例如 0x0002 是主管级访问

用户 Fred 是主管,因此他们的权限为 0x0002,并且他们的 UserId 为 23

然后像

Select * From SomeTable
inner Join myUsers On MyUsers.UserID = 23 and (SomeTable.PermissionID & MyUsers.PermissionID) > 0

因此,Fred 只能访问设置了 bit 1(Big endian !)的 permissionId 的行。

尽管要维护主要的 PIA,但请进行深入思考。

于 2012-07-27T18:59:08.160 回答