

 O Amazon Redshift não permitirá mais a criação de UDFs do Python a partir do Patch 198. As UDFs do Python existentes continuarão a funcionar normalmente até 30 de junho de 2026. Para ter mais informações, consulte a [publicação de blog ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# Exemplos
<a name="r_GRANT-examples"></a>

 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\$1TICKIT 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\$1TICKIT ao grupo de usuários QA\$1USERS. 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\$1TICKIT a todos os usuários do grupo QA\$1USERS.

```
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\$1TICKIT a todos os usuários dos grupos QA\$1USERS e RO\$1USERS.

```
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\$1TICKIT a todos os usuários no grupo QA\$1USERS.

```
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\$1USER não pode selecionar da tabela DATE, embora todos os privilégios de VIEW\$1DATE 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_name` e `cust_phone` 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
<a name="r_GRANT-examples-datashare"></a>

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\$1db.

```
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
<a name="r_GRANT-examples-scoped"></a>

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
<a name="r_GRANT-examples-assumerole"></a>

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](r_GRANT-usage-notes.md#r_GRANT-usage-notes-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
<a name="r_GRANT-examples-role"></a>

O exemplo a seguir concede a função sample\$1role1 ao usuário user1.

```
CREATE ROLE sample_role1;
GRANT ROLE sample_role1 TO user1;
```

O exemplo a seguir concede sample\$1role1 ao user1 com a WITH ADMIN OPTION, define a sessão atual para user1 e user1 concede sample\$1role1 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\$1role1 a sample\$1role2.

```
GRANT ROLE sample_role1 TO ROLE sample_role2;
```

O exemplo a seguir concede a função sample\$1role2 a sample\$1role3 e sample\$1role4. Em seguida, ele tenta conceder sample\$1role3 a sample\$1role1.

```
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\$1role1.

```
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\$1role3 em uma dependência circular a sample\$1role2.

```
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
```