範例 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

範例

下列範例會將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_namecust_phone資料欄SELECT的權限授予使用者 user1

grant select(cust_name, cust_phone) on cust_profile to user1;

下列範例會將 和 cust_namecust_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_profilesales_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;

此時,BobAnalyst_role 可以存取 sales_schemasales_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_user1Redshift-S3-Read讓IAM角色執行COPY操作。

grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-S3-Read' to reg_user1 for copy;

下列範例會將 ASSUMEROLE 權限授予reg_user1IAM角色鏈 的使用者RoleARoleB以執行 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_user1Redshift-Exfunc讓IAM角色建立外部函數。

grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-Exfunc' to reg_user1 for external function;

下列範例會將 ASSUMEROLE 權限授予IAM角色的使用者reg_user1Redshift-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