Oturum ve Parolaları SQL Server örnekleri arasında aktarma

Makale çevirileri Makale çevirileri
Makale numarası: 918992 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

GİRİŞ

Bu makalede, farklı sunucularda Microsoft SQL Server 2005, Microsoft SQL Server 2008 ve Microsoft SQL Server 2012 örnekleri arasında oturum ve parolaları aktarma açıklanır.

Diğer sürümleri SQL Server örnekleri arasında oturum ve parolaları aktarma hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
246133 Oturum ve Parolaları SQL Server örnekleri arasında aktarma

Daha fazla bilgi

Bu makalede, Sunucu A ve Sunucu B farklı sunucularıdır. Ayrıca, Sunucu A ve Sunucu B SQL Server 2005 çalışan.

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

Bir veritabanı SQL Server örneğinde Sunucu A'dan B sunucuda SQL Server örneğine taşıdıktan sonra kullanıcılar ayrıca B. sunucusundaki veritabanı oturum açamayabilirsiniz, kullanıcılar aşağıdaki hata iletisini alabilirsiniz:
Kullanıcısı için oturum açma başarısız oldu 'MyUser'. (Microsoft SQL Server, hata: 18456)
Bu sorun, oturum ve Parolaları SQL Server örneğinde Sunucu A B. sunucudaki SQL Server örneğine aktarmaya değil nedeniyle oluşur

Oturumları aktarmak için aşağıdaki yöntemlerden durumunuza uygun olanını kullanın.

Yöntem 1: öncesi SQL Server 2000 parolayı kullanarak oturum açma

Bu sorunu gidermek için SQL Server oturum açma öncesi SQL Server 2000 çalıştıran sunucuya oturum açmak için kullanıcı isteyin.

Not Öncesi SQL Server 2000 parolayı kullanarak kullanıcı oturum açarken parola karma otomatik olarak güncelleştirilir.

Yöntem 2: SQL Server'daki parola sıfırlama

Bu sorunu çözmek, SQL Server'daki parola sıfırlama ve oturum açma komut dosyası için.

Not Parolayı sıfırlamak için parola karma algoritması kullanılır.

Yöntem 3: bir günlük boş bir parolaya sahip komut dosyası oluşturun.

Komut dosyasında boş bir parolaya sahip bir oturum oluşturmak için şu adımları izleyin:
  1. Sunucudaki bir SQL Server Management Studio'yu başlatın ve sonra SQL Server veritabanını taşıdığınız sunucuya bağlanın.
  2. Yeni bir sorgu Düzenleyicisi penceresi açın ve sonra 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
    


    NotBu komut dosyası anaveritabanında saklı yordamlarını oluşturur. Yordamlar,sp_hexadecimal ve sp_help_revloginolarak adlandırılır.
  3. Aşağıdaki ifadeyi çalıştırın:
    EXEC sp_help_revlogin
    Sp_help_revlogin depolanan yordamı oluşturur çıktı komut dosyasını oturum açma komut dosyasıdır. Bu oturum açma komut dosyası, özgün güvenlik tanımlayıcısı (SID) ve özgün parolayı sahip oturumların oluşturur.
  4. Sunucu B, SQL Server Management Studio'yu başlatın ve sonra SQL Server veritabanını taşıdığınız sunucuya bağlanın.

    Önemli 5. Adıma geçmeden önce "Açıklamalar" bölümündeki bilgileri gözden geçirin.
  5. Yeni bir sorgu Düzenleyicisi penceresi açın ve sonra adım 3'te oluşturulan çıktı komut dosyasını çalıştırın.

Açıklamalar

B: sunucuda örnek çıktı komut dosyasını çalıştırmadan önce aşağıdaki bilgileri gözden geçirin.
  • Komut dosyası bir öncesi SQL Server 2000 oturumu kullanarak yeni bir SQL Server 2012 oturum oluşturmaya çalışırsanız, aşağıdaki hatayı alırsınız:
    Msg 15021, düzey 16, State 2, 1 satır
    Parola parametresi için belirtilen değer geçersiz. Geçerli parametre değeri belirtin.
    Not Oturum açma oluşturmak ve ALTER LOGIN ifadeleri için sağlanan 16 baytlık parola karma nedeniyle SQL Server 2012'de bu hatayı alırsınız.

    SQL Server 2012 çalıştıran bir sunucuda bu sorunu gidermek için boş bir parolaya sahip bir oturum oluşturma. Bunu yapmak için aşağıdaki komutu çalıştırın:
    CREATE LOGIN [Test] WITH PASSWORD = '', SID = 0x90FD605DCEFAE14FAB4D5EB0BBA1AECC, 
    DEFAULT_DATABASE = [master], CHECK_POLICY = ON, CHECK_EXPIRATION = OFF

    Boş bir parolaya sahip bir oturum açma oluşturduktan sonra kullanıcının sonraki oturum açma girişiminde parolayı değiştirebilirsiniz.
  • Parola sağlaması üç yolla:
    • VERSION_LEGACY: Bu karma 16 baytlık öncesi-SQL Server 2000 karma değil.
    • VERSION_SHA1: Bu karma SHA1 algoritması kullanılarak oluşturulur ve SQL Server 2008 R2 ile SQL Server 2000'de kullanılır.
    • VERSION_SHA2: Bu karma SHA2'yi 512 algoritması kullanılarak oluşturulur ve SQL Server 2012'de kullanılır.
  • SQL Server 2008 R1 ve önceki sürümlerinde, öncesi SQL Server 2000 şifre karmaları desteklenmekteydi. Karma öncesi SQL Server 2000 karma kullanılan bir parola kullanarak oturum açmış bir kullanıcının, SHA1 parola karmasını kullanmak için yükseltildi.
  • SQL Server 2008 R2 çalıştıran bir sunucuda öncesi SQL Server 2000 kullanır bir parolaya sahip bir kullanıcı varsa, bu kullanıcı sunucuya oturum değil açtığını anlamına gelir.
  • Çıktı komut dosyası dikkatle gözden geçirin. Sunucu A ve Sunucu B farklı etki alanlarında, çıktı komut dosyasını değiştirmeniz gerekir. Sonra yeni etki alanı adı oturum açma oluşturma deyimleri kullanarak özgün etki alanı adını değiştirmek zorunda. Yeni bir etki alanı içinde erişim izni verilen tümleşik oturum açmayı oturumu olarak aynı SID özgün etki alanında yok. Bu nedenle, kullanıcılar bu oturumu açma artık. Bu artık kullanıcıları çözümleme hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
    240872 SQL Server çalıştıran sunucular arasında veritabanı taşındığında, izin sorunlarını çözümleme hakkında
    Sunucu A ve Sunucu B aynı etki alanında, aynı SID kullanılır. Bu nedenle, kullanıcılar artık olası değildir.
  • Çıktı komut dosyasında şifrelenmiş parolayı kullanarak oturum açma oluşturulur. Bu oturum açma oluşturma deyiminde HASHED bağımsız değişkeni nedeniyle olur. Bu bağımsız değişken parola bağımsız değişkenini sonra girilen parola karma olduğunu belirtir.
  • Varsayılan olarak, yalnızca sysadmin sabit sunucu rolünün bir üyesi sys.server_principals görünümünden bir SELECT deyimi çalıştırabilirsiniz. Üye sysadmin sabit sunucu rolü sürece kullanıcılar oluşturmak veya çıktı komut dosyası çalıştırma kullanıcılarına gereken izinleri verir.
  • Bu makaledeki adımları belirli bir oturum açma için varsayılan veritabanı bilgi aktarılmaz. Bunun nedeni, varsayılan veritabanı sunucusu B'ye üzerinde her zaman olmayabilir Bir oturum açma için varsayılan veritabanını tanımlamak için ALTER LOGIN ifadesini oturum açma adını ve varsayılan veritabanını geçirerek bağımsız değişken olarak kullanın.
  • Büyük küçük harf duyarsız Sunucu A ve B büyük küçük harf duyarlı server: Sunucu A sıralama büyük küçük harf duyarlı ve sıralama düzenini B sunucu büyük küçük harf duyarlı olabilir. Bu durumda, kullanıcıların oturumları aktardıktan sonra tüm büyük harflerle parolalar ve parolaları örneğine B. sunucuda yazmalısınız

    Büyük küçük harf duyarlı Sunucu A ve B duyarlı server: Sunucu A sıralama büyük küçük harf duyarlı ve sıralama düzenini B sunucu büyük küçük harf duyarlı olabilir. Bu durumda, kullanıcılar oturum ve aşağıdaki koşullardan biri doğru değilse, Sunucu B üzerinde örneğe transfer parolalar kullanarak oturumu açamaz:
    • Özgün harf içeren.
    • Özgün parolaların tüm harfleri büyük harf var.
    Büyük küçük harf duyarlı veya duyarsız her iki sunucuda: Sunucu A ve Sunucu B sıralama büyük küçük harf duyarlı veya sıralama düzenini, Sunucu A ve Sunucu B büyük küçük harf duyarlı olabilir. Bu durumda, kullanıcılar bir sorun yaşamazsınız.
  • Zaten var olan sunucuda B örneğinde 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, satır 1
    Sunucu asıl adı 'MyLogin' zaten mevcut.
    Benzer şekilde, zaten var olan sunucuda B örneğinde oturum açma SID çıktı komut dosyasında aynı SID sahip 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, satır 1
    Sağlanan parametre SID kullanılır.
    Bu nedenle, aşağıdakileri yapmanız gerekir:
    1. Çıktı komut dosyası dikkatle gözden geçirin.
    2. B. sunucuda örneğinde sys.server_principals görünümünün içeriğini inceleyin
    3. Bu hata iletilerini uygun adres.
  • SQL Server 2005'te, bir oturum açma SID'si, veritabanı düzeyinde erişim uygulamak için kullanılır. Oturum açma farklı SID farklı veritabanlarında bir sunucuda olabilir. Bu durumda, oturum açma SID sys.server_principals görünümünde eşleşen SID içeren bir veritabanını yalnızca erişebilir. İki veritabanının farklı sunuculardan birleştirilir Bu sorun oluşabilir. Bu sorunu gidermek için el ile oturum açma SID'si uyuşmazlık DROP USER deyimi kullanarak veritabanına kaldırın. Daha sonra oturum açma yeniden CREATE USER deyimi kullanarak ekleyin.

Referanslar

Artık kullanıcı sorunlarını giderme hakkında daha fazla bilgi için gidin Artık kullanıcı sorunlarını giderme Microsoft Developer Network (msdn) Web sitesi.

Oturum açma oluşturma deyimi hakkında daha fazla bilgi için gidin Oturum açma (Transact-SQL) oluşturma MSDN Web sitesi.

ALTER LOGIN ifadesini hakkında daha fazla bilgi için gidin Oturum açma (Transact-SQL) ALTER MSDN Web sitesi.

Özellikler

Makale numarası: 918992 - Last Review: 16 Şubat 2014 Pazar - Gözden geçirme: 2.0
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
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Workgroup
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2012 Standard
  • Microsoft SQL Server 2012 Developer
  • Microsoft SQL Server 2012 Enterprise
Anahtar Kelimeler: 
kbsqlsetup kbexpertiseadvanced kbhowto kbinfo kbmt KB918992 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, Microsoft Makine Çevirisi Düzenleme yazılımı tarafından tercüme edilmiş olup, yüksek olasılıkla profesyonel bir çevirmen yerine CTF teknolojisi kullanılarak, Microsoft Topluluğu tarafından düzenlenmiştir. Microsoft, Bilgi Bankamız içindeki tüm makaleleri kendi dilinizde okuyabilmeniz için size hem profesyonel çevirmenler tarafından tercüme edilen hem de makine tarafından tercüme edildikten sonra Topluluk tarafından kontrol edilen makaleler sunar. Bununla birlikte, makine tarafından tercüme edilen, hatta Topluluk tarafından kontrol edilen bir makale bile her zaman mükemmel dil kalitesinde olmayabilir. Makalede dilinizi konuşan yabancı birisinin yapabileceği türden sözcük, söz dizimi veya dilbilgisi hataları bulunabilir. Microsoft, içeriğin hatalı tercümesinin veya müşterilerimiz tarafından kullanımının doğurabileceği olası yanlış anlamalar, hatalar veya zararlardan sorumlu değildir. Öte yandan Microsoft, Makine Çevirisi Düzenleme işlemini geliştirmek amacıyla Makine Çevirisi Düzenleme yazılımını ve araçlarını sık sık güncelleştirmektedir.
Makalenin İngilizcesi aşağıdaki gibidir: 918992

Geri Bildirim Ver

 

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