Por que o usuário principal da minha instância do RDS para SQL Server perdeu o acesso e como posso recuperá-lo?

6 minuto de leitura
0

O usuário principal da minha instância do Amazon Relational Database Service (Amazon RDS) para SQL Server perdeu o acesso. Ou preciso conceder ao usuário principal acesso a um banco de dados criado por outro usuário. O que eu faço para restaurar o acesso ou conceder acesso ao meu usuário principal?

Breve descrição

Ao criar uma nova instância de banco de dados, o usuário principal padrão recebe automaticamente certos privilégios para essa instância de banco de dados. Você não pode alterar o nome de usuário principal após a criação da instância de banco de dados.

Observação: é uma prática recomendada não usar o usuário principal diretamente em seus aplicativos. Em vez disso, use um usuário de banco de dados criado com os privilégios mínimos necessários para seu aplicativo.

Se você excluir acidentalmente as permissões do usuário principal, poderá restaurá-las modificando a instância de banco de dados e definindo uma nova senha de usuário principal. Para obter mais informações, consulte Privilégios da conta de usuário principal.

Resolução

A seguir estão cenários comuns que podem fazer com que o usuário principal perca o acesso ao se conectar à instância de banco de dados. Ou talvez o usuário principal não consiga se conectar e acessar um banco de dados de usuário específico.

Cenário 1: O usuário principal não consegue se conectar à instância de banco de dados devido a uma DENY explícita

O usuário principal pode não conseguir se conectar à instância de banco de dados porque uma DENY explícita está definida no privilégio Connect SQL. Por padrão, o usuário principal recebe o Connect SQL pelo login do Amazon RDS System Administrator (rdsa). No entanto, no Microsoft SQL Server, uma DENY explícita tem precedência sobre uma GRANT explícita.

Para corrigir isso, faça o seguinte:

1.    Conecte-se ao RDS para SQL Server usando o login do concedente que colocou a DENY explícita no Connect SQL para o login do usuário principal.

2.    Use o seguinte comando T-SQL para revogar a DENY explícita. No exemplo a seguir, o login do usuário principal do RDS é master_user e a entidade principal concedente é grantor_principal. Altere esses valores para que correspondam ao seu caso de uso.

USE [master];
GO
REVOKE CONNECT SQL TO [master_user] AS [grantor_principal];
GO

Cenário 2: O usuário principal não consegue se conectar a um banco de dados específico porque ele não está mapeado para um usuário no banco de dados

Isso pode ocorrer nas seguintes circunstâncias:

  • O banco de dados foi criado por outra conta de login. Além disso, o login do usuário principal não é mapeado para um usuário do banco de dados e recebe privilégios ao banco de dados.
  • O usuário do banco de dados mapeado anteriormente para o login do usuário principal com as permissões apropriadas foi excluído explicitamente.

Para resolver esse problema, redefina a senha do usuário mestre. A redefinição da senha cria um usuário do banco de dados mapeado para o login do usuário principal, caso esse usuário tenha sido excluído. Ele também concede ao usuário a função fixa de banco de dados db_owner. Para obter instruções sobre como redefinir a senha do usuário principal, consulte Como faço para redefinir a senha do usuário principal para minha instância de banco de dados Amazon RDS?

Observação: o usuário do AWS Identify and Access Management (IAM) que está redefinindo a senha deve ter permissão para realizar a ação ModifyDBInstance no recurso RDS.

A atualização da senha do usuário principal faz o seguinte:

  • Concede ao usuário principal a função de banco de dados db_owner a um banco de dados criado por outro usuário.
  • Restaura os privilégios do sistema para o usuário principal.
  • Restaura funções em nível de servidor para o usuário principal.
  • Restaura as permissões em nível de servidor para o usuário principal.
  • Restaura o acesso aos procedimentos armazenados do sistema para o usuário principal.
  • Restaura o acesso aos procedimentos armazenados específicos do RDS para o usuário principal.

Cenário 3: O usuário principal não pode realizar determinadas ações

O usuário principal tem a permissão da função db_owner no banco de dados, mas executa determinadas ações, como CONNECT, SELECT, INSERT, UPDATE, ALTER e assim por diante. Isso pode ocorrer quando o usuário do banco de dados mapeado para o login do usuário principal tiver explicitamente negado determinadas permissões no banco de dados.

Para ver a lista de funções do banco de dados e quais usuários do banco de dados são membros dessas funções, execute o seguinte comando T-SQL. A seguir, substitua database_namepelos valores corretos para seu caso de uso.

USE [database_name];
  GO
  SELECT DP1.name AS DatabaseRoleName,
   isnull (DP2.name, 'No members') AS DatabaseUserName
 FROM sys.database_role_members AS DRM
 RIGHT OUTER JOIN sys.database_principals AS DP1
   ON DRM.role_principal_id = DP1.principal_id
 LEFT OUTER JOIN sys.database_principals AS DP2
   ON DRM.member_principal_id = DP2.principal_id
WHERE DP1.type = 'R'
ORDER BY DP1.name;

Execute os comandos a seguir para ver a lista de permissões que um usuário tem em um banco de dados específico. No exemplo a seguir, substitua database_name pelo valor correto para seu caso de uso.

USE [database_name];
GO
EXECUTE AS USER = 'master_user';
SELECT * FROM sys.fn_my_permissions(NULL, 'DATABASE');
GO

Neste exemplo, o usuário principal é adicionado às funções fixas do banco de dados db_denydatawriter e db_denydatareader. Apesar de ser membro da função fixa de banco de dados db_owner, os privilégios de negação de db_denydatawriter e db_denydatareader proíbem as permissões SELECT, INSERT, UPDATE e DELETE no banco de dados.

Para resolver esse problema:

1.    Faça login na instância do RDS para SQL Server usando o usuário principal.

2.    Use o seguinte comando T-SQL para descartar o usuário principal como membro dessas duas funções:

USE [database_name];
GO
ALTER ROLE [db_denydatawriter] DROP MEMBER [master_user];
ALTER ROLE [db_denydatareader] DROP MEMBER [master_user];
GO

Depois que os comandos forem concluídos, o usuário principal terá as permissões SELECT, INSERT, UPDATE e DELETE no banco de dados restauradas.

Para obter mais informações sobre as funções específicas do usuário principal, consulte Privilégios da conta do usuário principal.


Informações relacionadas

Redefinir a senha da função db_owner

Segurança do Microsoft SQL Server

DENY (Transact-SQL)