Kesalahan SQL Server 2008 R2: 15023, pengguna, grup, atau peran sudah ada

16

Saya memiliki database pengujian yang mengalami masalah izin.
Saya tidak dapat mengakses database pelaporan, dan dokumentasi bantuan aplikasi mengatakan untuk melakukan hal berikut:

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.

Ketika saya melakukan ini, saya mendapatkan kesalahan berikut:

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

Saya telah mencari kesalahan ini di Google dan mencoba perintah berikut pada setiap basis data:

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

Pesan menunjukkan bahwa perintah selesai dengan sukses tetapi saya masih mendapatkan kesalahan di atas ketika saya mencoba memetakan setiap basis data seperti yang diperintahkan di atas.

Apa yang saya lewatkan?

Per Kin komentar (terima kasih) saya mencoba ini: - Saya mengklik kanan pengguna dan memilih: Script Login As> Drop and Create To> Jendela permintaan baru. - Saya menjalankan kueri yang dihasilkan dan mencoba memetakan peran pengguna dengan memilih dua database dan db_owner lainnya lagi tetapi saya masih mendapatkan pesan kesalahan yang sama seperti di atas.

Pikiran??

brl8
sumber

Jawaban:

12

Ada beberapa hal yang dapat Anda coba, dan keberhasilan masing-masing mungkin akan tergantung pada peran server yang Anda miliki.

Sebagai permulaan, jika hanya satu atau dua pengguna maka jujur, cara termudah adalah dengan menjatuhkan pengguna database dari database yang dipulihkan, dan menyediakan sudah ada login server yang sudah ada, remap pengguna database ke login server menggunakan SSMS. Jika login server tidak ada maka buat saja, petakan pengguna, dan presto! Kita pergi.

Opsi berikutnya: Jika Anda memigrasikan sejumlah besar pengguna, gunakan sp_help_revlogin. sp_help_revlogin adalah prosedur tersimpan yang disediakan oleh Microsoft yang akan membantu memindahkan migrasi dari satu server ke server lain, termasuk kata sandi dan SID. Ini adalah artikel bagus tentangnya SP_HELP_REVLOGIN

Cougar9000
sumber
Lihat support.microsoft.com/en-us/kb/918992 Cara mentransfer login dan kata sandi antara contoh SQL Server
James Jenkins
3

Saya menggunakan Auto_Fix dengan sp_change_users_logindi lingkungan dev saya untuk memperbaiki masalah seperti itu (Kesalahan 15023). Hindari menggunakan Auto_Fix dalam situasi sensitif-keamanan.

Auto_Fix: Menautkan entri pengguna di tampilan katalog sistem sys.database_principals dalam database saat ini ke login SQL Server dengan nama yang sama. Jika login dengan nama yang sama tidak ada, satu akan dibuat. Periksa hasil dari pernyataan Auto_Fix untuk mengonfirmasi bahwa tautan yang benar sebenarnya dibuat. Hindari menggunakan Auto_Fix dalam situasi sensitif-keamanan.

sp_change_users_login 'AUTO_FIX', 'myuser'

Juga, perhatikan bahwa fitur ini dapat dihapus dalam versi Microsoft SQL Server di masa depan.

Referensi Lainnya:

  1. Pengguna, grup, atau peran SQL Server 2008 sudah ada di database saat ini
  2. FIX: Kesalahan 15023: Pengguna sudah ada di database saat ini
  3. SQL memetakan login ke pengguna yang ada
LCJ
sumber
0
ALTER USER [<username>] WITH LOGIN=[<username>]

Apakah pendekatan yang tepat.

Jika tidak, buka:

Keamanan> Login> (nama pengguna Anda)> Properti> Pemetaan Pengguna

masukkan deskripsi gambar di sini

dan remap pengguna itu ke database yang Anda inginkan.

Anda dapat menggunakan kueri berikut dalam konteks basis data Anda untuk memeriksa anak yatim:

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
Francesco Mantovani
sumber
-4

buka database master dan hapus pengguna

pengguna84866
sumber