本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
範例
下列範例會將SALES資料表上的 SELECT 權限授予使用者 fred
。
grant select on table sales to fred;
下列範例會將 QA_TICKIT 結構描述中所有資料表SELECT的權限授予使用者 fred
。
grant select on all tables in schema qa_tickit to fred;
下列範例會將結構描述 QA_TICKIT 上的所有結構描述權限授予使用者群組 QA_USERS。結構描述權限為 CREATE和 USAGE。USAGE 會授予使用者對結構描述中物件的存取權,但不會授予許可,例如這些物件SELECT上的 INSERT或 。分別授與每個物件的權限。
create group qa_users; grant all on schema qa_tickit to group qa_users;
下列範例會將 QA_TICKIT 結構描述中SALES資料表上的所有權限授予群組 QA_ 中的所有使用者USERS。
grant all on table qa_tickit.sales to group qa_users;
下列範例會將 QA_TICKIT 結構描述中SALES資料表上的所有權限授予群組 QA_ USERS和 RO_ 中的所有使用者USERS。
grant all on table qa_tickit.sales to group qa_users, group ro_users;
下列範例會將 QA_TICKIT 結構描述中SALES資料表上的DROP權限授予群組 QA_ 中的所有使用者USERS。
grant drop on table qa_tickit.sales to group qa_users;>
以下一系列命令說明,結構描述的存取權不會授予結構描述中資料表的權限。
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 的使用者無法從DATE資料表中選取,但此使用者已在 VIEW_ 上獲得所有許可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_profile
資料表的 cust_name
和 cust_phone
資料欄SELECT的權限授予使用者 user1
。
grant select(cust_name, cust_phone) on cust_profile to user1;
下列範例會將 和 cust_name
cust_phone
資料欄上的SELECT權限,以及cust_profile
資料表資料cust_contact_preference
欄上的UPDATE權限授予 sales_group
群組。
grant select(cust_name, cust_phone), update(cust_contact_preference) on cust_profile to group sales_group;
下列範例顯示ALL關鍵字的使用,將資料表的三個資料欄上的 SELECT和 UPDATE權限授予cust_profile
sales_admin
群組。
grant ALL(cust_name, cust_phone,cust_contact_preference) on cust_profile to group sales_admin;
下列範例會將cust_profile_vw
檢視資料cust_name
欄上的SELECT權限授予user2
使用者。
grant select(cust_name) on cust_profile_vw to user2;
授予資料共用存取權的範例
下列範例顯示從GRANT資料共用建立的特定資料庫或結構描述的資料共用使用許可。
在下列範例中,生產者端管理員會將salesshare
資料共用的USAGE許可授予指定的命名空間。
GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
在下列範例中,消費者端管理員將 的USAGE許可授予 sales_db
Bob
。
GRANT USAGE ON DATABASE sales_db TO Bob;
在下列範例中,消費者端管理員將sales_schema
結構描述的GRANTUSAGE許可授予Analyst_role
角色。 sales_schema
是指向 sales_db 的外部結構描述。
GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
此時,Bob
和 Analyst_role
可以存取 sales_schema
和 sales_db
中的所有資料庫物件。
下列範例顯示授予共用資料庫中物件的其他物件層級權限。只有在用來建立共用資料庫的CREATEDATABASE命令使用 WITHPERMISSIONS子句時,才需要這些額外的許可。如果CREATEDATABASE命令未使用 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;
下列範例會將Sales_db
資料庫中所有目前和未來資料表的SELECT許可授予使用者 alice
,並授予許可alice
,將 中資料表的範圍許可授予Sales_db
其他使用者。
GRANT SELECT FOR TABLES IN DATABASE Sales_db TO alice WITH GRANT OPTION;
下列範例會將Sales_schema
結構描述中函數的EXECUTE許可授予使用者 bob
。
GRANT EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema TO bob;
下列範例會將 ShareDb
資料庫的 ShareSchema
結構描述中所有資料表的所有權限授予 Sales
角色。當指定結構描述時,您可以使用兩部分格式 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;
下列範例會將 ASSUMEROLE 權限授予使用者reg_user1
,Redshift-S3-Read
讓IAM角色執行COPY操作。
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-S3-Read' to reg_user1 for copy;
下列範例會將 ASSUMEROLE 權限授予reg_user1
IAM角色鏈 的使用者RoleA
,RoleB
以執行 UNLOAD 操作。
grant assumerole on 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB' to reg_user1 for unload;
以下是使用IAM角色鏈 RoleA
、 的UNLOAD命令範例RoleB
。
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';
下列範例會將 ASSUMEROLE 權限授予使用者reg_user1
,Redshift-Exfunc
讓IAM角色建立外部函數。
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-Exfunc' to reg_user1 for external function;
下列範例會將 ASSUMEROLE 權限授予IAM角色的使用者reg_user1
,Redshift-model
以建立機器學習模型。
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-ML' to reg_user1 for create model;
授予ROLE權限的範例
下列範例會將 sample_role1 授予 user1。
CREATE ROLE sample_role1; GRANT ROLE sample_role1 TO user1;
下列範例使用 將 sample_role1 WITH ADMIN 授予 user1OPTION,設定 user1 的目前工作階段,而 user1 會將 sample_role1 授予 user2。
GRANT ROLE sample_role1 TO user1 WITH ADMIN OPTION; SET SESSION AUTHORIZATION user1; GRANT ROLE sample_role1 TO user2;
下列範例會將 sample_role1 授予 sample_role2。
GRANT ROLE sample_role1 TO ROLE sample_role2;
下列範例會將 sample_role2 授予 sample_role3 和 sample_role4。然後嘗試將 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
下列範例會將CREATEUSER系統權限授予 sample_role1。
GRANT CREATE USER TO ROLE sample_role1;
下列範例會將系統定義角色 sys:dba
授予 user1。
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