在 Amazon Redshift 中,授予用户对某个模式的“读”权限涉及到授权用户查询该模式中所有表和视图的能力。由于 Redshift 没有直接授予模式的读权限的选项,你需要分别对每个表和视图授予权限。以下是执行此操作的步骤:
-
授予USAGE权限:
首先,你需要授予用户对模式的USAGE权限,这个权限让用户能够在模式中访问表和其他对象(但不包括表的内容)。例如:
GRANT USAGE ON SCHEMA schemaname TO username;
-
授予所有表的SELECT权限:
之后,你需要为模式中的每张表授予SELECT权限,这可以手动为每张表完成,或者通过脚本动态生成 SQL 语句来实现:
GRANT SELECT ON ALL TABLES IN SCHEMA schemaname TO username;
注意,GRANT SELECT ON ALL TABLES IN SCHEMA语句只会应用到在执行命令时存在的表,新创建的表需要再执行一遍该命令或在创建后单独授权。 -
设置在模式中创建新表时的默认权限: 若要新创建的表自动具有相同的权限,你可以更改模式的默认权限:
ALTER DEFAULT PRIVILEGES IN SCHEMA schemaname GRANT SELECT ON TABLES TO username;
使用ALTER DEFAULT PRIVILEGES时请小心,因为该设置会应用到该模式内由当前用户以后创建的所有新表。如果你有多个用户在该模式中创建表,你需要对每个用户分别设置默认权限。
最后,你可能需要定期检查并为新创建的表或视图授予权限,除非已经设置了合适的默认权限。
422