是否可以创建一个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而其他人没有访问权限,没有结果,或类似的东西?
答案 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
权限授予视图。该特权不会被转移到基础表,因此用户将无法访问视图未公开的任何记录。