如何创建可访问所有新旧schema的Redshift只读用户?
Redshift全局只读用户创建方案
该需求可以完全实现,Redshift支持同时对已有对象授予权限、对未来新建对象配置默认权限,两类配置结合即可覆盖你要求的所有场景,具体操作如下:
操作步骤
- 第一步:创建目标只读用户,将命令内的占位符替换为你实际的业务参数即可
CREATE USER <只读用户名> PASSWORD '<自定义密码>'; - 第二步:授予用户当前数据库下所有已存在Schema的访问权限
GRANT USAGE ON ALL SCHEMAS IN DATABASE <目标数据库名> TO <只读用户名>; - 第三步:授予用户所有已存在Schema下的表、视图的查询权限
GRANT SELECT ON ALL TABLES IN ALL SCHEMAS IN DATABASE <目标数据库名> TO <只读用户名>; - 第四步:配置默认权限,后续新创建的Schema自动对该用户开放访问权限
ALTER DEFAULT PRIVILEGES FOR ALL ROLES IN DATABASE <目标数据库名> GRANT USAGE ON SCHEMAS TO <只读用户名>; - 第五步:配置默认权限,后续新创建的表、视图自动对该用户开放查询权限
ALTER DEFAULT PRIVILEGES FOR ALL ROLES IN ALL SCHEMAS IN DATABASE <目标数据库名> GRANT SELECT ON TABLES TO <只读用户名>;
注意事项
- 所有命令中的
<目标数据库名>、<只读用户名>、<自定义密码>占位符需替换为实际值,密码需满足Redshift密码复杂度规则:至少8位,包含大小写字母、数字和特殊符号 - 如果不需要对所有角色创建的对象开放权限,可以将
ALTER DEFAULT PRIVILEGES语句中的FOR ALL ROLES替换为FOR ROLE <指定角色名>,缩小权限生效范围,降低安全风险 - 权限配置完成后,建议使用只读用户登录,尝试访问不同Schema下的表,验证权限配置是否符合预期
内容的提问来源于stack exchange,提问作者geronimo
相关产品推荐
相关产品推荐

