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