最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何在phpMyAdmin中设置一个只能查看视图而不能看表的权限?
时间:2026-07-12 09:42:45 编辑:袖梨 来源:一聚教程网
必须分别授予SHOW VIEW和SELECT权限于视图对象本身,禁用底层表所有SELECT权限,确保用户仅能通过视图访问数据而无法直查基础表。
CREATE VIEW 和 SHOW VIEW 权限必须分开给,且不能给 SELECT
只让用户查视图、不许碰基础表,核心是:授 show view(看视图定义)、select(查视图内容),但明确拒掉对底层表的 select。注意 create view 是建视图用的,跟“查看”无关,别误勾。
常见错误现象:
用户能点开视图页面,但执行 SELECT * FROM myview 报错 #1142 - SELECT command denied——说明只给了 SHOW VIEW,漏了视图本身的 SELECT 权限。
-
SHOW VIEW用于导出视图结构(如SHOW CREATE VIEW),必须开 -
SELECT权限要授在视图对象上(如myapp.myview),不是授在原表上 - 绝对不要给目标数据库下任何基础表的
SELECT,否则用户可绕过视图直查表 - 如果视图依赖多张表,那些表本身不需要对用户开放权限——只要视图已存在且你只授视图级
SELECT,MySQL 会按视图定义自动校验底层访问
用 SQL 授权比 phpMyAdmin 界面更可靠
phpMyAdmin 的权限界面默认不显示视图对象,容易漏设。直接执行 SQL 能精准控制到「哪个用户 → 对哪个视图 → 给什么权限」。
示例(假设用户 'reporter'@'localhost',视图名 sales_summary,库名 analytics):
GRANT SHOW VIEW ON `analytics`.`sales_summary` TO 'reporter'@'localhost';GRANT SELECT ON `analytics`.`sales_summary` TO 'reporter'@'localhost';FLUSH PRIVILEGES;
关键点:
立即学习“PHP免费学习笔记(深入)”;
- 权限语句里必须写反引号包裹的库名和视图名,否则 MySQL 可能解析失败
- 不要写
GRANT SELECT ON `analytics`.*——这会把所有表都放开,白忙活 -
FLUSH PRIVILEGES在 MySQL 8.0+ 非必需,但加了保险;不加可能导致权限延迟生效
验证时别信界面按钮,要看实际执行结果
phpMyAdmin 不会隐藏“浏览”按钮,哪怕用户根本没 SELECT 权限。它只在点击后才报错。
正确验证方式:
- 登录该账号 → 进入
analytics库 → 点击sales_summary视图 → 点“浏览” → 应成功返回数据 - 同库下点任意基础表(如
raw_sales)→ 点“浏览” → 必须报错#1142 - SELECT command denied - 执行
SHOW CREATE VIEW sales_summary→ 应成功返回建视图语句 - 执行
SELECT * FROM raw_sales LIMIT 1→ 必须报错
最容易被忽略的是:用户可能通过 INFORMATION_SCHEMA 查到表名,再手动拼 SQL 绕过——所以务必确认基础表权限真的没开,而不是只靠界面“没显示表”来判断。