Di SQL Server, bagaimana cara membuat login untuk pengguna yang sudah ada?

17

Saya memulihkan database dari satu contoh SQL Server ke contoh SQL Server yang berbeda. Basis data allready memiliki pengguna ditambahkan ke dalamnya. Tetapi mereka tidak memiliki Login untuk contoh SQL Server baru.

Saya tahu cara membuat login baru untuk pengguna baru, tetapi bagaimana cara membuat Login untuk pengguna yang ada?

epotter
sumber

Jawaban:

9

Masalahnya adalah bahwa mengembalikan membawa kembali pengguna db dari contoh server asli tetapi contoh baru biasanya tidak tahu apa-apa tentang login pengguna tersebut. Anda akan melihat mereka di bawah Keamanan di tingkat db, tetapi mereka tidak memiliki login tingkat server yang sesuai.

Anda harus memasang kembali pengguna database dengan login server pada contoh di mana Anda memulihkan database.

Ada beberapa cara untuk melakukannya:

  1. Buat login baru untuk mereka di instance baru. Anda kemudian harus menghapus mereka sebagai pengguna database pada instance baru dan menambahkan login baru mereka. Ini tampak aneh mengingat bahwa Anda dapat membuat nama login yang sama, tetapi SID (pengidentifikasi keamanan) akan berbeda dan itulah yang digunakan SQL untuk identifikasi pengguna. Ini cukup mudah untuk satu atau dua login.

  2. Jika Anda ingin mempertahankan pengguna yang sama, menjaga SID yang sama, di seluruh instance kemudian gunakan prosedur tersimpan sp_help_revlogin . Salin kode dari tautan yang akan membuat prosedur tersimpan yang diperlukan dan jalankan di server tempat Anda ingin menyalin pengguna. Ini akan menghasilkan skrip SQL yang dapat Anda jalankan di server target Anda untuk membuat pengguna yang sama membawa SID, kata sandi, semuanya. Ini adalah cara yang harus ditempuh jika Anda memiliki banyak pengguna basis data yang perlu Anda sambungkan kembali pada instance target atau jika Anda tidak tahu kata sandi untuk satu atau lebih SQL Login pada instance sumber.

squillman
sumber
10

Saya selalu menjalankan perintah sp_change_users_login dengan tindakan 'Update_One' untuk menautkan kembali pengguna database dengan login server:

sp_change_users_login 'Update_One', 'database user', 'server login'

Aaron Daniels
sumber
Keren Saya menggunakan ini: EXEC sp_change_users_login 'Auto_Fix', 'User', NULL, 'password';sebagai gantinya. :)
user2173353
Bukankah ini hanya mungkin dilakukan jika Anda memiliki pengguna basis data dan server masuk tetapi tautan di antara mereka terputus?
wenzzzel
2

Inilah yang saya temukan.

Seperti squillman yang dikeluarkan, para pengguna dapat disalin dengan database, tetapi login tidak. Ada procdure toko bernama sp_change_users_login yang dapat Anda gunakan untuk menyelesaikan masalah. Langkah-langkah untuk melakukannya dirinci dalam aritcle ini . Rincian penggunaan procdure toko dapat ditemukan di halaman ini .

epotter
sumber
2

Pada SQL Server 2012, ada perintah T-SQL untuk menetapkan pengguna yang sudah ada ke login baru. Buat login, tetapi jangan mencoba melakukan Pemetaan Pengguna (itu akan gagal). Kemudian jalankan:

use <existing_database>;
alter user <existing_database_user> with login = <newly_created_login>;

Ini akan memetakan login yang ada ke pengguna baru. Dokumentasi SQL di sini: https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-user-transact-sql?view=sql-server-2017

erict
sumber