Exemplos - Amazon Redshift

Exemplos

O exemplo a seguir concede o privilégio SELECT na tabela SALES ao usuário fred.

grant select on table sales to fred;

O exemplo a seguir concede o privilégio SELECT em todas as tabelas no esquema QA_TICKIT ao usuário fred.

grant select on all tables in schema qa_tickit to fred;

O exemplo a seguir concede todos os privilégios de esquema no esquema QA_TICKIT ao grupo de usuários QA_USERS. Os privilégios de esquema são CREATE e USAGE. USAGE permite que os usuários acessem os objetos no esquema, mas não concede privilégios como INSERT ou SELECT em tais objetos. Conceder privilégios em cada objeto separadamente.

create group qa_users; grant all on schema qa_tickit to group qa_users;

O exemplo a seguir concede todos os privilégios na tabela SALES no esquema QA_TICKIT a todos os usuários do grupo QA_USERS.

grant all on table qa_tickit.sales to group qa_users;

O exemplo a seguir concede todos os privilégios na tabela SALES no esquema QA_TICKIT a todos os usuários dos grupos QA_USERS e RO_USERS.

grant all on table qa_tickit.sales to group qa_users, group ro_users;

O exemplo a seguir concede o privilégio DROP na tabela SALES no esquema QA_TICKIT a todos os usuários no grupo QA_USERS.

grant drop on table qa_tickit.sales to group qa_users;>

A sequência de comandos a seguir mostra como o acesso a um esquema não concede privilégios a uma tabela no esquema.

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)

A sequência de comandos a seguir mostra como o acesso a uma exibição não implica acesso às suas tabelas subjacentes. O usuário chamado VIEW_USER não pode selecionar da tabela DATE, embora todos os privilégios de VIEW_DATE tenham sido concedidos a ele.

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

O exemplo a seguir concede o privilégio SELECT nas colunas cust_phone e cust_name da tabela cust_profile ao usuário user1.

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

O exemplo a seguir concede o privilégio SELECT nas colunas cust_name e cust_phone, e o privilégio UPDATE na coluna cust_contact_preference da tabela cust_profile ao grupo sales_group.

grant select(cust_name, cust_phone), update(cust_contact_preference) on cust_profile to group sales_group;

O exemplo a seguir mostra o uso da palavra-chave ALL para conceder privilégios SELECT e UPDATE em três colunas da tabela cust_profile ao grupo sales_admin.

grant ALL(cust_name, cust_phone,cust_contact_preference) on cust_profile to group sales_admin;

O exemplo a seguir concede o privilégio SELECT na coluna cust_name da exibição cust_profile_vw ao usuário user2.

grant select(cust_name) on cust_profile_vw to user2;

Exemplos da concessão de acesso a unidades de compartilhamento de dados

Os exemplos a seguir mostram permissões de uso de datashare GRANT em um banco de dados específico ou esquema criado a partir de um datashare.

No exemplo a seguir, um administrador no lado do produtor concede a permissão USAGE na unidade de compartilhamento de dados salesshare ao namespace especificado.

GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

No exemplo a seguir, um administrador no lado do consumidor concede a permissão USAGE no sales_db a Bob.

GRANT USAGE ON DATABASE sales_db TO Bob;

No exemplo a seguir, um administrador no lado do consumidor concede a permissão GRANT USAGE no esquema sales_schema à função Analyst_role. sales_schema é um esquema externo que aponta para sales_db.

GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;

Neste ponto, Bob e Analyst_role podem ter acesso a todos os objetos do banco de dados em sales_schema e sales_db.

O exemplo a seguir mostra a concessão de permissão adicional no nível do objeto para objetos em um banco de dados compartilhado. Essas permissões extras só serão necessárias se o comando CREATE DATABASE usado para criar o banco de dados compartilhado usar a cláusula WITH PERMISSIONS. Se o comando CREATE DATABASE não usou WITH PERMISSIONS, a concessão de USAGE no banco de dados compartilhado concede acesso total a todos os objetos nesse banco de dados.

GRANT SELECT ON sales_db.sales_schema.tickit_sales_redshift to Bob;

Exemplos de concessão de permissões em escopo definido

O exemplo a seguir concede uso para todos os esquemas atuais e futuros no banco de dados Sales_db à função Sales.

GRANT USAGE FOR SCHEMAS IN DATABASE Sales_db TO ROLE Sales;

O exemplo a seguir concede a permissão SELECT para todas as tabelas atuais e futuras no banco de dados Sales_db ao usuário alice e também dá a alice a permissão para conceder permissões em escopo em tabelas em Sales_db a outros usuários.

GRANT SELECT FOR TABLES IN DATABASE Sales_db TO alice WITH GRANT OPTION;

O exemplo a seguir concede a permissão EXECUTE para funções no esquema Sales_schema ao usuário bob.

GRANT EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema TO bob;

O exemplo a seguir concede todas as permissões para todas as tabelas no esquema do ShareSchema do banco de dados ShareDb à função Sales. Ao especificar o esquema, você pode especificar o banco de dados do esquema usando o formato de duas partes database.schema.

GRANT ALL FOR TABLES IN SCHEMA ShareDb.ShareSchema TO ROLE Sales;

O exemplo a seguir é o mesmo do anterior. Você pode especificar o banco de dados usando a palavra-chave DATABASE, em vez de usar um formato de duas partes.

GRANT ALL FOR TABLES IN SCHEMA ShareSchema DATABASE ShareDb TO ROLE Sales;

Exemplos de concessão do privilégio ASSUMEROLE

Veja a seguir exemplos de concessão do privilégio ASSUMEROLE.

O exemplo a seguir mostra a instrução REVOKE que um superusuário executa uma vez no cluster para habilitar o uso do privilégio ASSUMEROLE para usuários e grupos. Em seguida, o superusuário concede o privilégio ASSUMEROLE aos usuários e grupos para os comandos apropriados. Para obter informações sobre como habilitar o uso do privilégio ASSUMEROLE para usuários e grupos, consulte Observações de uso para conceder a permissão ASSUMEROLE.

revoke assumerole on all from public for all;

O exemplo a seguir concede o privilégio ASSUMEROLE ao usuário reg_user1 para a função do IAM Redshift-S3-Read para executar operações COPY.

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

O exemplo a seguir concede o privilégio ASSUMEROLE ao usuário reg_user1 para a cadeia de função do IAM RoleA e RoleB para executar operações COPY.

grant assumerole on 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB' to reg_user1 for unload;

Veja a seguir um exemplo do comando UNLOAD usando a cadeia de função do IAM RoleA e 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';

O exemplo a seguir concede o privilégio ASSUMEROLE ao usuário reg_user1 para a função do IAM Redshift-Exfunc para criar funções externas.

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

O exemplo a seguir concede o privilégio ASSUMEROLE ao usuário reg_user1 para a função do IAM Redshift-model para criar modelos de Machine Learning.

grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-ML' to reg_user1 for create model;

Exemplos de concessão do privilégio ROLE

O exemplo a seguir concede a função sample_role1 ao usuário user1.

CREATE ROLE sample_role1; GRANT ROLE sample_role1 TO user1;

O exemplo a seguir concede sample_role1 ao user1 com a WITH ADMIN OPTION, define a sessão atual para user1 e user1 concede sample_role1 ao user2.

GRANT ROLE sample_role1 TO user1 WITH ADMIN OPTION; SET SESSION AUTHORIZATION user1; GRANT ROLE sample_role1 TO user2;

O exemplo a seguir concede a função sample_role1 a sample_role2.

GRANT ROLE sample_role1 TO ROLE sample_role2;

O exemplo a seguir concede a função sample_role2 a sample_role3 e sample_role4. Em seguida, ele tenta conceder sample_role3 a 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

O exemplo a seguir concede privilégios de sistema CREATE USER a sample_role1.

GRANT CREATE USER TO ROLE sample_role1;

O exemplo a seguir concede a função definida pelo sistema sys:dba a user1.

GRANT ROLE sys:dba TO user1;

O exemplo a seguir tenta conceder sample_role3 em uma dependência circular a 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