在MySQL中授予单个字段的权限

23
我有一个MySQL数据库,其中包含多个表。其中一个表是用户表,用于存储用户名和密码(也包括其他信息)。我希望在模式中的所有表中,能够授予用户(或组)对各自字段的访问权限。以下是一个示例:
有一个名为ACCOUNTS的表。在该表中,用户填写并更新有关其公司的所有数据(名称、地址、POC等)。但同时我还想要附加到此表的只读字段,例如LastPaymentDate(不允许更改!)。此外,在这些用户中,权限也不同。例如,管理员/超级用户可以更改公司的名称和地址,但标准用户不允许。
我认为可能需要为该表创建多个视图,每个视图代表一种权限级别(组)。由于我相对较新于MySQL,因此不确定这是否是最佳方法。我还可以看到一个查找表,该表指示哪些字段允许查看/编辑。
我的初始想法是在注释(或字段名称)中包含从0到5的值,然后用户将具有权限级别(0-不能查看;1-只读;2-读/写;3-未使用;4-未使用;5-编辑/删除该字段本身)。
您有什么建议?如何使用视图或查找表来确定应显示哪些字段?请注意,这不是针对整个表格,而是针对表格中的每个列。
1个回答

49

你可以使用以下代码向用户授予单个列的权限:

GRANT SELECT (col1), INSERT (col1,col2) ON mydb.mytbl TO 'someuser'@'somehost';

示例取自此处:

http://dev.mysql.com/doc/refman/5.1/en/grant.html

此外,MySQL 不支持用户组或 SQL 角色(它们是权限组)。


我一会儿就会阅读那个链接,但如果我正确理解了示例,那么将授予选择(或查看)col1的能力,并且可以向(col1,col2)添加值的能力?我将编写PHP来为用户动态创建页面,并且我想要进行PHP代码,以确定用户a)无法查看字段,b)将其作为只读列获取,或c)获得读/写访问权限。我猜我正在寻找如何保留每个字段的访问级别列表。 - Tanoshimi
@Tanoshimi 权限存储在 mysql 数据库中的 columns_priv、db 和 host 表中。使用它们,您将能够解决您的任务。也许,您会有更多的问题。 - user4035
我唯一的问题是我能否读取权限。基本上,我想要有“隐藏”,“只读”和“写入”。当PHP构建页面时,我想使用它们来确定是否a)不显示任何内容,b)将其显示为文本,或c)将其显示为带有更新表格代码的文本框。我知道我可以使用“无”来表示没有权限,但我想知道在页面创建时是否可以读取这些权限。 - Tanoshimi
如果您可以访问MySQL数据库,您可以尝试实验一下,将某个用户授予对某列的访问权限,并检查写入columns_priv表的数据。 - user4035
你确定可以授予单个列的INSERT权限吗?在MS SQL Server中,我会收到一个错误提示(这是有道理的,因为当你插入一条记录时,新记录总是包含所有列)。 - Reversed Engineer
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接