

# Gerenciar permissões e controle de acesso no Babelfish para Aurora PostgreSQL
<a name="babelfish-permissions"></a>

 No Babelfish para Aurora PostgreSQL, é possível gerenciar permissões e controle de acesso para bancos de dados, esquemas e objetos. As tabelas a seguir descrevem os comandos SQL específicos para conceder permissões no Babelfish para atingir vários cenários de controle de acesso. Serão abordados casos de uso compatíveis que podem ser implementados, bem como soluções alternativas para casos incompatíveis no momento. Isso permitirá que você configure as permissões apropriadas para atender aos seus requisitos de segurança e conformidade ao trabalhar com bancos de dados do Babelfish.

## Casos de uso compatíveis
<a name="babelfish-permissions-supported"></a>

 A tabela a seguir explica os casos de uso que são compatíveis com o Babelfish. Para cada caso de uso, a tabela mostra a ação necessária para atingi-lo e exemplos de comandos SQL. 


|  Caso de uso  |  Ação  |  Comandos SQL  |  Comentários  |  Compatibilidade com a versão do Babelfish  | 
| --- | --- | --- | --- | --- | 
|   Permitir que o login faça SELECTs/DMLs/DDLs em qualquer banco de dados   |   Adicionar o login ao perfil do servidor sysadmin   |   ALTER SERVER ROLE sysadmin ADD MEMBER `login`   |   Nenhum   |   Todas as versões   | 
|   Permitir que o login faça SELECTs/DMLs/DDLs em um banco de dados   |   Tornar o login o proprietário do banco de dados   |   ALTER AUTHORIZATION ON DATABASE::`database` TO `login`   |   Um banco de dados pode ter apenas um proprietário.   |   Versão 3.4 e posterior   | 
|   Permitir que o usuário do banco de dados faça SELECTs/DMLs em um esquema   |   Conceder permissão ao usuário do banco de dados no esquema   |   GRANT SELECT/EXECUTE/INSERT/UPDATE/DELETE ON SCHEMA::`schema` TO `user`   |   Nenhum   |   Versão 3.6 e posterior, 4.2 e posterior   | 
|   Permitir que o usuário do banco de dados faça SELECTs/DMLs em um esquema   |   Tornar o usuário do banco de dados o proprietário do esquema no momento da criação do esquema   |   CREATE SCHEMA `schema` AUTHORIZATION `user`   |   No momento, não é possível alterar a propriedade do esquema após a criação.   |   Versão 1.2 e posterior   | 
|   Permitir que o usuário do banco de dados faça SELECTs/DMLs em um objeto   |   Conceder permissão ao usuário do banco de dados no objeto   |   GRANT SELECT/EXECUTE/INSERT/UPDATE/DELETE ON OBJECT::`object` TO `user`   |   Nenhum   |   Todas as versões   | 
|   Permitir que o usuário do banco de dados faça SELECTs/DMLs/DDLs em um banco de dados, incluindo o descarte do banco de dados   |   Adicionar usuário ao perfil fixo de banco de dados db\$1owner   |   ALTER ROLE db\$1owner ADD MEMBER `user`   |   Somente usuários podem ser adicionados ao perfil fixo de banco de dados db\$1owner. Ainda não é possível adicionar perfis ao perfil db\$1owner.   |   Versão 4.5 e posterior, 5.1 e posterior   | 
|   Permitir que o usuário ou membros de um perfil personalizado de banco de dados façam somente SELEÇÕES em um banco de dados   |   Adicionar usuário ou perfil ao perfil fixo de banco de dados db\$1datareader   |   ALTER ROLE db\$1datareader ADD MEMBER `user` / `role`   |   Nenhum   |   Versão 4.5 e posterior, 5.1 e posterior   | 
|   Permitir que o usuário ou membros de um perfil personalizado de banco de dados façam somente DLMs em um banco de dados   |   Adicionar usuário ou perfil ao perfil fixo de banco de dados db\$1datawriter   |   ALTER ROLE db\$1datawriter ADD MEMBER `user` / `role`   |   Nenhum   |   Versão 4.5 e posterior, 5.1 e posterior   | 
|   Permitir que o usuário ou membros de um perfil personalizado de banco de dados façam somente DDLs em um banco de dados   |   Adicionar usuário ou perfil ao perfil fixo de banco de dados db\$1accessadmin   |   ALTER ROLE db\$1accessadmin ADD MEMBER `user` / `role`   |   Nenhum   |   Versão 4.5 e posterior, 5.1 e posterior   | 
|   Permitir que o usuário ou membros de um perfil de banco de dados personalizado apenas CRIEM/ALTEREM/EXCLUAM perfis personalizados, CONCEDAM/REVOGUEM permissões em objetos em um banco de dados e/ou CRIEM ESQUEMA em um banco de dados   |   Adicionar usuário ou perfil ao perfil fixo de banco de dados db\$1securityadmin   |   ALTER ROLE db\$1securityadmin ADD MEMBER `user` / `role`   |   Nenhum   |   Versão 4.5 e posterior, 5.1 e posterior   | 
|   Permita que o usuário ou membros de um perfil de banco de dados personalizado apenas CRIEM/ALTEREM/EXCLUAM qualquer usuário, concedam e revoguem o acesso ao banco de dados e associem contas de usuário a logins e/ou CRIEM ESQUEMA em um banco de dados   |   Adicionar usuário ou perfil ao perfil fixo de banco de dados db\$1accessadmin   |   ALTER ROLE db\$1accessadmin ADD MEMBER `user` / `role`   |   Nenhum   |   Versão 4.5 e posterior, 5.1 e posterior   | 
|   Permitir login somente para CRIAR/DESCARTAR/ALTERAR qualquer banco de dados   |   Adicionar login ao perfil fixo de servidor dbcreator   |   ALTER SERVER ROLE dbcreator ADD MEMBER `login`   |   Somente os bancos de dados aos quais o login dbcreator tem acesso podem ser alterados.   |   Versão 4.5 e posterior, 5.1 e posterior   | 
|   Permitir login somente para CRIAR/DESCARTAR/ALTERAR qualquer login   |   Adicionar login ao perfil fixo de servidor securityadmin   |   ALTER SERVER ROLE securityadmin ADD MEMBER `login`   |   Nenhum   |   Versão 4.5 e posterior, 5.1 e posterior   | 

## Casos de uso incompatíveis e soluções alternativas
<a name="babelfish-permissions-unsupported"></a>

 A tabela a seguir explica os casos de uso que são incompatíveis com o Babelfish, mas que podem ser conseguidos usando uma solução alternativa. 


|  Caso de uso  |  Ação  |  Comandos SQL  |  Comentários  |  Compatibilidade com a versão do Babelfish para soluções alternativas  | 
| --- | --- | --- | --- | --- | 
|   Permitir que o usuário faça SELEÇÕES/DMLs em um objeto/esquema com a opção de CONCEDER essas permissões a outros usuários   |   CONCEDER permissões diretamente a todos os outros usuários   |   GRANT SELECT/EXECUTE/INSERT/UPDATE/DELETE ON OBJECT/SCHEMA::`object`/`schema` TO `user`   |   GRANT ... WITH GRANT OPTION não é permitido no momento.   |   Versão 3.6 e posterior, 4.2 e posterior   | 
|   Permitir que o usuário do banco de dados faça SELECTs/DMLs/DDLs em um banco de dados, incluindo o descarte do banco de dados   |   Adicionar membros do perfil ao perfil fixo de banco de dados db\$1owner   |   ALTER ROLE db\$1owner ADD MEMBER `user`   |   A adição de perfis ao perfil db\$1owner não é permitida no momento.   |   Versão 4.5 e posterior, 5.1 e posterior   | 

## Casos de uso sem suporte
<a name="babelfish-permissions-unsupported"></a>

 A tabela a seguir explica os casos de uso compatíveis com o Babelfish. 


|  Caso de uso  |  Comentários  | 
| --- | --- | 
|  Negar que usuários ou membros de um perfil personalizado de banco de dados façam SELEÇÕES em um banco de dados   |   O perfil fixo de banco de dados db\$1denydatareader ainda não é permitido.   | 
|  Negar que usuários ou membros de um perfil personalizado de banco de dados façam DMLs em um banco de dados   |   O perfil fixo de banco de dados db\$1denydatawriter não é permitido no momento.   | 
|  Permitir login somente para ENCERRAMENTO de qualquer conexão de banco de dados   |   O perfil fixo de servidor processadmin não é permitido no momento.   | 
|  Permitir login somente para adicionar ou remover servidores vinculados   |   O perfil fixo de servidor setupadmin não é permitido no momento.   | 

# Como lidar com as diferenças de propriedade de objeto após a atualização
<a name="babelfish-ownership-differences"></a>

As versões 4.6 e posteriores e 5.2 e posteriores do Babelfish incluem uma alteração no tratamento de propriedade de objeto por meio do endpoint TDS. Agora, ao criar objetos por meio do endpoint TDS, eles pertencem ao proprietário do esquema em vez do usuário atual. Essa alteração de propriedade pode afetar o comportamento das permissões de novos objetos em comparação aos objetos existentes ao atualizar de versões anteriores à 4.6 ou 5.2.

Para resolver essas diferenças de propriedade, o Babelfish oferece a função `sys.generate_alter_ownership_statements()`. Essa função gera instruções SQL que alinham a propriedade do objeto à propriedade do esquema.

Lembre-se das seguintes limitações ao lidar com a propriedade de objeto:
+ Os usuários com permissões CREATE concedidas por meio do endpoint do PostgreSQL não podem criar objetos por meio do endpoint TDS nesses esquemas.
+ A modificação de permissões em objetos T-SQL por meio do endpoint do PostgreSQL não é recomendada e pode fazer com que o T-SQL tenha um comportamento incorreto.
+ As permissões de acesso podem diferir entre objetos antigos e novos devido à incompatibilidade entre propriedades. Por exemplo, considere um esquema pertencente a `sch_own` que inclua objetos pertencentes a `dbo`. Nesse caso, objetos de propriedade de `dbo` que foram criados antes da atualização podem ter permissões de acesso diferentes em comparação aos objetos de propriedade de `sch_own` que foram criados após a atualização. Isso pode afetar operações como SELECT e INSERT.

Se o cluster de banco de dados incluir objetos criados nas versões do Babelfish anteriores à 4.6 ou 5.2, considere a possibilidade de alinhar a propriedade desses objetos.

**Como resolver diferenças de propriedade de objeto**

1. Conecte-se ao banco de dados `babelfish_db` em seu cluster de banco de dados usando o endpoint do PostgreSQL.

1. Execute o seguinte comando:

   ```
   SELECT * from sys.generate_alter_ownership_statements();
   ```

   Isso gera uma lista de instruções SQL destinadas a padronizar a propriedade entre os objetos.

1. Primeiro, execute as instruções geradas em um ambiente de teste para validar o respectivo efeito antes de aplicá-las no ambiente de produção.

Recomendamos que você execute essas instruções para obter um modelo consistente de propriedade de objeto em seu banco de dados.