Kullanıcı İzinleri Yedekleme Sonrası Dağıldı -> Geri Yükleme İşlemi


11

Hepsini (.bak dosyalarına) yedekledim, bu dosyaları yeni kutuya kopyaladım ve geri yükledim (hepsi SQL Management Studio kullanılarak yapıldı) için birkaç SQL Server 2008 veritabanını yeni db sunucumuza taşımak zorunda kaldım.

Her şey yolunda gitti ama şimdi eski RDBMS üzerinde çalışmaya devam eden SQL Server hesabını kullanarak veritabanlarından herhangi birine giriş yapamıyorum. Windows kimlik doğrulamalı girişim hala tesadüfen iyi çalışıyor.

Kullanıcıların ve izinlerin sorunsuz bir şekilde yeni veritabanı sunucusuna çoğaltılacağı bu fikri vardı ama bir yerde bir şeyler ters gitti gibi görünüyor. Yorum / öneri / yardım tekliflerini takdir ediyorum ;-)

Yanıtlar:


7

Sorununuza zaten bir çözüm bulduğunuzu görüyorum, orijinal sorunuzda fark ettiğim bir şey, eski sunucuya hala erişiminiz olmasıydı.

SO ile ilgili aşağıdaki sorunun benzer bir sorunu vardı ve kullanıcı izinlerini oluşturmak için bir komut dosyası içeren bir Microsoft makalesine bağlantılar içerir.

/programming/461385/restoring-a-backup-to-a-different-server-user-permissions

(Bu soru için listelenen kaynak http://support.microsoft.com/kb/918992 )

Sunucu ayarını Windows kimlik doğrulamasından Karışık mod kimlik doğrulamasına değiştirmek gibi görünüyor, ancak sorununuzu tamamen çözmediyse, bunun yararlı olabileceğini düşündüm.


Ben bu alışkanlık 'ben ilk kez kullanıcılar / izinler üzerinde SQL Server ile mücadele, böylece ben gelecek kuşak için yer imi olacak. Gönderdiğiniz için çok teşekkürler.
5arx

6

Buna "yetim kullanıcılar" denir. İşte düzeltmenin 2 yolu

  1. Yapabiliyorsanız, orijinal ana veritabanını "loginsource" olarak geri yükleyin ve sys.server_principals tüm SQL Server ve Windows oturum açmalarını oluşturmak için yeterli bilgiye sahiptir. Yani, SID'ler ve şifreli şifre

  2. Yalnızca Windows oturumlarını kullanıyorsanız, komut dosyası oluşturmak için bunu veritabanı başına çalıştırabilirsiniz

Senaryo:

SELECT
    'CREATE LOGIN [' + SUSER_SNAME(sid) + '] FROM WINDOWS'
FROM
    sys.database_principals
WHERE
    [type] IN ('G', 'U')

Yanıtınız için teşekkür ederiz - Windows hesaplarım yönetim amacıyla kullanılırken web uygulamam SQL girişlerini kullanıyor. Önerdiğiniz gibi 'loginsource' olarak geri yüklemenin bir yolunu göremiyorum - lütfen biraz ayrıntı verebilir misiniz? Ben ediyorum umuduyla bu her Managment Studio kullanarak yapılabilir?
5arx

PS. Şu dokümanı takip ettim: support.microsoft.com/kb/274188 ve tüm komut dosyalarını (görünüşte) başarıyla çalıştırdım. Ama hiçbir şey değişmedi.
5arx

5

İdeal olarak, geri yüklemeyi yapmadan önce kullanıcıları ve izinleri komut dosyası olarak yazarsınız. Bu olmadıysa, o zamandan sonra bir şeyleri düzeltmeye gitmelisiniz ve şanslar bir şey kaçırılacak, ancak o yolun yaklaşık% 90'ını alabilmelisiniz.

Belirlemeniz gereken ilk şey, yeni sunucuda aynı girişlerin olup olmadığıdır. Yoksa, oturum açma işleminin yeni sunucuda oluşturulmasının uygun olup olmadığını öğrenmelisiniz. Asla yaratılmaları gerektiğini varsaymayın, ilk etapta neden var olmadıklarının iyi bir nedeni olabilir. Daha sonra sysusers tablosunu inceleyerek bunları oluşturmaya devam edebilirsiniz.

Artık kullanıcıları aşağıdakine benzer bir şey çalıştırarak düzeltebilirsiniz:

DECLARE @username varchar(25), @loginsid varbinary(85)
DECLARE fixusers CURSOR
FOR
SELECT UserName = name 
    FROM sysusers
    WHERE issqluser = 1 
    and (sid is not null and sid <> 0x0)
    and suser_sname(sid) is null
    and name in (select name from master..syslogins)
    ORDER BY name
OPEN fixusers
FETCH NEXT FROM fixusers
INTO @username
WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC sp_change_users_login 'update_one', @username, @username

    FETCH NEXT FROM fixusers
    INTO @username
END CLOSE fixusers
DEALLOCATE fixusers 

Bu kod SQL2008 için çalışır, ancak SQL2000 için geriye dönük olarak uyumlu olacak şekilde yazılmıştır.


Senaryo için teşekkürler. Management Studio'da bunu yapmanın bir yolu olmadığını varsayabilir miyim? Ayrıca, bazı kişiler DB düzeyindeki kullanıcıları silmemi ve yeniden oluşturmamı önerir - bu önerilir mi?
5arx

Bu, girişlerin zaten var olduğunu varsayar ve sadece SID
mataches

sp_change_users_login SID'yi güncellemiyor mu? msdn.microsoft.com/tr-tr/library/ms174378.aspx
SQLRockstar

5arx - SSMS'de bunu yapmanın bir yolu yoktur. Söylediğim gibi, ideal bir durumda geri yüklemeden önce izinlerinizi yazmış olursunuz. Bu noktada ya elle yeniden yaratmanız ya da işleri kendiniz bir araya getirmeniz gerekir. Ben olsaydım, eski db'yi geri yüklerim, izinleri komut dosyası yapar, diğer sunucudan geri yüklemeyi yapar ve sonra izinlerinizi yeniden yapardım.
SQLRockstar

"Update_One: Geçerli veritabanında belirtilen kullanıcıyı varolan bir SQL Server oturum açma dosyasına bağlar. Kullanıcı ve oturum açma belirtilmelidir. Parola NULL olmalı veya belirtilmemiş olmalıdır." Yani girişlerin zaten var olduğunu varsayar.
gbn


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.