我如何允许用户仅选择访问 View ,而不是任何基础表?
我知道如何使用
一次授予一个权限grant select on database.viewName to 'User'
但我试图让一个用户或一个配置文件可以访问所有 View ,而无需在创建新 View 时 1 对 1 地运行授权。
在 Sequel Pro 中,在“用户”>“全局权限”和“模式权限”下,我添加了“显示 View ”,但这不起作用。
最佳答案
此答案已使用 MySQL 8.0.23 验证。
确保您的 View 设置为使用
DEFINER
的凭据运行,这样调用用户不需要任何TABLE
权限;不这样做会导致错误。有关{DEFINER|INVOKER}
参数的更多详细信息 see here .创建您的用户,完全不分配任何权限。
以
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/