Trasferimento di accessi e password tra istanze di SQL Server

Traduzione articoli Traduzione articoli
Identificativo articolo: 246133 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

Dopo lo spostamento di database in un nuovo server, Ŕ possibile che gli utenti non siano in grado di accedere al nuovo server e che visualizzino un messaggio di errore analogo al seguente:
Messaggio 18456, livello 16, stato 1
Accesso non riuscito per l'utente '%ls'.
╚ necessario trasferire gli account di accesso e le password nel nuovo server. In questo articolo viene descritto come eseguire questa operazione.

Trasferimento di account di accesso e password tra server in cui Ŕ in esecuzione SQL Server 7.0

La funzionalitÓ di trasferimento degli oggetti Data Transformation Services (DTS) di SQL Server 7.0 consente di trasferire account di accesso e utenti tra due server, ma non le password per gli account di accesso autenticati di SQL Server. Per trasferire account di accesso e password da un server in cui Ŕ in esecuzione SQL Server 7.0 in un altro server in cui Ŕ in esecuzione SQL Server 7.0, attenersi alla procedura descritta nella sezione "Soluzione completa per il trasferimento di account di accesso e password tra versioni diverse di SQL Server".

Trasferimento di account di accesso e password da SQL Server 7.0 a SQL Server 2000 o tra server in cui Ŕ in esecuzione SQL Server 2000

Per trasferire account di accesso e password da un server in cui Ŕ in esecuzione SQL Server 7.0 a un'istanza di SQL Server 2000 o tra due istanze di SQL Server 2000, Ŕ possibile utilizzare la nuova attivitÓ Trasferisci account di accesso per i pacchetti DTS in SQL Server 2000. A questo scopo, attenersi alla seguente procedura:
  1. Eseguire la connessione al server di destinazione SQL Server 2000, spostarsi in Data Transformation Services in SQL Server Enterprise Manager, espandere la cartella, fare clic con il pulsante destro del mouse su Pacchetti locali e quindi scegliere Nuovo pacchetto.
  2. All'apertura di Progettazione pacchetti DTS scegliere AttivitÓ Trasferisci account di accesso dal menu AttivitÓ. Specificare le informazioni necessarie nelle schede Origine, Destinazione e Account di accesso.

    Importante Nel server SQL Server 2000 di destinazione non deve essere in esecuzione la versione a 64 bit di SQL Server 2000. I componenti DTS per la versione a 64 bit di SQL Server 2000 non sono disponibili. Se si importano account di accesso da un'istanza di SQL Server presente in un computer diverso, per completare l'attivitÓ l'istanza di SQL Server dovrÓ essere eseguita con un account di dominio.

    Nota Il metodo DTS consentirÓ di trasferire le password, ma non il SID originale. Se un account di accesso non viene creato utilizzando il SID originale e nel nuovo server vengono trasferiti anche i database utente, gli utenti dei database non saranno pi¨ associati ai relativi account di accesso. Per trasferire il SID originale e ignorare gli utenti isolati (orfani), attenersi alla procedura descritta nella sezione "Soluzione completa per il trasferimento di account di accesso e password tra versioni diverse di SQL Server".

Trasferimento di account di accesso e password tra istanze di SQL Server 2005

Per ulteriori informazioni su come trasferire account di accesso e password tra istanze di SQL Server 2005, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
918992 Trasferimento di account di accesso e password tra istanze di SQL Server 2005

Soluzione completa per il trasferimento di account di accesso e password tra versioni diverse di SQL Server

A questo scopo, utilizzare uno dei seguenti metodi.
Note
  • Con gli script riportati nei metodi seguenti vengono create due stored procedure denominate sp_hexadecimal e sp_help_revlogin nel database master.
  • Gli script dipendono dalle tabelle di sistema di SQL Server la cui struttura pu˛ variare tra le diverse versioni di SQL Server. ╚ sconsigliabile eseguire istruzioni SELECT direttamente sulle tabelle di sistema.
  • Per informazioni importanti sui diversi passaggi dei metodi, vedere le note alla fine dell'articolo.
  • Con il metodo 2 vengono associati gli account di accesso ai ruoli.

Metodo 1

Questo metodo pu˛ essere applicato negli scenari seguenti:
  • Trasferimento di account di accesso e password da SQL Server 7.0 a SQL Server 7.0.
  • Trasferimento di account di accesso e password da SQL Server 7.0 a SQL Server 2000.
  • Trasferimento di account di accesso e password tra server in cui Ŕ in esecuzione SQL Server 2000.
Per trasferire account di accesso e password tra versioni diverse di SQL Server, attenersi alla seguente procedura:
  1. Eseguire lo script riportato di seguito nel server SQL di origine. Al termine della creazione della store procedure sp_help_revlogin proseguire al passaggio 2.
    ----- 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. Dopo la creazione della stored procedure sp_help_revlogin, eseguire la routine sp_help_revlogin da Query Analyzer nel server di origine. La stored procedure sp_help_revlogin pu˛ essere utilizzata sia in SQL Server 7.0 che in SQL Server 2000. L'output della stored procedure sp_help_revlogin Ŕ rappresentato da script di accesso per la creazione di account di accesso con il SID originale e la relativa password. Salvare l'output e quindi incollarlo ed eseguirlo in Query Analyzer nel server SQL Server di destinazione, ad esempio:
    EXEC master..sp_help_revlogin
    

Metodo 2

Questo metodo pu˛ essere applicato negli scenari seguenti:
  • Trasferimento di account di accesso e password da SQL Server 7.0 a SQL Server 2005.
  • Trasferimento di account di accesso e password da SQL Server 2000 a SQL Server 2005.
  • Assegnazione di ruoli ad account di accesso.
Per trasferire account di accesso e password tra versioni diverse di SQL Server e quindi assegnare ruoli agli account di accesso, attenersi alla seguente procedura:
  1. Eseguire lo script riportato di seguito nel server SQL di origine.
    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. Salvare l'output e quindi incollarlo ed eseguirlo in SQL Server Management Studio nel server SQL 2005 di destinazione.
Nota Se il server SQL di origine contiene un account di accesso con password vuota, l'output conterrÓ un'istruzione analoga alla seguente:
CREATE LOGIN LoginName WITH PASSWORD = '', CHECK_POLICY = OFF, SID = MySID

Note

  • Controllare attentamente lo script di output prima di eseguirlo nel server SQL di destinazione. Per trasferire account di accesso in un'istanza di SQL Server in un dominio diverso da quello dell'istanza di origine di SQL Server, modificare lo script generato dalla routine sp_help_revlogin sostituendo il nome del dominio con il nuovo dominio nelle istruzioni sp_grantlogin. Dato che gli account di accesso integrati a cui si concede accesso nel nuovo dominio non saranno associati agli stessi SID degli account di accesso del dominio originale, gli utenti dei database non saranno pi¨ associati a tali account di accesso. Per risolvere gli utenti isolati (orfani), vedere gli articoli menzionati al punto successivo. Se si trasferiscono account di accesso integrati tra istanze di SQL Server nello stesso dominio, verrÓ utilizzato lo stesso SID e sarÓ quindi improbabile che l'utente rimanga isolato (orfano).
  • Dopo lo spostamento degli account utente, Ŕ possibile che gli utenti non dispongano pi¨ delle autorizzazioni per accedere ai database, anch'essi spostati. In questo caso si parla di "utente isolato (orfano)". Se si tenta di concedere l'accesso al database, potrebbe essere visualizzato un messaggio di errore che indica che l'utente esiste giÓ:
    Microsoft SQL-DMO (ODBC SQLState: 42000) Errore 15023: L'utente, il gruppo o il ruolo '%1!' esiste giÓ nel database corrente.
    Per istruzioni su come eseguire il mapping degli account utente agli utenti del database per risolvere gli account di accesso di SQL Server isolati (orfani) e gli account di accesso integrati, vedere il seguente articolo della Microsoft Knowledge Base:
    240872 Risoluzione di problemi di autorizzazioni quando si sposta un database tra server in cui Ŕ in esecuzione SQL server
    Per istruzioni su come utilizzare la stored procedure sp_change_users_login per correggere singolarmente utenti isolati (orfani), vedere il seguente articolo della Microsoft Knowledge Base. Verranno considerati solo utenti isolati (orfani) con account di accesso SQL standard.
    274188 L'argomento della documentazione in linea relativo alla risoluzione degli utenti orfani (isolati) non Ŕ completo
  • Se il trasferimento di account di accesso e password viene eseguito all'interno di uno spostamento di database in un nuovo server in cui Ŕ in esecuzione SQL Server, vedere il seguente articolo della Microsoft Knowledge Base per una descrizione del flusso di lavoro e dei passaggi necessari:
    314546 Spostamento di database tra computer che eseguono SQL Server
  • L'operazione Ŕ consentita grazie al parametro @encryptopt della stored procedure di sistema sp_addlogin che consente la creazione di un account di accesso tramite password crittografata. Per ulteriori informazioni su questa routine, vedere l'argomento "sp_addlogin (T-SQL)" nella documentazione in linea di SQL Server.
  • Per impostazione predefinita, solo i membri del ruolo server sysadminfixed possono eseguire istruzioni SELECT sulla tabella sysxlogins. Se un membro del ruolo sysadmin non concede le autorizzazioni necessarie, gli utenti finali non potranno creare o eseguire queste stored procedure.
  • Con questo approccio non si tenta di trasferire le informazioni sul database predefinito per un determinato account di accesso, perchÚ tale database potrebbe non essere presente nel server di destinazione. Per definire il database predefinito per un account di accesso, Ŕ possibile utilizzare la stored procedure di sistema sp_defaultdb passando come argomenti il nome dell'account di accesso e il database predefinito. Per ulteriori informazioni sull'utilizzo di questa routine, vedere l'argomento "sp_defaultdb" nella documentazione in linea di SQL Server.
  • Durante il trasferimento di account di accesso tra istanze di SQL Server, se per l'ordinamento del server di origine non viene fatta distinzione tra maiuscole e minuscole, mentre per l'ordinamento del server di destinazione viene fatta distinzione tra maiuscole e minuscole, successivamente al trasferimento degli account di accesso al server di destinazione sarÓ necessario immettere tutti i caratteri alfabetici delle password come caratteri maiuscoli. Se per l'ordinamento del server di origine viene fatta distinzione tra maiuscole e minuscole, mentre per l'ordinamento del server di destinazione non viene fatta distinzione tra maiuscole e minuscole, non sarÓ possibile eseguire l'accesso con gli account di accesso trasferiti mediante la procedura descritta in questo articolo se la password originale contiene caratteri alfabetici o se tutti i caratteri alfabetici della password originale non sono caratteri maiuscoli. Se le maiuscole e le minuscole vengono gestite in modo analogo nell'ordinamento del server di origine e di destinazione, questo problema non si verificherÓ. Si tratta di una conseguenza della modalitÓ di gestione delle password di SQL Server. Per ulteriori informazioni, vedere l'argomento relativo all'effetto delle modifiche dell'ordinamento sulle password nella documentazione in linea di SQL Server 7.0.
  • Quando si esegue l'output dello script sp_help_revlogin nel server di destinazione, se nel server di destinazione Ŕ giÓ stato definito un account di accesso con nome analogo a quello di uno degli account di accesso presenti nell'output dello script, potrebbe essere visualizzato l'errore seguente all'esecuzione dell'output dello script sp_help_revlogin:
    Server: messaggio 15025, livello 16, stato 1, procedura sp_addlogin, riga 56
    L'account di accesso test1 esiste giÓ nel server di destinazione.
    Analogamente, se nel server esiste giÓ un account di accesso diverso con lo stesso SID dell'account di accesso che si tenta di aggiungere, verrÓ visualizzato il seguente messaggio di errore:
    Server: messaggio 15433, livello 16, stato 1, procedura sp_addlogin, riga 93
    Il parametro sid specificato Ŕ in uso.
    ╚ pertanto necessario controllare con attenzione l'output dei comandi, esaminare il contenuto della tabella sysxlogins e correggere gli errori in modo appropriato.
  • Il valore SID di un determinato account di accesso viene utilizzato come base per implementare l'accesso a livello di database in SQL Server. Per questo motivo, se lo stesso account di accesso Ŕ associato a due valori SID diversi a livello di database (in due database diversi nel server), potrÓ accedere solo al database per cui il relativo SID corrisponde al valore presente in syslogins. Una situazione di questo tipo pu˛ verificarsi se i due database in questione sono stati consolidati da due server diversi. Per risolvere il problema, l'account di accesso in questione dovrÓ essere rimosso manualmente dal database per cui esiste una mancata corrispondenza di SID utilizzando la stored procedure sp_dropuser e quindi aggiunto nuovamente utilizzando la stored procedure sp_adduser.

ProprietÓ

Identificativo articolo: 246133 - Ultima modifica: giovedý 12 maggio 2011 - Revisione: 9.0
Le informazioni in questo articolo si applicano 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 Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
Chiavi:á
kbsqlmanagementtools kbhowtomaster kbinfo KB246133
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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