Bu makalede, SQL Server çalıştıran sunucular arasında veritabanı taşındığında, izin sorunlarını gidermek için standart ve tümleşik oturum açmaların nasıl eşleştirileceği anlatılmaktadır.
Bir veritabanını SQL Server çalıştıran bir sunucudan yine SQL Server çalıştıran başka bir sunucuya taşıdığınızda, master
veritabanında açılan oturumların güvenlik kimlik numaraları (SID) ile user
veritabanındaki kullanıcılar arasında bir eşleşme hatası oluşabilir. Varsayılan ayar olarak, SQL Server 7.0, SQL Server 2000 ve SQL Server 2005 bu eşleşme hatası oluşan kullanıcıları eşleştirmek amacıyla sp_change_users_login
sistem saklı yordamını sağlar. Ancak, sp_change_users_login
saklı yordamını yalnızca standart SQL Server oturumlarını eşleştirmek için kullanabilirsiniz ve bu eşleştirmeleri her kullanıcı için tek tek gerçekleştirmelisiniz. sp_change_users_login
saklı yordamı hakkında daha fazla bilgi için, SQL Server 7.0, SQL Server 2000 ve SQL Server 2005 Books Online'da "sp_change_users_login" konusuna bakın.
SQL Server 7.0 veya sonraki sürümlerinde SID kullanarak, açılan oturumların eşleştirmesini master
veritabanında ve kullanıcıların eşleştirmesini user
veritabanında saklayabilirsiniz. Bu eşleştirme, user
veritabanlarındaki oturumlar için doğru izinlerin saklanması açısından zorunludur. Bu eşleştirme kaybolursa, açılan oturumlarda aşağıda listelenen, ancak bunlarla sınırlı olmayan izin sorunları oluşabilir:
- SQL Server oturumu yeni sunucuda yoksa ve kullanıcı oturum açmaya çalışırsa, aşağıdaki hata iletisini alabilir:
Server: Msg 18456, Level 16, State 1 (Sunucu: İleti 18456, Düzey 16, Durum 1)
Login failed for user '%ls'. ('%ls' kullanıcısı için oturum açma başarısız oldu.)
- SQL Server oturumu yeni sunucuda varsa, ancak master veritabanındaki SID değeri user veritabanındaki SID değerinden farklıysa, kullanıcı SQL Server'da başarıyla oturum açabilir; ancak kullanıcı veritabanına erişmeye çalıştığında aşağıdaki hata iletisini alabilir:
Not SQL Server 2005'te, kullanıcı şu hata iletisini alabilir:
Server: Msg 916, Level 14, State 1, Line1 (Sunucu: İleti 916, Düzey 14, Durum 1, Satır1)
Server user '%.*ls' is not a valid user in database '%.*ls'. ('%.*ls' sunucu kullanıcısı, '%.*ls' veritabanında geçerli bir kullanıcı değil.)
Server user '%s' is not a valid user in database '%s'. ('%s' sunucu kullanıcısı, '%s' veritabanında geçerli bir kullanıcı değil.) Kullanıcı hesabını önce veritabanına ekleyin.
SQL Server 7.0 Güvenlik modeli hakkında daha fazla bilgi için, "Microsoft SQL Server 7.0 Güvenliği" teknik incelemesine bakın. Teknik incelemeyi görüntülemek için aşağıdaki Microsoft Web sitesini ziyaret edin:
SQL Server 2000 Güvenlik modeli eki 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:
322712
(http://support.microsoft.com/kb/322712/
)
Microsoft SQL Server 2000 S322712 Güvenlik Özellikleri ve En İyi Uygulamalar (Bu bağlantı, bir kısmı veya tamamı İngilizce olan içeriğe işaret edebilir)
Sınırlamalar
- Sysusers tablosunda, nesnelerin sahibi olan bilgisayar adının veya etki alanı adının öneki olmayan kullanıcılar varsa ve bu nesnelere uygulamalarda iki bölümden oluşan kullanıcıadı.nesneadı kullanılarak başvuruluyorsa, uygulama çökebilir; çünkü sp_sidmap saklı yordamı, bu kullanıcıları sysxlogins tablosunda göründüğü biçimde bilgisayar adı veya etki alanı adı önekiyle yeniden adlandırır. Bu sorunu geçici olarak gidermek için, sp_sidmap saklı yordamı tamamlandıktan sonra, sysusers tablosundaki etkilenen kullanıcıları önceki adlarıyla yeniden adlandırın veya birincil destek sağlayıcınıza başvurun.
- Bu makalede diğer adlar dikkate alınmamıştır. Diğer adları el ile yönetmelisiniz.
- Yeni SQL Server sunucusunda standart bir SQL Server oturumu yoksa, oturumu bir NULL parolasıyla ekleyebilirsiniz. Bu oturumların parolalarını uygun biçimde değiştirmeniz gerekebilir.
- Sysxlogins tablosunda görünenden farklı bir adla user veritabanında bir kullanıcı oluşturulursa, bu kullanıcıya karşılık gelen oturumu bilmek olanaksızdır. Bu nedenle, sp_sidmap saklı yordamını çalıştırmadan önce:
- Bu kullanıcının sahibi olduğu tüm nesneleri bir hazırlama veritabanına aktarın.
- Kullanıcıyı bırakın, doğru adlı kullanıcıyı ekleyin ve sonra bu kullanıcının tüm nesnelerini geri aktarın.
- Bir kullanıcıya karşılık gelen bir oturum veya yerel bilgisayar adı ya da etki alanı öneki yoksa, bu kullanıcı için bir ileti alırsınız. Bu ileti, kullanıcıyı oturum olarak SQL Server'a ekleyebilmek için öncelikle Windows düzeyinde eklemeniz gerektiğini bildirir. Bunu yaptıktan sonra, sp_sidmap saklı yordamını yeniden çalıştırmalısınız.
- Bir kullanıcının etki alanı veya yerel Windows sunucu adı öneki varsa, ancak karşılık gelen oturum sysxlogins tablosunda yoksa, saklı yordam bunu SQL Server'a yeni bir oturum olarak eklemeye çalışır. Windows kullanıcısı yoksa, sonuç penceresinde bir çıktı iletisi oluşturur ve önce Windows kullanıcısını ekledikten sonra oturumu el ile oluşturur.
- Bir kullanıcı için sysusers tablosunda birden fazla oturum varsa, sonuçlar dosyasında aynı kullanıcı adına sahip tüm oturumların listelendiği bir çıktı iletisi görürsünüz. Bu noktada, kullanıcının tek bir oturuma karşılık geldiğinden emin olmak için el ile müdahale etmelisiniz.
ÖrnekSysusers tablosunda "cetikan" adlı bir kullanıcı, sysxlogins tablosunda ise "Test\cetikan" ve "Test2\cetikan" gibi adlarla oturumlar varsa, saklı yordamı çalıştırdığınızda, kullanıcılardan birinin birden fazla oturumu olduğunu ve Sistem Yöneticisinin birisini seçmesi gerektiğini bildiren bir ileti alırsınız. Bu, ikinci saklı yordam olan ve bu makalede sunulan sp_prefix_sysusersname'i çalıştırmanız gereken tek zamandır. Ayrıca, bu durum Readme.txt dosyasında ayrıntılı olarak anlatılmaktadır.
Standart ve tümleşik oturum açmayı eşleştirme
Bir veritabanı SQL Server çalıştıran bir sunucudan yine SQL Server çalıştıran bir başka sunucuya taşındıktan sonra, kullanıcının olabildiğince az düzeyde araya girmesi için aşağıdaki adımları tamamlayın:
- Veritabanının sysusers tablosundaki her kullanıcı için, master veritabanındaki sysxlogins tablosunda bir oturum olduğundan emin olun.
Not Standart bir SQL Server oturumu eklemek için, SQL Server Books Online'da "sp_addlogin" konusuna bakın. Tümleşik bir SQL Server oturumu eklemek için, SQL Server Books Online'da (SQL Server Çevrimiçi Kitaplar) "sp_grantlogin" konusuna bakın.
- MapSids.exe dosyasını karşıdan yükleyin, sonra da Sp_sidmap.sql ve Readme.txt dosyalarını ayıklayın.
- SQL Server çalıştırılan sunucuda sistem yöneticisi olarak oturum açın ve sonra kullanıcı veritabanında Sp_sidmap.sql dosyasını çalıştırın. Sp_sidmap.sql dosyasını çalıştırmak, sp_sidmap ve sp_prefix_sysusersname saklı yordamlarını oluşturur.
- Veritabanına, saklı yordamları çalıştıranın dışında başka bir kullanıcının erişmediğinden emin olun.
- Query Analyzer'ın sonuçları ızgara biçiminde değil, metin biçiminde görüntülediğinden emin olun. Bunu yapmak için, CTRL^T tuşlarına basın veya Query'yi (Sorgu) ve sonra Results in Text'i (Sonuçlar Metin Olarak) tıklatın. Bu, sonuçları ve bilgilendirici iletileri tek bir pencerede görüntüleyebilmeniz ve çıktıyı bir metin dosyasına kaydedebilmeniz için oldukça önemlidir. Eşleştirmelerin bazılarını çözümleyebilmeniz için bu dosyaya daha sonra gereksinim duyabilirsiniz.
- Parametrelerin düzgün aktarılıp aktarılmadığını doğrulayamayacağınız için, bunları sp_sidmap saklı yordamına doğru aktardığınızdan emin olun:
Eski ve yeni etki alanı adları değerlerinin yanı sıra sunucu adlarını da uygun biçimde değiştirin.
EXEC sp_SidMap @old_domain = eski_etkialanı_adı,
@new_domain = yeni_etkialanı_adı,
@old_server = eski_sunucu_adı,
@new_server = yeni_sunucu_adı
- Sonuçları bir dosyaya kaydedin ve Readme.txt dosyasında sunulan yönergeleri izleyin.
Not Bu saklı yordamları çalıştırdığınızda, veritabanını yalnızca sysusers tablosu değiştirir. Başladığınız duruma geri dönmek için, veritabanını yedeklemesinden geri yükleyin veya yeniden bağlayın.
Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
274188
(http://support.microsoft.com/kb/274188/
)
SORUN: Çevrimiçi Kitaplar'daki "Artık Kullanıcı Sorunlarını Giderme" Konusu Tamamlanmamış
246133
(http://support.microsoft.com/kb/246133/
)
SQL Server örnekleri arasında oturum ve parolalar nasıl aktarılır (Bu bağlantı, bir kısmı veya tamamı İngilizce olan içeriğe işaret edebilir)
168001
(http://support.microsoft.com/kb/168001/
)
Bellek dökümü geri yüklendikten sonra kullanıcı oturum açma ve/veya izin hataları (Bu bağlantı, bir kısmı veya tamamı İngilizce olan içeriğe işaret edebilir)
298897
(http://support.microsoft.com/kb/298897/
)
ÖRNEK: Mapsids.exe dosyası User ve Master veritabanları arasında SID eşleştirmelerine yardımcı olur (Bu bağlantı, bir kısmı veya tamamı İngilizce olan içeriğe işaret edebilir)
Makale numarası: 240872 - Son Gözden Geçirme: 15 Şubat 2011 Salı - Gözden geçirme: 7.4
|kbsqlmanagementtools kbhowtomaster KB240872|