2013-05-21 16 views
11

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

那里;有一张名为ACCOUNTS的表。在此表中,用户填写(并保持最新)关于其公司的所有数据(姓名,地址,POC等)。但是我也希望有附在这张表上的字段,这些字段只读给那些用户使用,比如LastPaymentDate(不能让他们改变它!)。此外,在这些用户中,权限不同。例如,admin/superuser可以更改公司的名称和地址,但标准用户不应该这样做。

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

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

任何建议?视图?查找表以确定要显示哪些字段?倒是没有为整个表,对表中的每一列

回答

23

可以授予的权利,单独的列用户,使用此代码:

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

实施例从这里采取:

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

还存在用于用户或SQL角色(它们是特权组)在MySQL的组中没有支持。

+0

我会在一分钟内阅读该链接,但是如果我正确理解该示例,那么将授予选择(或参见)col1的能力以及将值添加到(col1,col2)的能力?我将要编写PHP来为用户动态创建页面,并且我想要执行PHP代码来确定用户a)是否看不到该字段,b)将其作为只读列还是c )获得读/写访问权限。猜猜我正在寻找如何保持每个领域的访问级别列表。 – Tanoshimi

+0

@Tanoshimi权限存储在'mysql'数据库:columns_priv,db和主表中。使用它们你将能够解决你的任务。也许,你会有更多的问题。 – user4035

+0

我想我唯一的问题是我可以读取权限。基本上,我想要“隐藏”“只读”和“写入”。当PHP构建页面时,我想用这些来确定我是否a)不显示任何内容,b)将其显示为文本,或者c)将它显示为带有用于更新表格的代码的文本框。我知道我可以将USAGE用于None,但我想我只是想知道是否可以在创建页面时阅读这些内容。 – Tanoshimi