Makale numarası: 918992 - Son Gözden Geçirme: 11 Temmuz 2006 Salı - Gözden geçirme: 2.3

Nasıl yapılır: SQL Server 2008, SQL Server 2005 örnekleri arasında oturumların ve parolaları aktarma

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Giriş

Bu makalede, oturumların ve parolaları arasında Microsoft SQL Server 2005 örneklerini ve Microsoft SQL Server 2008'in farklı sunucularda nasıl aktarılır.

Oturumlar ve parolaları SQL Server'ın diğer sürümleri örnekleri arasında aktarmak hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
246133  (http://support.microsoft.com/kb/246133/ ) SQL Server örnekleri arasında oturum ve parolalar nasıl aktarılır

Daha fazla bilgi

Bu makalede, sunucu A ve sunucu B farklı sunucularıdır. Ayrıca, sunucu A hem de sunucu B SQL Server 2005 çalıştırıyorsunuz.

Not Bu bilgiler, SQL Server 2008 için de geçerlidir.

Bir veritabanı SQL Server örneği BIR sunucudaki gelen B sunucudaki SQL Server örneğine taşıdıktan sonra kullanıcılar ayrıca b sunucusundaki veritabanına oturum olabilir, kullanıcılar aşağıdaki hata iletisini alabilirsiniz:
Oturum açma ' MyUser ' kullanıcısı için başarısız oldu. (Microsoft SQL Server'ı, hata: 18456)
Bu sorun oluşur, oturumların ve parolaları SQL Server örneği BIR sunucuda b sunucudaki SQL Server örneğine aktarmaya değil

Oturumlar ve parolaları SQL Server örneği BIR sunucudaki sunucu B SQL Server örneğine aktarmak için aşağıdaki adımları izleyin:
  1. Sunucudaki BIR SQL Server Management Studio'yu başlatın ve sonra da veritabanı taşınmış bir SQL Server örneğine bağlanmak.
  2. Yeni bir sorgu Düzenleyicisi penceresini açın ve aşağıdaki komut dosyasını çalıştırın.
    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 (514) OUTPUT
    AS
    DECLARE @charvalue varchar (514)
    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 @type varchar (1)
    DECLARE @hasaccess int
    DECLARE @denylogin int
    DECLARE @is_disabled int
    DECLARE @PWD_varbinary  varbinary (256)
    DECLARE @PWD_string  varchar (514)
    DECLARE @SID_varbinary varbinary (85)
    DECLARE @SID_string varchar (514)
    DECLARE @tmpstr  varchar (1024)
    DECLARE @is_policy_checked varchar (3)
    DECLARE @is_expiration_checked varchar (3)
    
    DECLARE @defaultdb sysname
     
    IF (@login_name IS NULL)
      DECLARE login_curs CURSOR FOR
    
          SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM 
    sys.server_principals p LEFT JOIN sys.syslogins l
          ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa'
    ELSE
      DECLARE login_curs CURSOR FOR
    
    
          SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM 
    sys.server_principals p LEFT JOIN sys.syslogins l
          ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name = @login_name
    OPEN login_curs
    
    FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
    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 ''
    WHILE (@@fetch_status <> -1)
    BEGIN
      IF (@@fetch_status <> -2)
      BEGIN
        PRINT ''
        SET @tmpstr = '-- Login: ' + @name
        PRINT @tmpstr
        IF (@type IN ( 'G', 'U'))
        BEGIN -- NT authenticated account/group
    
          SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']'
        END
        ELSE BEGIN -- SQL Server authentication
            -- obtain password and sid
                SET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) )
            EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT
            EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
     
            -- obtain password policy state
            SELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name
            SELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name
     
                SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string + ', DEFAULT_DATABASE = [' + @defaultdb + ']'
    
            IF ( @is_policy_checked IS NOT NULL )
            BEGIN
              SET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checked
            END
            IF ( @is_expiration_checked IS NOT NULL )
            BEGIN
              SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checked
            END
        END
        IF (@denylogin = 1)
        BEGIN -- login is denied access
          SET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name )
        END
        ELSE IF (@hasaccess = 0)
        BEGIN -- login exists but does not have access
          SET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL TO ' + QUOTENAME( @name )
        END
        IF (@is_disabled = 1)
        BEGIN -- login is disabled
          SET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE'
        END
        PRINT @tmpstr
      END
    
      FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
       END
    CLOSE login_curs
    DEALLOCATE login_curs
    RETURN 0
    GO
    
    Not bu komut dosyası ana veritabanında iki saklı yordamlar oluşturur. Iki saklı yordamda sp_hexadecimal depolanmış yordam ve sp_help_revlogin saklı yordamı olarak adlandırılır.
  3. Aşağıdaki ifadeyi çalıştırın.
    EXEC sp_help_revlogin
    Sp_help_revlogin depolanmış yordam tarafından üretilen çıktı komut dosyası, oturum açma komut dosyası ' dir. Bu oturum açma komut dosyası, özgün güvenlik tanımlayıcısı (SID) ve özgün parolayı oturumların oluşturur.
  4. Sunucu (B), SQL Server Management Studio'yu başlatın ve sonra da veritabanı taşıdığınız bir SQL Server örneğine bağlanmak.

    Önemli Adım 5'e gidin, önce "Uyarılar" bölümündeki bilgileri gözden geçirin.
  5. Yeni bir sorgu Düzenleyicisi penceresini açın ve adım 3'te oluşturulan çıktı komut dosyasını çalıştırın.

Açıklamalar

B: sunucuda örneğinde çıktı komut dosyasını çalıştırmadan önce aşağıdaki bilgileri gözden geçirin.
  • Çıkış kodu dikkatle gözden geçirin. Sunucu A ve B sunucu farklı etki alanlarında, çıktı komut dosyasını değiştirmek zorunda. Daha sonra özgün etki alanı adı yerine CREATE LOGIN ifadeleri yeni etki alanı adını sağlayın. Yeni etki alanı içinde erişim izni verilen tümleşik oturumların aynı SID olarak oturumların özgün etki alanında yok. Bu nedenle, kullanıcılar bu oturumların artık. Bu artık kullanıcıları çözümleme hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
    240872  (http://support.microsoft.com/kb/240872/ ) Veritabanı SQL Server çalıştıran sunucular arasında taşındığında izin sorunları nasıl giderilir
    Sunucu A ve B sunucu aynı etki alanında, aynı SID kullanılır. Bu nedenle, kullanıcılar artık olası değildir.
  • Çıktı komut dosyas?nda, şifrelenmiş parola kullanarak, açılan oturumların oluşturulur. Bu, oturum AÇMA CREATE deyiminde HASHED bağımsız değişkeni nedeniyle olur. Bu bağımsız değişkeni, sonra <a2>Parola</a2> değişkenini girilen parola zaten sağlaması belirtir.
  • Varsayılan olarak, bir SELECT deyimi sys.server_principals görünümden yalnızca sysadmin sabit sunucu rolü üyesi çalıştırabilirsiniz. Üye sysadmin sabit sunucu rolü sürece, kullanıcılara, gerekli izinlere kullanıcıları oluşturamaz veya çıkış kodu verir.
  • Bu makaledeki adımları belirli bir oturum açma için varsayılan veritabanı bilgilerini transfer. Bunun nedeni, varsayılan veritabanı sunucusu B'ye her zaman olmayabilir Bir oturum açma ilişkin varsayılan veritabanını tanımlamak için <a0></a0>, ALTER LOGIN deyimi tarafından oturum açma adını ve varsayılan veritabanı geçirme bağımsız değişken olarak kullanın.
  • <a1>Sunucu</a1> BIR sıralama düzeni, büyük/küçük harf duyarlı olabilir ve sunucu B sıralama düzenini, büyük/küçük harf duyarlı olabilir. Bu durumda, kullanıcıların tüm harfleri oturumların aktardıktan sonra büyük harf olarak parolaları ve sunucu b örneğinde için parolaları yazmalısınız

    Alternatif olarak, <a1>sunucu</a1> BIR sıralama düzeni, büyük/küçük harf duyarlı olabilir ve sunucu B sıralama düzenini, büyük/küçük harf duyarlı olabilir. Bu durumda, kullanıcıların oturumları ve aşağıdaki koşullardan biri doğruysa, sunucu B örneğinde transfer parolaları kullanarak oturum yapamazsınız:
    • Özgün parolalarını hiçbir harflerini içerir.
    • Tüm özgün parolalarda büyük harflerle harflerdir.
    Sunucu A hem de sunucu B sıralama düzenini büyük/küçük harf duyarlı olabilir veya sunucu A hem de sunucu B sıralama düzenini, büyük/küçük harf duyarlı olabilir. Bu durumda, kullanıcıların bir sorunla karşılaşıyorsunuz değil.
  • Sunucu B örneğinde zaten bulunan BIR oturum açma, çıktı komut dosyasında bir ad ile aynı olan bir ad olabilir. Bu durumda, B: sunucuda örnek çıktı komut dosyası çalıştırdığınızda aşağıdaki hata iletisini alıyorsunuz
    Msg 15025, Düzey 16, State 1, Line 1
    Sunucu asıl ' MyLogin ' zaten mevcut.
    Benzer şekilde, sunucu B örneğinde zaten bulunan bir oturum açma, çıktı komut dosyasında bir SID ile aynı olan bir SID olabilir. Bu durumda, B: sunucuda örnek çıktı komut dosyası çalıştırdığınızda aşağıdaki hata iletisini alıyorsunuz
    Msg 15433, Düzey 16, State 1, Line 1
    Sağlanan parametre sıd kullanılır.
    Bu nedenle, aşağıdakileri yapmanız gerekir:
    1. Çıkış kodu dikkatle gözden geçirin.
    2. B sunucuda örneği sys.server_principals görünümü içeriğini inceleyin.
    3. Bu hata iletileri için uygun adresi.
  • SQL Server 2005'te, veritabanı-düzeyi erişim uygulamak için bir oturum açma için SID temel olarak kullanılır. Bir oturum açma, iki farklı bir Sıd, bir sunucu üzerindeki iki farklı veritabanlarındaki olabilir. Bu durumda, oturum açma yalnızca sys.server_principals görünümündeki SID ile eşleşen SıD'I olan bir veritabanına erişebilirsiniz. Bu sorun iki veritabanını, iki farklı sunucularından birleştirilmiş ortaya çıkabilir. Bu sorunu gidermek için <a0></a0>, el ile oturum açma DROP USER deyimi kullanarak bir SID eşleşme hatası içeren bir veritabanını kaldırın. Sonra oturum açma yeniden CREATE USER deyimi kullanarak ekleyin.

Referanslar

Orphaned users ile ilgili sorunları giderme hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/ms175475.aspx (http://msdn2.microsoft.com/en-us/library/ms175475.aspx)
Oturum AÇMA CREATE deyimi hakkında daha fazla bilgi için aşağıdaki MSDN Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/ms189751.aspx (http://msdn2.microsoft.com/en-us/library/ms189751.aspx)
ALTER LOGIN bildirimi hakkında daha fazla bilgi için aşağıdaki MSDN Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/ms189828.aspx (http://msdn2.microsoft.com/en-us/library/ms189828.aspx)

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL 2005 Server Workgroup
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
Anahtar Kelimeler: 
kbmt kbexpertiseadvanced kbhowto kbinfo KB918992 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:918992  (http://support.microsoft.com/kb/918992/en-us/ )