首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql GRANT + WHERE

mysql GRANT + WHERE
EN

Stack Overflow用户
提问于 2012-07-28 02:36:43
回答 3查看 1.8K关注 0票数 5

我只想将权限授予mysql中指定的行。表:消息协议:发件人、收件人、消息

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

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

你知道怎么解决这个问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-28 02:39:49

对于GRANT命令,不能在每行的基础上设置权限级别(表/列,是-但不是单个行)。

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

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

代码语言:javascript
复制
CREATE VIEW user_messages AS
    SELECT *
    FROM messages
    WHERE
        messages.from = user() OR messages.to = user();

grant-statement应该类似:

代码语言:javascript
复制
GRANT ALL ON db.user_messages TO 'jeffrey'@'localhost';
票数 4
EN

Stack Overflow用户

发布于 2012-07-28 02:38:37

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

票数 1
EN

Stack Overflow用户

发布于 2012-07-28 02:59:08

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

例如0x0002是主管级别的访问权限

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

然后是像这样的东西

代码语言:javascript
复制
Select * From SomeTable
inner Join myUsers On MyUsers.UserID = 23 and (SomeTable.PermissionID & MyUsers.PermissionID) > 0

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11693727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档