Usuários de banco de dados e logons de servidor e o mapeamento entre eles

9

Eu tenho uma instância do SQL Server 2008 R2 Express Edition em casa e outra em um servidor nas instalações do cliente que estou usando para desenvolver um aplicativo usando o Access como front-end. Este aplicativo possui 5 logins separados que eu posso usar na cadeia de conexão (com base no grupo de acesso em que o usuário está). A instância inicial possui vários bancos de dados - alguns dos quais nada têm a ver com esses aplicativos

Criei manualmente os logins em cada instância ao longo do tempo (e provavelmente em uma ordem diferente).

Espero poder (mais de uma vez) fazer um backup da minha máquina doméstica do banco de dados em que estou trabalhando e carregá-lo na instância nas instalações do cliente usando restore, movendo apenas os arquivos no conjunto de backup para o real arquivos usados ​​neste servidor durante o processo de restauração. A parte que eu não entendo é o mapeamento entre o usuário do banco de dados e o login.

Eu achava que a correspondência do nome deveria ser suficiente, mas, ao tentar corrigir um problema no qual os usuários do banco de dados restaurado não pareciam mapeados para o logon do servidor, deparei-me com a instrução Transact-SQL ALTER USER e, em particular, sua referência ao uso de WITH LOGIN e alguma discussão sobre um "SID".

Como (presumo) os nomes de logon do servidor têm SIDs diferentes em cada instância, isso significa que, depois de carregar um backup entre instâncias, preciso reconectar o mapeamento novamente com uma série de comandos ALTER USER WITH LOGIN?

akc42
fonte

Respostas:

9

Loginsou logons de servidor existem no nível do servidor SQL e o database useré no nível do banco de dados. Eles não precisam ter o mesmo nome, mas geralmente têm. Em uma instância, você não pode ter um usuário de banco de dados funcionando corretamente sem um login correspondente do servidor SQL.

Digamos que você tenha uma instância: instanceA com um usuário de login severA no seu computador. Você pode mapear este usuário de login do servidor A para um usuário do banco de dados: userA para um banco de dados DB_A . Ambos são nomeados userA , mas um é o servidor logine um é o database user. O usuário do banco de dados: userA reside em DB_A . Quando você faz backup e restaura o DB_A da instânciaA para outra instânciaB , o usuário do banco de dados: userA é movido, mas o logon do servidor: userA ainda permanece na instânciaA. Para mover os logins da instânciaA para a instânciaB, você pode usarsp_help_revlogin (Clique para verificar a página da KB) .

Se você criou anteriormente o usuário de logon do SQL Server userA na instanceB , o SQL tentará mapear esse logon com o usuário do banco de dados: userA, quando DB_A for restaurado da instanceA para instanceB. Se isso falhar, você pode usar o procedimento sp_change_users_login (clique no link BOL) para corrigir os mapeamentos quebrados. Espero que isso esclareça as coisas.

StanleyJohns
fonte
Obrigado - acredito que eu tinha os conceitos corretos, mas os sp_help_revlogin e sp_change_users_login e os novos e eu vou me ajudar. Eu vou explorar mais. Graças
akc42