Como resolver problemas de permissões quando move uma base de dados entre servidores que executem o SQL Server

Traduções de Artigos Traduções de Artigos
Artigo: 240872 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo descreve como mapear inícios de sessão padrão e integrados para resolver problemas de permissões quando move uma base de dados entre servidores que executem o SQL Server.

Mais Informação

Quando move uma base de dados de um servidor com o SQL Server para outro servidor que esteja a executar o SQL Server, poderá ocorrer um erro de correspondência entre os números de identificação de segurança (SID, Security Identifier) de inícios de sessão na base de dados principal e os utilizadores da base de dados de utilizador . Por predefinição, SQL Server 7.0, SQL Server 2000 e SQL Server 2005 fornecem o procedimento armazenado do sistema de sp_change_users_login para mapear estes utilizadores sem correspondência. No entanto, só pode utilizar o procedimento armazenado sp_change_users_login para mapear inícios de sessão padrão do SQL Server e tem de efectuar estes mapeamento para um utilizador de cada vez. Para mais informações sobre o procedimento sp_change_users_login armazenadas, consulte o tópico "sp_change_users_login" no SQL Server 7.0, SQL Server 2000 e SQL Server 2005 Books Online.

No SQL Server 7.0 ou versões posteriores, pode manter o mapeamento entre os inícios de sessão na base de dados principal e os utilizadores da base de dados de utilizador , utilizando os SID. Este mapeamento é necessário para manter as permissões correctas para os inícios de sessão nas bases de dados de utilizador . Quando este mapeamento é perdido, os inícios de sessão tem problemas de permissões que incluem mas não estão limitados à seguinte:
  • Se o início de sessão do SQL Server não existe no novo servidor e o utilizador tenta iniciar sessão, o utilizador é apresentada a seguinte mensagem de erro:
    Servidor: Erro 18456, 16, nível State 1
    Falhou o início de sessão para o utilizador '% ls'.
  • Se o início de sessão do SQL Server existe no novo servidor, mas o SID na base de dados principal difere do SID na base de dados de utilizador , o utilizador pode iniciar sessão para o SQL Server com êxito; no entanto, quando o utilizador tenta aceder a essa base de dados, o utilizador é apresentada a seguinte mensagem de erro:
    Servidor: Erro 916, nível 14, State 1, linha1
    Utilizador de servidor ' %. * ls 'não é um utilizador válido na base de dados' %. * 'ls.
    Nota No SQL Server 2005, o utilizador poderá receber a seguinte mensagem de erro:

    Utilizador de servidor '% s' não é um utilizador válido na base de dados '% s'. Adicione a conta de utilizador na base de dados pela primeira vez.
Para obter mais informações sobre o modelo de segurança do SQL Server 7.0, consulte a documentação técnica "Microsoft SQL Server 7.0 segurança". Para ver a documentação técnica, visite o seguinte Web site da Microsoft:
http://msdn2.microsoft.com/en-us/library/Aa226173(SQL.70).aspx
Para obter mais informações sobre o modelo de segurança do SQL Server 2000, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
322712Funcionalidades do Microsoft SQL Server 2000 Security S322712 e procedimentos recomendados

Restrições

  • Se existirem utilizadores na tabela sysusers sem um prefixo de nome do computador ou o nome de domínio que possui objectos e estes objectos referenciados em aplicações utilizando o nome de duas partes username. objectname, a aplicação poderá quebrar uma vez que o procedimento armazenado sp_sidmap muda estes utilizadores com o prefixo do nome do computador ou nome de domínio tal como aparece na tabela sysxlogins . Para contornar este problema, após sp_sidmap procedimento estiver concluído, mudar o nome dos utilizadores que foram afectados na tabela sysusers os respectivos nomes anteriores ou contacte o fornecedor de suporte principal.
  • Este artigo não considera os aliases. Tem de gerir os aliases manualmente.
  • Se não existir um início de sessão padrão do SQL Server no novo servidor do SQL Server, pode adicionar o início de sessão com uma palavra-passe NULL. Poderá ter de alterar a palavra-passe para estes inícios de sessão em conformidade.
  • Se um utilizador tiver sido criado na base de dados utilizador com um nome diferente daquela que aparece na tabela sysxlogins , é impossível saber o início de sessão correspondente para esse utilizador. Por conseguinte, antes de executar o sp_sidmap procedimento armazenado:
    1. Transferir todos os objectos que este utilizador possui para uma base de dados de transição.
    2. Largar o utilizador, adicionar o utilizador tem o nome correcto e, em seguida, transferir novamente todos os objectos para este utilizador.
  • Se um utilizador não tem um início de sessão correspondente nem um prefixo do nome do computador local ou o nome de domínio, receberá uma mensagem para este utilizador. Esta mensagem indica que tem de adicionar primeiro o utilizador ao nível do Windows e, em seguida, adicioná-lo ao SQL Server como um início de sessão. Depois de o fazer, tem de executar o procedimento armazenado sp_sidmap novamente.
  • Se um utilizador tem um prefixo de nome de domínio ou o nome de servidor do Windows local, mas não existe o início de sessão correspondente na tabela sysxlogins , o procedimento armazenado tenta adicionar como um novo início de sessão para o SQL Server. Se o utilizador do Windows não existir, gera uma mensagem de saída na janela de resultados e, em seguida, cria manualmente o início de sessão após o primeiro adiciona o utilizador do Windows.
  • Se existir mais do que um início de sessão para um utilizador na tabela sysusers , verá uma mensagem de saída no ficheiro de resultados e lista todos os inícios de sessão com o mesmo nome de utilizador. Neste ponto, manualmente tem intervir para garantir que o utilizador corresponde ao início de único sessão.

    exemplo Se a tabela sysusers tem um utilizador chamado "joaonicolau" e a tabela sysxlogins tem inícios de sessão com nomes como "Test\johndoe" e "Test2\johndoe", quando executar o procedimento armazenado, recebe uma mensagem a indicar que um dos utilizadores que tem mais do que um início de sessão e que o administrador do sistema tem de seleccionar um. Este é o tempo apenas que tem de executar o segundo procedimento armazenado, sp_prefix_sysusersname , que é fornecido neste artigo. Além disso, esta situação é descrita em detalhe no ficheiro Leiame.txt.

Mapear inícios de sessão padrão e integrados

Depois de mover uma base de dados de um servidor com o SQL server para outro servidor com o SQL server, siga estes passos para intervenção do utilizador mínimo:

SQL Server 7.0 e SQL Server 2000

  1. Certifique-se que existe um início de sessão na tabela sysxlogins na base de dados principal para cada utilizador na tabela sysusers da base de dados.

    Nota Para adicionar um início de sessão padrão do SQL Server, consulte o tópico "sp_addlogin" no SQL Server Books Online. Para adicionar um início de sessão integrado do SQL Server, consulte o tópico "sp_grantlogin" no SQL Server Books Online.
  2. Transferir o ficheiro MapSids.exe e, em seguida, extrair os ficheiros Sp_sidmap.sql e Readme.txt.
  3. Iniciar sessão servidor com o SQL Server como um administrador de sistema e, em seguida, execute o ficheiro Sp_sidmap.sql na base de dados de utilizador. Executar o ficheiro Sp_sidmap.sql cria os dois procedimentos armazenados, sp_sidmap e sp_prefix_sysusersname .
  4. Certifique-se de que a base de dados não é acedida por qualquer utilizador que a que está a executar os procedimentos armazenados.
  5. Certifique-se de que o analisador de consultas apresenta resultados no formato de texto e não no formato de grelha. Para o fazer, ou prima a CTRL ^ T chaves, ou clique em consultas e clique em resultados de texto . Isto é muito importante para que possa ver os resultados e mensagens informativas uma janela e guardar o resultado num ficheiro de texto. Poderá ter este ficheiro mais tarde para resolver alguns dos mapeamentos.
  6. Uma vez que não consegue verificar se os parâmetros são transmitidos correctamente, certifique-se para as passar correctamente para o procedimento armazenado sp_sidmap :
    EXEC sp_SidMap @old_domain = old_domain_name,
    @new_domain = new_domain_name,
    @old_server = old_server_name,
    @new_server = new_server_name
    substituir os valores de nomes de domínio antigo e novo e nomes de servidor correctamente.
  7. Guardar os resultados num ficheiro e siga as instruções fornecidas no ficheiro Leiame.txt.

    Nota Quando executa estes procedimentos armazenados, a tabela sysusers é a tabela só altera na base de dados. Para repor um estado em que iniciou, restaure a base de dados da cópia de segurança ou anexe novamente a base de dados.

SQL Server 2005

Se estiver a executar o SQL Server 2005, utilize a cláusula WITH de início de sessão da instrução ALTER USER para remapear um utilizador a um novo início de sessão. Para mais informações, visite o seguinte Web site da Microsoft Developer Network (MSDN):
http://msdn.microsoft.com/en-us/library/ms176060.aspx
Nota Para utilizar a cláusula WITH de início de sessão da instrução ALTER USER , tem de aplicar o SQL Server 2005 Service Pack 2.

Referências

Para obter mais informações, clique números de artigo que se seguem para visualizar os artigos na base de dados de conhecimento da Microsoft:
274188Tópico "Resolução de problemas utilizadores isolados" no Books Online está incompleto
246133Como transferir os inícios de sessão e palavras-passe entre instâncias do SQL Server
168001Erros de início de sessão e/ou permissão de utilizador depois de restaurar informações de estado
298897EXEMPLO: Ajuda-o Mapsids.exe A mapa de SID entre utilizadores e de bases de dados principal quando for movido da base de dados

Propriedades

Artigo: 240872 - Última revisão: 27 de janeiro de 2009 - Revisão: 8.0
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL 2005 Server Workgroup
Palavras-chave: 
kbmt kbhowtomaster KB240872 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 240872

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com