从 2025 年 11 月 1 日起,Amazon Redshift 将不再支持创建新的 Python UDF。如果您想要使用 Python UDF,请在该日期之前创建 UDF。现有的 Python UDF 将继续正常运行。有关更多信息,请参阅博客文章
管理 Amazon Redshift 联合身份验证权限目录上的访问控制
借助 Amazon Redshift 联合身份验证权限,用户可以对 Amazon Web Services 账户中的任何 Redshift 仓库定义粗糙和精细的访问控制。粗糙权限管理对表、视图和数据库对象的访问权限,包括范围内权限,而精细访问控制则支持列级别的权限以及应用行级别安全性(RLS)和动态数据掩蔽(DDM)等安全策略。
授权/撤销
通过联合身份验证权限,您可以定义对表级别访问的权限,例如在任何 Redshift 仓库的 Redshift 联合身份验证权限数据库中,对表和视图进行数据读写的访问权限。
GRANT SELECT ON "sales_db@finance-catalog".sales_schema.sales_table TO "IAMR:sales_analyst"; GRANT INSERT ON "sales_db@finance-catalog".sales_schema.sales_view TO "IAMR:sales_data_engineer"; REVOKE UPDATE ON "sales_db@finance-catalog".sales_schema.us_sales_view FROM "IAMR:us_sales_analyst"; REVOKE DELETE ON "sales_db@finance-catalog".sales_schema.us_sales_view FROM "IAMR:us_sales_analyst";
Amazon Redshift 联合身份验证权限支持范围内权限,让您可以对某个数据库或架构中某种类型的所有对象授予或撤销权限。
GRANT SELECT FOR TABLES IN SCHEMA "sales_db@finance-catalog".sales_schema TO "IAMR:sales_manager"; REVOKE UPDATE FOR TABLES IN SCHEMA sales_schmea DATABASE "sales_db@finance-catalog" FROM "IAMR:sales_analyst";
您可以定义对数据库授予/撤销的访问权限。
GRANT CREATE ON DATABASE "sales_db@finance-catalog" TO "IAMR:sales_admin"; REVOKE TEMP ON DATABASE "sales_db@finance-catalog" FROM "IAMR:sales_analyst";
有关 Amazon Redshift 联合身份验证权限支持的授权语法的更多信息,请参阅您可以在 Amazon Redshift 联合身份验证权限目录上授予的权限。
访问权限的精细控制
您可以使用列级别访问控制、行级别安全性(RLS)和动态数据掩蔽(DDM),对具有 Amazon Redshift 联合身份验证权限的数据库中的敏感数据定义精细访问控制。列级别访问控制可用于对表和视图定义更精细的列级别访问权限。超级用户以及在数据库上具有 sys:secadmin 角色的用户或角色可以创建 RLS 和 DDM 策略,将这些策略附加到特定关系,以及在关系上启用 RLS。
列级别访问控制:
您可以对表或视图中的个别列授予或撤销特定权限。
GRANT SELECT ON "sales_db@finance-catalog".sales_schema.sales_table(order_number, sales_date, purchase_amount, sale_amount) TO "IAMR:sales_revenue_analyst"; REVOKE UPDATE ON "sales_db@finance-catalog".sales_schema.us_sales_view(order_number, sales_date, purchase_amount, sale_amount) FROM "IAMR:sales_revenue_analyst";
行级别安全性(RLS):
您可以为某个关系启用或禁用行级别安全性。
ALTER TABLE "sales_db@finance-catalog".sales_schema.sales_table ROW LEVEL SECURITY ON;
您可以在数据库上创建、更改或删除 RLS 策略。
-- Create an RLS policy CREATE RLS POLICY "sales_db@finance-catalog".policy_america WITH (region VARCHAR(10)) USING (region = 'USA'); -- Alter an RLS policy ALTER RLS POLICY "sales_db@finance-catalog".policy_america USING (region IN ('USA', 'CANADA', 'Mexico')); -- Drop an RLS policy DROP RLS POLICY "sales_db@finance-catalog".policy_america;
您可以在关系上附加或分离 RLS 策略。
-- Attach an RLS policy ATTACH RLS POLICY "sales_db@finance-catalog".policy_america ON "sales_db@finance-catalog".sales_schema.sales_table TO "IAMR:america_sales_analyst"; -- Detach an RLS policy DETACH RLS POLICY "sales_db@finance-catalog".policy_america ON "sales_db@finance-catalog".sales_schema.sales_view_america FROM "IAMR:global_sales_analyst";
动态数据掩蔽(DDM):
您可以在数据库上创建、更改或删除掩蔽策略。
-- Create a masking policy CREATE MASKING POLICY "sales_db@finance-catalog".hash_credit WITH (credit_card varchar(256)) USING (sha2(credit_card + 'testSalt', 256)); -- Alter an masking policy ALTER MASKING POLICY "sales_db@finance-catalog".hash_credit USING (sha2(credit_card + 'otherTestSalt', 256)); -- Drop an masking policy DROP MASKING POLICY "sales_db@finance-catalog".hash_credit;
您可以在关系上附加或分离掩蔽策略。
-- Attach a masking policy ATTACH MASKING POLICY hash_credit ON "sales_db@finance-catalog".sales_schema.transaction_table (credit_card) TO "IAMR:sales_analyst" PRIORITY 30; -- Detach a masking policy DETACH MASKING POLICY hash_credit ON "sales_db@finance-catalog".sales_schema.transaction_view (credit_card) FROM "IAMR:transaction_analyst";
超级用户或具有 sys:secadmin 权限的用户可以通过联合身份验证权限,使用 SHOW POLICIES 命令查看 RLS 和 DDM 策略,及其在关系上的附件。
注意
-
Amazon Redshift 联合身份验证权限不支持 RLS、DDM 策略定义中的用户定义函数(UDF)。
-
Amazon Redshift 联合身份验证权限不支持 Redshift SQL 函数 user_is_member_of、role_is_member_of、user_is_member_of_role。
您可以在 Amazon Redshift 联合身份验证权限目录上授予的权限
对于具有 Amazon Redshift 联合身份验证权限的数据库,支持使用 SQL 语句对资源进行不同粒度级别的权限管理。该语法支持本地表引用(连接到包含资源的数据库时或源数据库处于 USE 状态时)和完全限定的跨数据库引用。
注意
-
username可以引用 IAM 用户、IAM 角色或 IdC(Amazon IAM Identity Center)用户。 -
role_name可以引用 IdC 组。不支持 IAM 组。
粗糙权限
GRANT { SELECT | INSERT | UPDATE | DELETE | TRUNCATE} ON [ TABLE ] { table_name | database@catalog.schema_name.table_name } TO { username | ROLE role_name | PUBLIC } REVOKE { SELECT | INSERT | UPDATE | DELETE | TRUNCATE } ON [ TABLE ] { table_name | database@catalog.schema_name.table_name } FROM { username | ROLE role_name | PUBLIC }
列级别权限
GRANT { { SELECT | UPDATE | DELETE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) } ON { table_name | database@catalog.schema_name.table_name } TO { username | ROLE role_name | PUBLIC } REVOKE { { SELECT | UPDATE | DELETE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) } ON { table_name | database@catalog.schema_name.table_name } FROM { username | ROLE role_name | PUBLIC }
范围内权限
GRANT { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] } FOR SCHEMAS IN DATABASEdatabase@catalogTO {username[ WITH GRANT OPTION ] | ROLErole_name} [, ...] GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | ALTER | TRUNCATE | REFERENCES } [, ...] } | ALL [ PRIVILEGES ] } } FOR TABLES IN { SCHEMAschema_name[DATABASEdatabase@catalog] | DATABASEdatabase@catalog} TO {username[ WITH GRANT OPTION ] | ROLErole_name} [, ...] REVOKE [ GRANT OPTION ] { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] } FOR SCHEMAS IN DATABASEdatabase@catalogFROM {username| ROLErole_name} [, ...] REVOKE [ GRANT OPTION ] { { SELECT | INSERT | UPDATE | DELETE | DROP | ALTER | TRUNCATE | REFERENCES } [, ...] } | ALL [ PRIVILEGES ] } } FOR TABLES IN { SCHEMAschema_name[ DATABASEdatabase@catalog] | DATABASEdatabase@catalog} FROM {username| ROLErole_name} [, ...]