我只想将权限授予mysql中指定的行。表:消息协议:发件人、收件人、消息
GRANT ALL ON db.messages TO 'jeffrey'@'localhost' WHERE messages.from = 'jeffrey' OR messages.to = 'jeffrey' ;
有了这样的东西,用户只能访问他自己的消息。
你知道怎么解决这个问题吗?
发布于 2012-07-28 02:39:49
对于GRANT命令,不能在每行的基础上设置权限级别(表/列,是-但不是单个行)。
但是,您可以设置一个View来处理此问题,并授予用户访问视图的权限。
如下所示的视图应根据当前用户提供消息:
CREATE VIEW user_messages AS
SELECT *
FROM messages
WHERE
messages.from = user() OR messages.to = user();grant-statement应该类似:
GRANT ALL ON db.user_messages TO 'jeffrey'@'localhost';发布于 2012-07-28 02:38:37
MySQL没有行级权限。您有数据库、表和列。不是行。对于行级,使用视图和/或适当的where子句。
发布于 2012-07-28 02:59:08
如果需要行级权限,则必须添加自己的机制。通常它是一个整数,用作位模式
例如0x0002是主管级别的访问权限
用户Fred是一个主管,因此他们的权限是0x0002,并且他们的UserId是23
然后是像这样的东西
Select * From SomeTable
inner Join myUsers On MyUsers.UserID = 23 and (SomeTable.PermissionID & MyUsers.PermissionID) > 0因此,Fred只能访问位为1 (Big endian !)的permissionId的行。已设置。
尽管它是需要维护的主要PIA,但要进行深入的思考。
https://stackoverflow.com/questions/11693727
复制相似问题