是否可以创建一个 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/