DetailPage-MSS-KB

Base de Dados de Conhecimento

Artigo: 246133 - Última revisão: quarta-feira, 20 de Agosto de 2014 - Revisão: 10.0

 

Nesta página

Sumário

Depois de mover as bases de dados para um novo servidor, os utilizadores poderão não conseguir iniciar sessão no novo servidor. Em vez disso, recebem a seguinte mensagem de erro:
Erro 18456, nível 16, indicar 1
Início de sessão falhou para o utilizador '%ls'.
Tem de transferir os inícios de sessão e palavras-passe para o novo servidor. Este artigo descreve como transferir os inícios de sessão e palavras-passe para um novo servidor.

Como transferir os inícios de sessão e palavras-passe entre servidores com o SQL Server 7.0

A funcionalidade de transferência de objecto do SQL Server 7.0 dados Transformation Services (DTS) transfere inícios de sessão e de utilizadores entre dois servidores, mas não transfere as palavras-passe para inícios de sessão do SQL Server autenticado. Para transferir os inícios de sessão e palavras-passe de um servidor que esteja a executar o SQL Server 7.0 para outro servidor que esteja a executar o SQL Server 7.0, siga os passos na secção "Resolução concluída a transferência inícios de sessão e palavras-passe entre diferentes versões do SQL Server".

Como transferir os inícios de sessão e palavras-passe de SQL Server 7.0, SQL Server 2000 ou entre servidores com o SQL Server 2000

Para transferir os inícios de sessão e palavras-passe de um servidor de SQL Server 7.0 para uma instância do SQL Server 2000, ou entre duas instâncias do SQL Server 2000, pode utilizar a nova tarefa de inícios de sessão de transferência do pacote DTS no SQL Server 2000. Para tal, siga estes passos:
  1. Ligar ao servidor de destino do SQL Server 2000, mover para os serviços de transformação de dados no SQL Server Enterprise Manager, pasta de expandthe, com o botão direito Pacotes Locale, em seguida, clique em Novo pacote.
  2. Depois dos DTS compactar designer abre, clique em Transferir tarefa de inícios de sessão no menu de tarefas . Preencha as informações sobre os separadores de origem, destino e inícios de sessão , conforme adequado.

    Importante O servidor de destino do SQL Server 2000 não pode estar em execução a versão de 64 bits do SQL Server 2000. Componentes DTS para a versão de 64 bits do SQL Server 2000 não estão disponíveis. Se estiver a importar inícios de sessão de um instanceof do SQL Server que se encontra num computador diferente, sua instância do SQL Server willmust ser executado numa conta de domínio para concluir a tarefa.

    Nota O método DTS transferirá as palavras-passe mas não theoriginal SID. Se um início de sessão não é criado utilizando o SID original e userdatabases forem também transferidas para um novo servidor, os utilizadores da base de dados serão beorphaned partir o início de sessão. Para transferir o SID original e ignorar a orphanedusers, siga os passos na secção "Resolução concluída a transferência inícios de sessão e palavras-passe entre diferentes versões do SQL Server".

2005

Para mais informações sobre como transferir os inícios de sessão e palavras-passe entre instâncias do SQL Server 2005, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
918992  (http://support.microsoft.com/kb/918992/ ) Como transferir os inícios de sessão e as palavras-passe entre instâncias do SQL Server 2005

Uma solução completa para transferir os inícios de sessão e palavras-passe entre diferentes versões do SQL Server

Para tal, utilize um dos seguintes métodos.
Notas
  • Os scripts dos métodos seguintes criar dois procedimentos armazenados que têm o nome do procedimento armazenado sp_hexadecimal e o procedimento de sp_help_revlogin armazenados na base de dados principal .
  • Os scripts estão dependentes de tabelas de sistema do SQL Server.Pode alterar a estrutura destas tabelas entre versões do SQL Server. Não é aconselhada a seleccionar directamente a partir de tabelas de sistema.
  • Rever os comentários no fim deste artigo para obter informações importantes sobre os passos nos métodos.
  • Método 2 atribui inícios de sessão a funções.

Método 1

Este método aplica-se aos seguintes cenários:
  • Transferir inícios de sessão e palavras-passe de SQL Server 7.0 para o SQL Server 7.0.
  • Transferir inícios de sessão e palavras-passe de SQL Server 7.0 para o SQL Server 2000.
  • Transferir inícios de sessão e palavras-passe entre servidores com o SQL Server 2000.
Para transferir os inícios de sessão e palavras-passe entre diferentes versões do SQL Server, siga estes passos:
  1. Execute o seguinte script na origem do SQL Server. Continue para o passo 2 quando terminar de criar o procedimento armazenadosp_help_revlogin .
    ----- Begin Script, Create sp_help_revlogin procedure -----
    
    USE master
    GO
    IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL
      DROP PROCEDURE sp_hexadecimal
    GO
    CREATE PROCEDURE sp_hexadecimal
        @binvalue varbinary(256),
        @hexvalue varchar(256) OUTPUT
    AS
    DECLARE @charvalue varchar(256)
    DECLARE @i int
    DECLARE @length int
    DECLARE @hexstring char(16)
    SELECT @charvalue = '0x'
    SELECT @i = 1
    SELECT @length = DATALENGTH (@binvalue)
    SELECT @hexstring = '0123456789ABCDEF' 
    WHILE (@i <= @length) 
    BEGIN
      DECLARE @tempint int
      DECLARE @firstint int
      DECLARE @secondint int
      SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
      SELECT @firstint = FLOOR(@tempint/16)
      SELECT @secondint = @tempint - (@firstint*16)
      SELECT @charvalue = @charvalue +
        SUBSTRING(@hexstring, @firstint+1, 1) +
        SUBSTRING(@hexstring, @secondint+1, 1)
      SELECT @i = @i + 1
    END
    SELECT @hexvalue = @charvalue
    GO
    
    IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL
      DROP PROCEDURE sp_help_revlogin 
    GO
    CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
    DECLARE @name    sysname
    DECLARE @xstatus int
    DECLARE @binpwd  varbinary (256)
    DECLARE @txtpwd  sysname
    DECLARE @tmpstr  varchar (256)
    DECLARE @SID_varbinary varbinary(85)
    DECLARE @SID_string varchar(256)
    
    IF (@login_name IS NULL)
      DECLARE login_curs CURSOR FOR 
        SELECT sid, name, xstatus, password FROM master..sysxlogins 
        WHERE srvid IS NULL AND name <> 'sa'
    ELSE
      DECLARE login_curs CURSOR FOR 
        SELECT sid, name, xstatus, password FROM master..sysxlogins 
        WHERE srvid IS NULL AND name = @login_name
    OPEN login_curs 
    FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd
    IF (@@fetch_status = -1)
    BEGIN
      PRINT 'No login(s) found.'
      CLOSE login_curs 
      DEALLOCATE login_curs 
      RETURN -1
    END
    SET @tmpstr = '/* sp_help_revlogin script ' 
    PRINT @tmpstr
    SET @tmpstr = '** Generated ' 
      + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'
    PRINT @tmpstr
    PRINT ''
    PRINT 'DECLARE @pwd sysname'
    WHILE (@@fetch_status <> -1)
    BEGIN
      IF (@@fetch_status <> -2)
      BEGIN
        PRINT ''
        SET @tmpstr = '-- Login: ' + @name
        PRINT @tmpstr 
        IF (@xstatus & 4) = 4
        BEGIN -- NT authenticated account/group
          IF (@xstatus & 1) = 1
          BEGIN -- NT login is denied access
            SET @tmpstr = 'EXEC master..sp_denylogin ''' + @name + ''''
            PRINT @tmpstr 
          END
          ELSE BEGIN -- NT login has access
            SET @tmpstr = 'EXEC master..sp_grantlogin ''' + @name + ''''
            PRINT @tmpstr 
          END
        END
        ELSE BEGIN -- SQL Server authentication
          IF (@binpwd IS NOT NULL)
          BEGIN -- Non-null password
            EXEC sp_hexadecimal @binpwd, @txtpwd OUT
            IF (@xstatus & 2048) = 2048
              SET @tmpstr = 'SET @pwd = CONVERT (varchar(256), ' + @txtpwd + ')'
            ELSE
              SET @tmpstr = 'SET @pwd = CONVERT (varbinary(256), ' + @txtpwd + ')'
            PRINT @tmpstr
    	EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
            SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name 
              + ''', @pwd, @sid = ' + @SID_string + ', @encryptopt = '
          END
          ELSE BEGIN 
            -- Null password
    	EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
            SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name 
              + ''', NULL, @sid = ' + @SID_string + ', @encryptopt = '
          END
          IF (@xstatus & 2048) = 2048
            -- login upgraded from 6.5
            SET @tmpstr = @tmpstr + '''skip_encryption_old''' 
          ELSE 
            SET @tmpstr = @tmpstr + '''skip_encryption'''
          PRINT @tmpstr 
        END
      END
      FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd
      END
    CLOSE login_curs 
    DEALLOCATE login_curs 
    RETURN 0
    GO
     ----- End Script -----
    
    
  2. Depois de criar o procedimento armazenado sp_help_revlogin , execute o procedimento de sp_help_revlogin do analisador de consultas no servidor de origem. O procedimento armazenado sp_help_revlogin pode ser utilizado no SQL Server 7.0 e SQLServer 2000. O resultado do procedimento armazenado sp_help_revlogin é scripts de início de sessão que criar inícios de sessão com theoriginal SID e palavra-passe. Guardar a saída e, em seguida, colar e executá-la no QueryAnalyzer do destino do SQL Server. Por exemplo:
    EXEC master..sp_help_revlogin
    

Método 2

Este método aplica-se aos seguintes cenários:
  • Transferir inícios de sessão e palavras-passe de SQL Server 7.0 para o SQL Server 2005.
  • Transferir inícios de sessão e palavras-passe do SQL Server 2000 para o SQL Server 2005.
  • Inícios de sessão, atribuir a funções.
Para transferir os inícios de sessão e palavras-passe entre diferentes versões do SQL Server e, em seguida, atribuir inícios de sessão a funções, siga estes passos:
  1. Execute o seguinte script na origem do SQL Server.
    USE master 
    GO 
    IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL 
    DROP PROCEDURE sp_hexadecimal 
    GO 
    CREATE PROCEDURE sp_hexadecimal 
    @binvalue varbinary(256), 
    @hexvalue varchar(256) OUTPUT 
    AS 
    DECLARE @charvalue varchar(256) 
    DECLARE @i int 
    DECLARE @length int 
    DECLARE @hexstring char(16) 
    SELECT @charvalue = '0x' 
    SELECT @i = 1 
    SELECT @length = DATALENGTH (@binvalue) 
    SELECT @hexstring = '0123456789ABCDEF' 
    WHILE (@i <= @length) 
    BEGIN 
    DECLARE @tempint int 
    DECLARE @firstint int 
    DECLARE @secondint int 
    SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1)) 
    SELECT @firstint = FLOOR(@tempint/16) 
    SELECT @secondint = @tempint - (@firstint*16) 
    SELECT @charvalue = @charvalue + 
    SUBSTRING(@hexstring, @firstint+1, 1) + 
    SUBSTRING(@hexstring, @secondint+1, 1) 
    SELECT @i = @i + 1 
    END 
    SELECT @hexvalue = @charvalue 
    GO 
    
    IF OBJECT_ID ('sp_help_revlogin_2000_to_2005') IS NOT NULL 
    DROP PROCEDURE sp_help_revlogin_2000_to_2005 
    GO 
    CREATE PROCEDURE sp_help_revlogin_2000_to_2005 
    
    @login_name sysname = NULL, 
    @include_db bit = 0, 
    @include_role bit = 0 
    
    AS 
    DECLARE @name sysname 
    DECLARE @xstatus int 
    DECLARE @binpwd varbinary (256) 
    DECLARE @dfltdb varchar (256) 
    DECLARE @txtpwd sysname 
    DECLARE @tmpstr varchar (256) 
    DECLARE @SID_varbinary varbinary(85) 
    DECLARE @SID_string varchar(256) 
    
    IF (@login_name IS NULL) 
    DECLARE login_curs CURSOR STATIC FOR 
    SELECT sid, [name], xstatus, password, isnull(db_name(dbid), 'master') 
    FROM master.dbo.sysxlogins 
    WHERE srvid IS NULL AND 
    [name] <> 'sa' 
    ELSE 
    DECLARE login_curs CURSOR FOR 
    SELECT sid, [name], xstatus, password, isnull(db_name(dbid), 'master') 
    FROM master.dbo.sysxlogins 
    WHERE srvid IS NULL AND 
    [name] = @login_name 
    
    OPEN login_curs 
    
    FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd, @dfltdb 
    
    IF (@@fetch_status = -1) 
    BEGIN 
    PRINT 'No login(s) found.' 
    CLOSE login_curs 
    DEALLOCATE login_curs 
    RETURN -1 
    END 
    
    SET @tmpstr = '/* sp_help_revlogin script ' 
    PRINT @tmpstr 
    SET @tmpstr = '** Generated ' 
    + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */' 
    PRINT @tmpstr 
    PRINT '' 
    PRINT '' 
    PRINT '' 
    PRINT '/***** CREATE LOGINS *****/' 
    
    WHILE @@fetch_status = 0 
    BEGIN 
    PRINT '' 
    SET @tmpstr = '-- Login: ' + @name 
    PRINT @tmpstr 
    
    IF (@xstatus & 4) = 4 
    BEGIN -- NT authenticated account/group 
    IF (@xstatus & 1) = 1 
    BEGIN -- NT login is denied access 
    SET @tmpstr = '' --'EXEC master..sp_denylogin ''' + @name + '''' 
    PRINT @tmpstr 
    END 
    ELSE 
    BEGIN -- NT login has access 
    SET @tmpstr = 'IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE [name] = ''' + @name + ''')' 
    PRINT @tmpstr 
    SET @tmpstr = CHAR(9) + 'CREATE LOGIN [' + @name + '] FROM WINDOWS' 
    PRINT @tmpstr 
    END 
    END 
    ELSE 
    BEGIN -- SQL Server authentication 
    EXEC sp_hexadecimal @SID_varbinary, @SID_string OUT 
    
    IF (@binpwd IS NOT NULL) 
    BEGIN -- Non-null password 
    EXEC sp_hexadecimal @binpwd, @txtpwd OUT 
    SET @tmpstr = 'CREATE LOGIN [' + @name + '] WITH PASSWORD=' + @txtpwd + ' HASHED' 
    END 
    ELSE 
    BEGIN -- Null password 
    SET @tmpstr = 'CREATE LOGIN [' + @name + '] WITH PASSWORD=''''' 
    END 
    
    SET @tmpstr = @tmpstr + ', CHECK_POLICY=OFF, SID=' + @SID_string 
    PRINT @tmpstr 
    END 
    
    FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd, @dfltdb 
    END 
    
    IF @include_db = 1 
    BEGIN 
    PRINT '' 
    PRINT '' 
    PRINT '' 
    PRINT '/***** SET DEFAULT DATABASES *****/' 
    
    FETCH FIRST FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd, @dfltdb 
    
    WHILE @@fetch_status = 0 
    BEGIN 
    PRINT '' 
    SET @tmpstr = '-- Login: ' + @name 
    PRINT @tmpstr 
    
    SET @tmpstr = 'ALTER LOGIN [' + @name + '] WITH DEFAULT_DATABASE=[' + @dfltdb + ']' 
    PRINT @tmpstr 
    
    FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd, @dfltdb 
    END 
    END 
    
    IF @include_role = 1 
    BEGIN 
    PRINT '' 
    PRINT '' 
    PRINT '' 
    PRINT '/***** SET SERVER ROLES *****/' 
    
    FETCH FIRST FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd, @dfltdb 
    
    WHILE @@fetch_status = 0 
    BEGIN 
    PRINT '' 
    SET @tmpstr = '-- Login: ' + @name 
    PRINT @tmpstr 
    
    IF @xstatus &16 = 16 -- sysadmin 
    BEGIN 
    SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''sysadmin''' 
    PRINT @tmpstr 
    END 
    
    IF @xstatus &32 = 32 -- securityadmin 
    BEGIN 
    SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''securityadmin''' 
    PRINT @tmpstr 
    END 
    
    IF @xstatus &64 = 64 -- serveradmin 
    BEGIN 
    SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''serveradmin''' 
    PRINT @tmpstr 
    END 
    
    IF @xstatus &128 = 128 -- setupadmin 
    BEGIN 
    SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''setupadmin''' 
    PRINT @tmpstr 
    END 
    
    IF @xstatus &256 = 256 --processadmin 
    BEGIN 
    SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''processadmin''' 
    PRINT @tmpstr 
    END 
    
    IF @xstatus &512 = 512 -- diskadmin 
    BEGIN 
    SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''diskadmin''' 
    PRINT @tmpstr 
    END 
    
    IF @xstatus &1024 = 1024 -- dbcreator 
    BEGIN 
    SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''dbcreator''' 
    PRINT @tmpstr 
    END 
    
    IF @xstatus &4096 = 4096 -- bulkadmin 
    BEGIN 
    SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''bulkadmin''' 
    PRINT @tmpstr 
    END 
    
    FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd, @dfltdb 
    END 
    END 
    
    CLOSE login_curs 
    DEALLOCATE login_curs 
    RETURN 0 
    GO
    
    exec sp_help_revlogin_2000_to_2005 @login_name=NULL, @include_db=1, @include_role=1
    GO
  2. Guardar a saída e, em seguida, colar e executar a saída no SQL Server Management Studio no destino de SQL Server 2005.
Nota Se a origem do SQL Server contiver um início de sessão com uma palavra-passe em branco, o resultado contém uma instrução que é semelhante ao seguinte.
CREATE LOGIN LoginName WITH PASSWORD = '', CHECK_POLICY = OFF, SID = MySID

Observações

  • Reveja cuidadosamente o script de saída, antes de executar no thedestination do SQL Server. Se tiver de transferir os inícios de sessão para uma instância do SQLServer num domínio diferente que a instância de origem do SQL Server, editar thescript gerado pelo procedimento de sp_help_revlogin e substitua o nome de domínio com o novo domínio nas demonstraçõessp_grantlogin . Dado que os inícios de sessão integrados concedidos acesso no novo domínio não terão os mesmos SID como os inícios de sessão no domínio original, os utilizadores de base serão ficar isolados destes inícios de sessão. Para resolver estes orphanedusers, consulte os artigos referenciados no item com marca seguinte. Se youtransfer integrado inícios de sessão entre instâncias de servidores SQL no mesmo domínio, os mesmos SID é utilizado e o utilizador não é susceptível de ficar isolado.
  • Depois de mover os inícios de sessão, os utilizadores não poderão ter bases de dados do access permissionsto que também tenham sido movidas. Este problema é descrito como um utilizador"órfão". Se tentar conceder o acesso de início de sessão na base de dados,-mayfail, indicando o utilizador já existe:
    Microsoft SQL-DMO (ODBC SQLState: 42000) erro 15023: utilizador ou função '%s' já existe na base de dados actual.
    Para obter instruções sobre como mapear os inícios de sessão aos utilizadores da base de dados resolver órfãos inícios de sessão do SQL Server e integrados de inícios de sessão, consulte o seguinte artigo na Microsoft Knowledge Base:
    240872  (http://support.microsoft.com/kb/240872/ ) Como resolver problemas de permissões quando move uma base de dados entre servidores que executam o SQL Server
    Para obter instruções sobre como utilizar o sp_change_users_login de procedimento para corrigir os utilizadores órfãos um por um armazenado (thiswill apenas endereço utilizadores isolados de inícios de sessão padrão do SQL), consulte o followingarticle na Microsoft Knowledge Base:
    274188  (http://support.microsoft.com/kb/274188/ ) "Utilizadores de Orphaned de resolução de problemas" tópico no Books Online está incompleto
  • Se a transferência de inícios de sessão e palavras-passe fizer parte de uma bases de dados de moveof para um novo servidor com o SQL Server, consulte o seguinte artigo na Microsoft Knowledge Base para obter uma descrição do fluxo de trabalho e stepsinvolved:
    314546  (http://support.microsoft.com/kb/314546/ ) Como mover bases de dados entre computadores com o SQL Server
  • Pode fazê-lo devido o parâmetro @encryptopt no procedimento armazenado do sistema sp_addlogin , que permite um início de sessão ser criada a finalutilizando a palavra-passe encriptado. Para mais informações sobre este procedimento, seethe o tópico "sp_addlogin (T-SQL)" no SQL Server Books Online.
  • Por predefinição, apenas os membros do rolecan de servidor a sysadminfixed seleccionem na tabela sysxlogins . A menos que um membro da função sysadmin concede a necessarypermissions, os utilizadores finais não é possível criar ou executar estes procedimentos armazenados.
  • Esta abordagem não tenta transferir o databaseinformation de predefinido para um determinado login porque a base de dados predefinida poderá não alwaysexist no servidor de destino. Para definir a base de dados predefinida para um início de sessão, pode utilizar o procedimento armazenado do sistema sp_defaultdb por passagem a base de dados do nome e thedefault início de sessão como argumentos. Para mais informações sobre como utilizar este procedimento, consulte o tópico "sp_defaultdb" no SQL Server Books Online.
  • Durante a transferência de inícios de sessão entre instâncias do SQLServer, se a ordem pela qual o servidor de origem é maiúsculas e minúsculas e diferenciar maiúsculas de minúsculas, a Sequênciadeordenação do servidor de destino tem de introduzir caracteres de allalphabetical em palavras-passe como caracteres em maiúsculas depois da logins de transferof ao servidor de destino. Se a ordem pela qual os sensíveis de iscase do servidor de origem e a ordem pela qual o servidor de destino não diferenciam iscase, não será capaz de início de sessão com o transferredusing de inícios de sessão, o procedimento descrito neste artigo, a menos que o original passwordcontains caracteres não alfabéticos ou a menos que todos os caracteres alfabéticos a palavra-passe original são caracteres em maiúsculas. Se ambos os servidores arecase sensíveis, ou ambos os servidores forem maiúsculas e minúsculas, irá não experiencethis problema. Este é um efeito de lado da forma como que handlespasswords do SQL Server. Para mais informações, consulte o tópico "Efeito em palavras-passe de alteração SortOrders" no SQL Server 7.0 Books Online.
  • Quando executa a saída do sp_help_revlogin script no servidor de destino, se o servidor de destino já tiver uma definedwith de início de sessão como um dos inícios de sessão, o mesmo nome no resultado do script, poderá ver erro de thefollowing após a execução da saída do sp_help_revlogin script:
    Servidor: Erro 15025, de 16 de nível, o estado 1, sp_addlogin de procedimento, linha 56
    O início de sessão 'Teste1' já existe.
    Do mesmo modo, se um início de sessão diferente existir com o mesmo valor de SID neste servidor como o que está a tentar adicionar, receivethe seguinte mensagem de erro:
    Servidor: Msg15433, de 16 de nível de estado 1, sp_addlogin de procedimento, linha 93
    Suppliedparameter @sid está em utilização.
    Assim, tem de carefullyreview o resultado destes comandos, examinar o conteúdo da tabela de sysxlogins e endereço estes erros em conformidade.
  • O valor de SID para um início de sessão específico é utilizado como o basisfor a execução de acesso de nível de base de dados no SQL Server. Por conseguinte, se o samelogin tem dois valores diferentes para o SID ao nível da base de dados (em bases de dados twodifferent nesse servidor), o início de sessão só terá acesso a thatdatabase cujo SID corresponda ao valor syslogins para esse início de sessão. Esta situação poderá ocorrer se a questão de dois databasesin ter sido consolidada de dois servidores diferentes. Para resolver thisproblem, o início de sessão em questão teria de ser removida manualmente da base que tenha um erro de correspondência de SID, utilizando o procedimento armazenado sp_dropuser e, em seguida, adicionado novamente utilizando o procedimento armazenado sp_adduser .

A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Workgroup Edition
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL 2005 Server Workgroup
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
Palavras-chave: 
kbsqlsetup kbhowtomaster kbinfo kbmt KB246133 KbMtpt
Tradução automáticaTraduçã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: 246133  (http://support.microsoft.com/kb/246133/en-us/ )
Partilhar
Opções de suporte adicionais
Fóruns de Suporte da Comunidade Microsoft
Contacte-nos directamente
Encontre um parceiro certificado Microsoft
Loja Microsoft