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
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:
Sunucudaki BIR SQL Server Management Studio'yu başlatın ve sonra da veritabanı taşınmış bir SQL Server örneğine bağlanmak.
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.
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.
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.
Yeni bir sorgu Düzenleyicisi penceresini açın ve adım 3'te oluşturulan çıktı komut dosyasını çalıştırın.
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:
Çıkış kodu dikkatle gözden geçirin.
B sunucuda örneği sys.server_principals görünümü içeriğini inceleyin.
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.
Ö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/
)
Bu makaleyi kullanmak için ne kadar kişisel çaba harcadınız?
Çok az
Az
Orta
Fazla
Çok fazla
Bu bilgiyi geliştirmemiz için nedenleri ve bu konuda neler yapabileceğimizi paylaşın
Teşekkürler! Görüşleriniz, destek içeriğimizi geliştirmemize yardımcı olmak için kullanılmaktadır. Diğer yardım seçenekleri için, lütfen Yardım ve Destek Giriş Sayfasını ziyaret edin.