PostgreSQL如何配置仅可访问所有现有及未来视图的用户
结论
完全可行,不需要每次新建视图单独执行授权,不同数据库的实现方案如下:
PostgreSQL 配置方案
- 第一步:授予该用户目标 schema 下所有现有视图的查询权限
GRANT SELECT ON ALL VIEWS IN SCHEMA chartio_read_only TO chartio_schema_user;
- 第二步:配置 schema 默认权限,后续所有新增视图自动授予查询权限给该用户
ALTER DEFAULT PRIVILEGES IN SCHEMA chartio_read_only GRANT SELECT ON VIEWS TO chartio_schema_user;
补充说明:如果需要全局所有schema生效,去掉语句中的IN SCHEMA chartio_read_only子句即可;如果需要仅针对特定角色创建的视图自动授权,可以在语句中增加FOR ROLE <创建视图的角色名称>子句。
MySQL 配置方案
MySQL 支持库级别的权限继承,只需要授予指定库的查询权限即可同时覆盖现有和后续新增的所有表、视图:
-- 授予schema级查询权限,自动覆盖所有现有和新增的表/视图 GRANT SELECT ON chartio_read_only.* TO 'chartio_schema_user'@'%'; -- 刷新权限使配置生效 FLUSH PRIVILEGES;
权限隔离建议
如果需要限制该用户仅能访问视图、无法查询底层基表,可将所有视图统一放在单独的schema(如示例中的chartio_read_only),仅给用户授予该schema的访问权限,不开放基表所在schema的权限即可。
内容的提问来源于stack exchange,提问作者EviSvil
相关产品推荐
相关产品推荐

