示例
以下示例向用户 fred
授予对 SALES 表的 SELECT 权限。
grant select on table sales to fred;
以下示例向用户 fred
授予对 QA_TICKIT schema 中所有表的 SELECT 权限。
grant select on all tables in schema qa_tickit to fred;
以下示例向用户组 QA_USERS 授予对 schema QA_TICKIT 的全部 schema 权限。Schema 权限包括 CREATE 和 USAGE。USAGE 向用户授予访问 schema 中对象的权限,但不授予对这些对象的 INSERT 或 SELECT 之类的权限。单独授予对每个对象的权限。
create group qa_users; grant all on schema qa_tickit to group qa_users;
以下示例向组 QA_USERS 中的所有用户授予对 QA_TICKIT schema 中的 SALES 表的所有权限。
grant all on table qa_tickit.sales to group qa_users;
以下示例向组 QA_USERS 和 RO_USERS 中的所有用户授予对 QA_TICKIT 架构中的 SALES 表的所有权限。
grant all on table qa_tickit.sales to group qa_users, group ro_users;
以下示例向组 QA_USERS 中的所有用户授予对 QA_TICKIT schema 中的 SALES 表的 DROP 权限。
grant drop on table qa_tickit.sales to group qa_users;>
以下命令序列说明,具有对 schema 的访问权限并不表示授予对 schema 中的表的权限。
create user schema_user in group qa_users password 'Abcd1234'; create schema qa_tickit; create table qa_tickit.test (col1 int); grant all on schema qa_tickit to schema_user; set session authorization schema_user; select current_user;
current_user -------------- schema_user (1 row)
select count(*) from qa_tickit.test;
ERROR: permission denied for relation test [SQL State=42501]
set session authorization dw_user; grant select on table qa_tickit.test to schema_user; set session authorization schema_user; select count(*) from qa_tickit.test;
count ------- 0 (1 row)
以下命令序列说明,具有对视图的访问权限并不意味着具有对基础表的访问权限。虽然名为 VIEW_USER 的用户已被授予 VIEW_DATE 的所有权限,但该用户无法从 DATE 表中选择数据。
create user view_user password 'Abcd1234'; create view view_date as select * from date; grant all on view_date to view_user; set session authorization view_user; select current_user;
current_user -------------- view_user (1 row)
select count(*) from view_date;
count ------- 365 (1 row)
select count(*) from date;
ERROR: permission denied for relation date
以下示例向用户 cust_name
授予对 cust_phone
表的 cust_profile
和 user1
列的 SELECT 权限。
grant select(cust_name, cust_phone) on cust_profile to user1;
以下示例向 cust_name
组授予对 cust_phone
和 cust_contact_preference
列的 SELECT 权限,并授予对 cust_profile
表的 sales_group
列的 UPDATE 权限。
grant select(cust_name, cust_phone), update(cust_contact_preference) on cust_profile to group sales_group;
下面的示例演示如何使用 ALL 关键字向 cust_profile
组授予对 sales_admin
表的三列的 SELECT 和 UPDATE 权限。
grant ALL(cust_name, cust_phone,cust_contact_preference) on cust_profile to group sales_admin;
以下示例向用户 cust_name
授予对 cust_profile_vw
视图的 user2
列的 SELECT 权限。
grant select(cust_name) on cust_profile_vw to user2;
授予数据共享访问权限的示例
以下示例显示了 GRANT 数据共享对特定数据库或基于数据共享创建的 schema 的使用权限。
在以下示例中,生产者端管理员向指定命名空间授予对 salesshare
数据共享的 USAGE 权限。
GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
在以下示例中,使用者端管理员向 Bob
授予对 sales_db
的 USAGE 权限。
GRANT USAGE ON DATABASE sales_db TO Bob;
在以下示例中,使用者端管理员向 Analyst_role
角色授予对 sales_schema
架构的 GRANT USAGE 权限。sales_schema
是一个指向 sales_db 的外部架构。
GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
此时,Bob
和 Analyst_role
可以访问 sales_schema
和 sales_db
中的所有数据库对象。
以下示例显示了对共享数据库中的对象授予额外的对象级权限。只有在用于创建共享数据库的 CREATE DATABASE 命令使用了 WITH PERMISSIONS 子句时,才需要这些额外的权限。如果 CREATE DATABASE 命令未使用 WITH PERMISSIONS,则在共享数据库上授予 USAGE 权限将授予对该数据库中所有对象的完全访问权限。
GRANT SELECT ON sales_db.sales_schema.tickit_sales_redshift to Bob;
授予限定范围权限的示例
以下示例将 Sales_db
数据库中所有当前和将来架构的使用权限授予给 Sales
角色。
GRANT USAGE FOR SCHEMAS IN DATABASE Sales_db TO ROLE Sales;
以下示例向用户 alice
授予对 Sales_db
数据库中所有当前和未来表的 SELECT 权限,同时还向 alice
授予权限以向其他用户授予对 Sales_db
中表的限定范围权限。
GRANT SELECT FOR TABLES IN DATABASE Sales_db TO alice WITH GRANT OPTION;
以下示例向用户 bob
授予对 Sales_schema
架构中函数的 EXECUTE 权限。
GRANT EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema TO bob;
以下示例向 Sales
角色授予对 ShareDb
数据库 ShareSchema
架构中所有表的所有权限。指定架构时,您可以使用由两部分组成的格式 database.schema
指定架构的数据库。
GRANT ALL FOR TABLES IN SCHEMA ShareDb.ShareSchema TO ROLE Sales;
下面的示例与前一个示例相同。您可以使用 DATABASE
关键字而不是使用由两部分组成的格式来指定数据库。
GRANT ALL FOR TABLES IN SCHEMA ShareSchema DATABASE ShareDb TO ROLE Sales;
授予 ASSUMEROLE 权限的示例
下面是授予 ASSUMEROLE 权限的示例。
以下示例显示了 REVOKE 语句,超级用户可以在集群上运行一次该语句,以便为用户和组启用 ASSUMEROLE 权限。然后,超级用户向用户和组授予相应命令的 ASSUMEROLE 权限。有关为用户和组启用 ASSUMEROLE 权限的信息,请参阅有关授予 ASSUMEROLE 权限的使用说明。
revoke assumerole on all from public for all;
以下示例向用户 reg_user1
授予 IAM 角色 Redshift-S3-Read
的 ASSUMEROLE 权限来执行 COPY 操作。
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-S3-Read' to reg_user1 for copy;
以下示例向用户 reg_user1
授予 IAM 角色链 RoleA
、RoleB
的 ASSUMEROLE 权限来执行 UNLOAD 操作。
grant assumerole on 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB' to reg_user1 for unload;
以下是使用 IAM 角色链 RoleA
、RoleB
执行 UNLOAD 命令的示例。
unload ('select * from venue limit 10') to 's3://companyb/redshift/venue_pipe_' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';
以下示例向用户 reg_user1
授予 IAM 角色 Redshift-Exfunc
的 ASSUMEROLE 权限来创建外部函数。
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-Exfunc' to reg_user1 for external function;
以下示例向用户 reg_user1
授予 IAM 角色 Redshift-model
的 ASSUMEROLE 权限来创建机器学习模型。
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-ML' to reg_user1 for create model;
授予 ROLE 权限的示例
下面的示例将向 user1 授予 sample_role1。
CREATE ROLE sample_role1; GRANT ROLE sample_role1 TO user1;
以下示例使用 WITH ADMIN OPTION 将 sample_role1 授予 user1,为用户 1 设置当前会话,而 user1 将 sample_role1 授予 user2。
GRANT ROLE sample_role1 TO user1 WITH ADMIN OPTION; SET SESSION AUTHORIZATION user1; GRANT ROLE sample_role1 TO user2;
下面的示例将向 sample_role2 授予 sample_role1。
GRANT ROLE sample_role1 TO ROLE sample_role2;
下面的示例将向 sample_role3 和 sample_role4 授予 sample_role2。然后尝试将 sample_role3 授予 sample_role1。
GRANT ROLE sample_role2 TO ROLE sample_role3; GRANT ROLE sample_role3 TO ROLE sample_role2; ERROR: cannot grant this role, a circular dependency was detected between these roles
下面的示例将向 sample_role1 授予 CREATE USER 系统权限。
GRANT CREATE USER TO ROLE sample_role1;
下面的示例将向 user1 授予系统定义角色 sys:dba
。
GRANT ROLE sys:dba TO user1;
下面的示例尝试将循环依赖关系中的 sample_role3 授予 sample_role2。
CREATE ROLE sample_role3; GRANT ROLE sample_role2 TO ROLE sample_role3; GRANT ROLE sample_role3 TO ROLE sample_role2; -- fail ERROR: cannot grant this role, a circular dependency was detected between these roles