sp_migrate_user_to_contained (T-SQL)
Berlaku untuk:SQL Server
Mengonversi pengguna database yang dipetakan ke login SQL Server, ke pengguna database mandiri dengan kata sandi. Dalam database mandiri, gunakan prosedur ini untuk menghapus dependensi pada instans SQL Server tempat database diinstal. sp_migrate_user_to_contained memisahkan pengguna dari login SQL Server asli, sehingga pengaturan seperti kata sandi dan bahasa default dapat dikelola secara terpisah untuk database mandiri. sp_migrate_user_to_contained dapat digunakan sebelum memindahkan database mandiri ke instans SQL Server Database Engine yang berbeda untuk menghilangkan dependensi pada login instans SQL Server saat ini.
Catatan
Berhati-hatilah saat menggunakan sp_migrate_user_to_contained, karena Anda tidak akan dapat membalikkan efeknya. Prosedur ini hanya digunakan dalam database mandiri. Untuk informasi selengkapnya, lihat Database Mandiri.
Sintaks
sp_migrate_user_to_contained [ @username = ] N'user' ,
[ @rename = ] { N'copy_login_name' | N'keep_name' } ,
[ @disablelogin = ] { N'disable_login' | N'do_not_disable_login' }
Argumen
[@username = ] N'user'
Nama pengguna dalam database mandiri saat ini yang dipetakan ke SQL Server login terautentikasi. Nilainya adalah sysname, dengan default NULL.
[@rename = ] N'copy_login_name' | N'keep_name'
Saat pengguna database berdasarkan login memiliki nama pengguna yang berbeda dari nama login, gunakan keep_name untuk mempertahankan nama pengguna database selama migrasi. Gunakan copy_login_name untuk membuat pengguna database mandiri baru dengan nama login, bukan pengguna. Ketika pengguna database berdasarkan login memiliki nama pengguna yang sama dengan nama login, kedua opsi membuat pengguna database mandiri tanpa mengubah nama.
[@disablelogin = ] N'disable_login' | N'do_not_disable_login'
disable_login menonaktifkan login di database master. Untuk menyambungkan saat login dinonaktifkan, koneksi harus memberikan nama database yang terkandung sebagai katalog awal sebagai bagian dari string koneksi.
Mengembalikan Nilai Kode
0 (keberhasilan) atau 1 (kegagalan)
Keterangan
sp_migrate_user_to_contained membuat pengguna database mandiri dengan kata sandi, terlepas dari properti atau izin masuk. Misalnya, prosedur dapat berhasil jika login dinonaktifkan atau jika pengguna ditolak izin CONNECT ke database.
sp_migrate_user_to_contained memiliki batasan berikut.
Nama pengguna belum bisa ada dalam database.
Pengguna bawaan, misalnya dbo dan tamu, tidak dapat dikonversi.
Pengguna tidak dapat ditentukan dalam klausa EXECUTE AS dari prosedur tersimpan yang ditandatangani.
Pengguna tidak dapat memiliki prosedur tersimpan yang menyertakan klausa EXECUTE AS OWNER .
sp_migrate_user_to_contained tidak dapat digunakan dalam database sistem.
Keamanan
Saat memigrasikan pengguna, berhati-hatilah untuk tidak menonaktifkan atau menghapus semua login administrator dari instans SQL Server. Jika semua login dihapus, lihat Menyambungkan ke SQL Server Saat Administrator Sistem Dikunci.
Jika login BUILTIN\Administrators ada, administrator dapat terhubung dengan memulai aplikasi mereka menggunakan opsi Jalankan sebagai Administrator .
Izin
Memerlukan izin SERVER KONTROL .
Contoh
A. Memigrasikan satu pengguna
Contoh berikut memigrasikan login SQL Server bernama Barry
, ke pengguna database mandiri dengan kata sandi. Contohnya tidak mengubah nama pengguna, dan mempertahankan login sebagai diaktifkan.
sp_migrate_user_to_contained
@username = N'Barry',
@rename = N'keep_name',
@disablelogin = N'do_not_disable_login' ;
B. Memigrasikan semua pengguna database dengan login ke pengguna database mandiri tanpa login
Contoh berikut memigrasikan semua pengguna yang didasarkan pada login SQL Server ke pengguna database mandiri dengan kata sandi. Contoh mengecualikan login yang tidak diaktifkan. Contoh harus dijalankan dalam database yang terkandung.
DECLARE @username sysname ;
DECLARE user_cursor CURSOR
FOR
SELECT dp.name
FROM sys.database_principals AS dp
JOIN sys.server_principals AS sp
ON dp.sid = sp.sid
WHERE dp.authentication_type = 1 AND sp.is_disabled = 0;
OPEN user_cursor
FETCH NEXT FROM user_cursor INTO @username
WHILE @@FETCH_STATUS = 0
BEGIN
EXECUTE sp_migrate_user_to_contained
@username = @username,
@rename = N'keep_name',
@disablelogin = N'disable_login';
FETCH NEXT FROM user_cursor INTO @username
END
CLOSE user_cursor ;
DEALLOCATE user_cursor ;
Lihat juga
Bermigrasi ke Database yang Terkandung Sebagian
Database Mandiri