mysql基于字段值的自定义用户权限

时间:2011-12-31 16:46:30

标签: mysql permissions

是否可以创建一个MySQL用户名,该用户名只具有访问具有特定值的表中数据的权限

例如'root'用户名和'user1'可以访问

ID    |   USER_ID    |  TEXT
======+==============+===============
1     |    1         | This is text a
2     |    1         | This is text b
3     |    2         | This is text c (hidden)
4     |    1         | This is text d

这样他们只能看到ID 1,2和4而其他人没有访问权限,没有结果,或类似的东西?

1 个答案:

答案 0 :(得分:3)

您可以通过创建一个排除MySQL用户无权访问的记录的视图来执行此操作:

/* Create a view that excludes records not belonging to USER_ID=1 */
CREATE VIEW restrict_vw AS (
  SELECT 
    ID,
    USER_ID,
    TEXT
  FROM tbl
  WHERE USER_ID = 1
);

/* Remove privileges from the underlying table */
REVOKE ALL ON dbname.tbl FROM user1@host;
/* And grant SELECT only on the view */
GRANT SELECT ON dbname.restrict_vw TO user1@host IDENTIFIED BY 'password';

我们的想法是撤消数据库中的所有权限(包括基础表),然后仅将SELECT权限授予视图。该特权不会被转移到基础表,因此用户将无法访问视图未公开的任何记录。