Met*_*iel 9 mysql permissions view
我有一个 MySQL 用户,我希望它只查看我想要的视图,而不是数据库中的任何其他表。我仅授予此用户对某些视图的权限,如下所示:
GRANT SHOW VIEW ON `myDatabase`.`awesome_view` TO 'thisUser'@'%'
Run Code Online (Sandbox Code Playgroud)
如果我做一个show grants;声明,我只能按预期看到这个权限。但是我希望这个用户只查询视图而不是与这些视图相关的表,但我找不到办法做到这一点。似乎是如果我希望用户对视图进行选择,则还必须为表授予选择权,还是我错了?
如果我拒绝select其余表中的语句,并且在命令行中我尝试进行选择,我会得到以下信息:
SELECT * FROM myDatabase.fordibenForYouTable;
ERROR 1142 (42000): SELECT command denied to user 'thisUser'@'localhost' for table 'fordibenForYouTable'
Run Code Online (Sandbox Code Playgroud)
这确实是我想要的,但如果我选择视图数据,我也会被拒绝。
有没有一种方法可以让用户只看到视图而不是表格?
您必须将视图视为表格。information_schema 已经做了
如果你跑
SELECT table_name FROM information_schema.tables
WHERE engine IS NULL;
Run Code Online (Sandbox Code Playgroud)
你得到所有的意见。
只需将视图上的 SELECT 授予用户,如下所示
GRANT SELECT ON `myDatabase`.`fordibenForYouTable` TO 'thisUser'@'localhost' ;
Run Code Online (Sandbox Code Playgroud)
完成此操作后,您应该具有对该表的 SELECT 访问权限。
为了确保,运行 SHOW GRANTS FOR 'thisUser'@'localhost';
您还应该能够看到授予了哪些表级访问权限 'thisUser'@'localhost'
SELECT * FROM mysql.tables_priv
WHERE user='thisUser' and host='localhost'\G
Run Code Online (Sandbox Code Playgroud)
您还可以查看哪些用户具有表级访问权限 myDatabase.fordibenForYouTable
SELECT * FROM mysql.tables_priv
WHERE db='myDatabase' and table_name='fordibenForYouTable'\G
Run Code Online (Sandbox Code Playgroud)
小智 5
我知道这现在已经过时了,但这就是为我解决这个问题的方法......
答案是“SQL SECURITY”语法。
我的原始视图定义将 SQL SECURITY 设置为“INVOKER”。这意味着用户被迫同时拥有视图和表的选择权限。
当我将 SQL SECURITY 更改为“DEFINER”时,我只能授予用户对视图的选择权限。
| 归档时间: |
|
| 查看次数: |
28533 次 |
| 最近记录: |