sexta-feira, março 13, 2009

Usuário não conecta mais ao banco SQL Server após restauração de back-up ou attach de catálogo

Quando precisamos mudar o catálogo de banco de dados de um servidor para outro, utilizamos um back-up ou restauramos o catálogo no novo servidor.

Ocorre às vezes que o acesso ao catálogo utilizando o sql login não funciona mesmo quando ele existe no servidor.

Este evento é conhecido como "usuários órfãos". É mais fácil de ser compreendido quando, ao clicarmos na aba "Segurança" (Security) do catálogo de dados visualizamos o login, mas o mesmo não ocorre na aba homônima do servidor.

Para verificar se este é de fato seu problema, abra o SQL QueryAnalyzer ou o SQL Server Management Studio e, em uma nova query, execute o seguinte comando para o catálogo desejado:

EXEC sp_change_users_login 'Report'

Este comando deverá listar os usuários órfãos. Se o usuário desejado estiver na lista, execute o seguinte comando para tentar corrigir o problema:

EXEC sp_change_users_login 'Auto_Fix', '
user'

*
user deverá ser substituído pelo login a ser corrigido.

Se a operação não for bem sucedida, você deverá receber a seguinte mensagem de erro:

Msg 15600, Level 15, State 1, Procedure sp_change_users_login, Line 207
An invalid parameter or option was specified for procedure 'sys.sp_change_users_login'.


Isto significa que o login não existe no catálogo de segurança do servidor. Neste caso, é necessário criá-lo antes de se executar a operação. Isto pode ser feito através da interface gráfica ou do seguinte comando:

EXEC sp_change_users_login 'Auto_Fix', 'user', 'login', 'password'

* user deverá ser substituído pelo login a ser corrigido.
* login deverá ser substituído pelo login desejado (prefira o mesmo).
* password deverá ser substituído pela senha desejada.

Se você deseja apenas apagar o usuário do catálogo, acesse a aba "Segurança" (Security) através do Enterprise Manager ou equivalente e apague o login.

No SQL Server 2005, é possível receber uma mensagem de erro ao tentar efetuar a exclusão. Verifique se o seguinte post pode ajudá-lo: http://laborejo.blogspot.com/2009/03/erro-ao-tentar-excluir-usuario-de.html

EN: If you need this article in English, leave a messege. FR: Si vous avez besoin de ce texte en Français laissez une message à moi. ES: Si usted necesita este artículo en Español, dejame un mensaje.