mysql - 允许 MySQL 用户访问选择所有 View ,但不能选择表

标签 mysql view permissions

我如何允许用户仅选择访问 View ,而不是任何基础表?

我知道如何使用

一次授予一个权限

grant select on database.viewName to 'User'

但我试图让一个用户或一个配置文件可以访问所有 View ,而无需在创建新 View 时 1 对 1 地运行授权。

在 Sequel Pro 中,在“用户”>“全局权限”和“模式权限”下,我添加了“显示 View ”,但这不起作用。

最佳答案

此答案已使用 MySQL 8.0.23 验证。

  1. 确保您的 View 设置为使用 DEFINER 的凭据运行,这样调用用户不需要任何 TABLE 权限;不这样做会导致错误。有关 {DEFINER|INVOKER} 参数的更多详细信息 see here .

  2. 创建您的用户,完全不分配任何权限。

  3. root 或其他具有足够权限的用户身份,执行以下命令:

    GRANT SELECT ON <database>.<view_name> TO '<user>'@'<host>';
    

因此,如果我的数据库是 cars 并且 View 名为 service_history,并且我有一个用户 john.doe 需要访问它从任何主机,我将执行以下操作:

GRANT SELECT ON cars.service_history TO 'john.doe'@'%';

请注意如何使用 '%' 来指示任何主机都是可接受的,您可以将其替换为 IP 地址,也许是主机名(但我还没有测试过)。

关于mysql - 允许 MySQL 用户访问选择所有 View ,但不能选择表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33906068/

相关文章:

Mysql 选择 3 个条目,跳过接下来的两个,选择接下来的 3 个等

PHP 查看计数器

php - Yii2 - 如何获得计算数字的总和

sql 选择权限有条件

linux - 使用同一组但不是调用者用户的 shell 脚本编辑文件

mysql - 当搜索字符串中有+号时,Sql where 出现问题

php - 如何使用 PDO 查看数据库是否存在

php - mysql_fetch_assoc 中的 is_numeric()

sql - 如何检查数据库中是否存在 View ?

具有选择权限的 MySQL 用户仍然可以更新