mysql根据字段值自定义用户权限

标签 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 而其他人将无法访问、没有结果或类似的东西?

最佳答案

您可以通过创建一个排除 MySQL 用户不应访问的记录的 View 来做到这一点:

/* 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 权限授予 View 。特权不会转移到基础表,因此用户将无法访问 View 未公开的任何记录。

关于mysql根据字段值自定义用户权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8689289/

相关文章:

android - 在Android中获取文件权限(root)

带有 mod_fcgid 的 php5 导致 500 错误 - 可能是错误的权限

mysql - 如何在mysql中查找列不为空的次数?

mysql - 更新表内连接

javascript - 为什么 href 在本地站点上不起作用?

从设置中禁用位置权限时,Android 应用程序崩溃?

java - 寻找不需要权限即可请求的唯一设备 ID

mysql - 根据其中一个表中特定列中的最大值返回 JOIN 结果

mysql - PDO MySQL 只需要一行吗?

php - 使用带有正则表达式的 Sphinx 搜索车牌表