예시
다음 예에서는 사용자 fred
에게 SALES 테이블에 대한 SELECT 권한을 허용합니다.
grant select on table sales to fred;
다음 예에서는 사용자 fred
에게 QA_TICKIT 스키마에 있는 모든 테이블에 대한 SELECT 권한을 허용합니다.
grant select on all tables in schema qa_tickit to fred;
다음 예에서는 사용자 그룹 QA_USERS에게 스키마 QA_TICKIT에 대한 모든 스키마 권한을 허용합니다. 스키마 권한은 CREATE 및 USAGE입니다. USAGE는 스키마에 있는 객체에 대한 액세스 권한을 사용자에게 허용하지만, 해당 객체에 대한 INSERT 또는 SELECT 같은 권한은 허용하지 않습니다. 각 객체에 대한 권한을 개별적으로 부여합니다.
create group qa_users; grant all on schema qa_tickit to group qa_users;
다음 예에서는 그룹 QA_USERS의 모든 사용자에게 QA_TICKIT 스키마에 있는 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 스키마에 있는 SALES 테이블에 대한 DROP 권한을 허용합니다.
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라는 사용자에게는 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
다음 예에서는 user1
사용자에게 cust_profile
테이블의 cust_name
및 cust_phone
열에 대한 SELECT 권한을 부여합니다.
grant select(cust_name, cust_phone) on cust_profile to user1;
다음 예에서는 sales_group
그룹에 cust_profile
테이블의 cust_name
및 cust_phone
열에 대한 SELECT 권한과 cust_contact_preference
열에 대한 UPDATE 권한을 부여합니다.
grant select(cust_name, cust_phone), update(cust_contact_preference) on cust_profile to group sales_group;
다음 예에서는 ALL 키워드를 사용하여 cust_profile
테이블의 세 열에 대한 SELECT 및 UPDATE 권한을 모두 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;
데이터 공유에 대한 액세스 권한 부여의 예
다음 예에서는 datashare에서 생성된 특정 데이터베이스 또는 스키마에 대한 GRANT datashare 사용 권한을 보여줍니다.
다음 예시에서는 생산자 측 관리자가 salesshare
데이터 공유에 대한 USAGE 권한을 지정된 네임스페이스에 부여합니다.
GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
다음 예시에서는 소비자 측 관리자가 sales_db
에 대한 USAGE 권한을 Bob
에게 부여합니다.
GRANT USAGE ON DATABASE sales_db TO Bob;
다음 예시에서는 소비자 측 관리자가 sales_schema
스키마에 대한 GRANT USAGE 권한을 Analyst_role
역할에 부여합니다. 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;
다음 예시에서는 Sales_db
데이터베이스의 모든 현재 및 미래 테이블에 대한 SELECT 권한을 alice
라는 사용자에게 부여하고, Sales_db
에 있는 테이블에 대한 범위가 지정된 권한을 다른 사용자에게 부여할 수 있는 권한도 alice
에게 부여합니다.
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 권한을 부여하는 예입니다.
다음 예에서는 슈퍼 사용자가 사용자 및 그룹에 대해 ASSUMEROLE 권한을 사용할 수 있도록 클러스터에서 한 번 실행하는 REVOKE 문을 보여줍니다. 그런 다음 슈퍼 사용자는 적절한 명령에 대해 사용자 및 그룹에 ASSUMEROLE 권한을 부여합니다. 사용자 및 그룹에 대한 ASSUMEROLE 권한 사용 설정에 대한 내용은 ASSUMEROLE 권한 부여에 대한 사용 노트 섹션을 참조하세요.
revoke assumerole on all from public for all;
다음 예에서는 COPY 작업을 수행할 IAM 역할 Redshift-S3-Read
에 대한 ASSUMEROLE 권한을 사용자 reg_user1
에게 부여합니다.
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-S3-Read' to reg_user1 for copy;
다음 예에서는 UNLOAD 작업을 수행하기 위해 IAM 역할 체인 RoleA
, RoleB
에 대한 ASSUMEROLE 권한을 사용자 reg_user1
에게 부여합니다.
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';
다음 예에서는 외부 기능을 생성할 IAM 역할 Redshift-Exfunc
에 대한 ASSUMEROLE 권한을 사용자 reg_user1
에게 부여합니다.
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-Exfunc' to reg_user1 for external function;
다음 예에서는 기계 학습 모델을 생성할 IAM 역할 Redshift-model
에 대한 ASSUMEROLE 권한을 사용자 reg_user1
에게 부여합니다.
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;
다음 예에서는 WITH ADMIN OPTION을 사용하여 sample_role1을 user1에 부여하고, 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
다음 예에서는 CREATE USER 시스템 권한을 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