SQL Server 2008 R2 hatası: 15023, kullanıcı, grup veya rol zaten var


16

İzin sorunları yaşadığım bir test veritabanı var.
Raporlama veritabanına erişemiyorum ve uygulamanın yardım belgeleri aşağıdakileri yaptığını söylüyor:

Resolution: 

1. Launch the SQL Server Management Studio and connect to the database server(s) hosting   the Vision and Reporting Server databases. 
2. Expand the security folder. 
3. Select logins and right click on the <username> user and choose properties. 
4. Click the User Mapping tab 
5.Make sure the following databases are selected in the Users mapped to this Login:

    ReportServer
    ReportServerTempDB
    Your Vision databases
    This maps the login/user to the respective databases.
6. As you select each database (including your Vision database), select the db_owner role in the Database role membership for: section. You must select this option for each database.

Bunu yaptığımda, aşağıdaki hatayı alıyorum:

"Create failed for user '<servername>\<username>'.  User, group, or role '<servername>\<username>' already exists in the current database. (Microsoft SQL Server, Error: 15023)"

Bu hatayı googled ve her veritabanında aşağıdaki komutu denedim:

 ALTER USER [<username>] WITH LOGIN = [<username>] 

İleti, komutların başarıyla tamamlandığını ancak yukarıda belirtildiği gibi her veritabanını eşleştirmeye çalıştığımda hala yukarıdaki hatayı alıyorum.

Neyi kaçırıyorum?

Kin yorum (teşekkürler) Bunu denedim: - Kullanıcıyı sağ tıklayıp seçtim: Script Login As> Bırak ve Oluştur> Yeni sorgu penceresi. - Elde edilen sorguyu çalıştırdı ve diğer iki veritabanını ve db_owner'ı tekrar seçerek kullanıcı rollerini eşlemeye çalıştım ama yine de yukarıdaki gibi aynı hata mesajını alıyorum.

Düşünceler ??

Yanıtlar:


12

Deneyebileceğiniz birkaç şey vardır ve her birinin başarısı muhtemelen sahip olduğunuz sunucu rolüne bağlı olacaktır.

Yeni başlayanlar için, sadece bir veya iki kullanıcı ise dürüst olmak gerekirse, en kolay yol, veritabanı kullanıcısını geri yüklenen veritabanından bırakmak ve zaten var olan bir sunucu girişi olması koşuluyla, veritabanı kullanıcısını SSMS kullanarak sunucu girişine yeniden eşlemektir. Sunucu girişi yoksa, sadece oluşturun, kullanıcıyı eşleyin ve presto! Uzaklara Gidelim.

Sonraki seçenek: Çok sayıda kullanıcıyı taşıyorsanız, sp_help_revlogin kullanın. sp_help_revlogin, parolalar ve SID'ler de dahil olmak üzere girişleri bir sunucudan diğerine geçirmeye yardımcı olacak Microsoft tarafından sağlanan bir saklı yordamdır. İşte bununla ilgili güzel bir makale SP_HELP_REVLOGIN


Bkz. Support.microsoft.com/en-us/kb/918992 SQL Server örnekleri arasında oturum açma bilgileri ve parolalar nasıl aktarılır
James Jenkins

3

Bu sorunları gidermek için geliştirici ortamımda Auto_Fix ile kullanıyorum sp_change_users_login(Hata 15023). Güvenliğe duyarlı durumlarda Auto_Fix kullanmaktan kaçının.

Otomatik Düzelt: Geçerli veritabanındaki sys.database_principals sistem kataloğu görünümündeki bir kullanıcı girişini, aynı addaki bir SQL Server oturumuna bağlar. Aynı ada sahip bir giriş mevcut değilse, bir giriş oluşturulur. Doğru bağlantının yapıldığını doğrulamak için Auto_Fix deyiminin sonucunu inceleyin. Güvenliğe duyarlı durumlarda Auto_Fix kullanmaktan kaçının.

sp_change_users_login 'AUTO_FIX', 'myuser'

Ayrıca, bu özelliğin Microsoft SQL Server'ın gelecekteki bir sürümünde kaldırılabileceğini unutmayın.

Diğer referanslar:

  1. SQL Server 2008 kullanıcısı, grubu veya rolü geçerli veritabanında zaten var
  2. Düzeltme: Hata 15023: Kullanıcı zaten geçerli veritabanlarında var
  3. SQL bir girişi mevcut bir kullanıcıya eşler

0
ALTER USER [<username>] WITH LOGIN=[<username>]

Doğru yaklaşımdır.

Aksi takdirde şu adrese gidin:

Güvenlik> Girişler> (kullanıcı adınız)> Özellikler> Kullanıcı Eşleme

resim açıklamasını buraya girin

ve bu kullanıcıyı istediğiniz veritabanına yeniden eşler.

Yetimleri kontrol etmek için veritabanınızın bağlamında aşağıdaki sorguyu kullanabilirsiniz:

select
    dp.name [user_name]
    ,dp.type_desc [user_type]
    ,isnull(sp.name,'Orhphaned!') [login_name]
    ,sp.type_desc [login_type]
from   
    sys.database_principals dp
    left join sys.server_principals sp on (dp.sid = sp.sid)
where
    dp.type in ('S','U','G')
    and dp.principal_id >4
order by sp.name

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.