MySQL 8视图列级权限授予问题:如何限制用户仅查看视图指定列
MySQL 8 视图列级权限配置方案
MySQL 8 本身完全支持视图的列级权限控制,你之前授权不生效的核心原因是授权语句指向了基表而非目标视图,调整授权对象即可实现需求。
具体操作步骤
- 首先确认你的目标视图所属库、视图名、以及要开放的列名,假设你使用的测试环境信息如下:
所属库:test_db
视图名:user_info_view(共三列:id、name、mobile,要求仅开放id、name两列)
目标授权用户:dev_user@192.168.1.% - 如果你之前已经给该用户授予过视图的全量SELECT权限,先回收旧权限避免冲突:
REVOKE SELECT ON test_db.user_info_view FROM 'dev_user'@'192.168.1.%'; FLUSH PRIVILEGES;
- 执行列级权限授权语句:
GRANT SELECT (id, name) ON test_db.user_info_view TO 'dev_user'@'192.168.1.%'; FLUSH PRIVILEGES;
- 权限验证
切换到dev_user账号执行测试:- 查询允许访问的两列:
SELECT id, name FROM test_db.user_info_view;可正常返回结果 - 执行
SELECT * FROM test_db.user_info_view;或者查询mobile列时,会直接抛出权限不足的错误提示
- 查询允许访问的两列:
注意事项
- 执行授权操作的账号需要持有
GRANT OPTION权限才能正常给其他账号分配权限 - 如果你同时给该用户开放了视图对应基表的访问权限,需要同步调整基表的权限规则,避免用户直接访问基表绕开视图的列级权限限制
内容的提问来源于stack exchange,提问作者miguelmtnezz_
相关产品推荐
相关产品推荐

