授予 MySQL 中各个字段的权限

Posted

技术标签:

【中文标题】授予 MySQL 中各个字段的权限【英文标题】:Granting permission to individual fields in MySQL 【发布时间】:2013-05-16 11:57:34 【问题描述】:

我有 mysql 数据库,其中有几个表。其中之一当然是用于存储用户名和密码的 users 表(其中还包含其他信息)。对于架构中的所有表,我希望能够授予用户(或组)对各个字段的权限。也许一个例子会有所帮助:

那里有一个名为 ACCOUNTS 的表。在此表中,用户填写(并保持最新)有关其公司的所有数据(名称、地址、POC 等)。但我也希望将字段附加到该表,这些字段对于那些用户来说是只读的,例如 LastPaymentDate (不能让他们改变它!)。此外,在这些用户中,权限不同。例如,管理员/超级用户可以更改公司的名称和地址,但标准用户不能。

我认为这可能需要通过为表创建多个视图来完成,每个视图用于每个级别的权限(组)。我对 MySQL 比较陌生,所以我不知道这是否是最好的方法。我还可以看到一个查找表,说明允许查看/编辑哪些字段。

我最初的想法是在 cmets(或字段名称)中包含一个 0-5 的值,然后用户将拥有一个权限级别(0-看不到;1-只读;2 -读写;3-(未使用);4-(未使用);5-编辑/删除字段本身。

有什么建议吗?意见?查找表以确定要显示哪些字段?同样,它不是针对整个表格,而是针对表格中的每一列。

【问题讨论】:

【参考方案1】:

您可以使用以下代码将各个列的权限授予用户:

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 ROLES(权限组)。

【讨论】:

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

以上是关于授予 MySQL 中各个字段的权限的主要内容,如果未能解决你的问题,请参考以下文章

mysql权限操作

MySQL 查看用户授予的权限

32.MySQL中的权限管理

mysql怎么授予用户全局层级的权限

如何仅向节点编辑中的特定字段授予编辑权限?

如何在mysql中授予数据库复制权限?