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 yang terkandung.
sp_migrate_user_to_contained
dapat digunakan sebelum memindahkan database yang terkandung ke instans mesin database SQL Server yang berbeda untuk menghilangkan dependensi pada login instans SQL Server saat ini.
Perhatian
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 Terkandung.
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'username'
Nama pengguna dalam database mandiri saat ini yang dipetakan ke login terautentikasi SQL Server. 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 yang terkandung tanpa mengubah nama.
[ @disablelogin = ] N'disable_login' | N'do_not_disable_login'
Digunakan untuk menonaktifkan login dalam master
database. Untuk menyambungkan saat login dinonaktifkan, koneksi harus menyediakan nama database yang terkandung sebagai initial catalog
bagian dari string koneksi.
Mengembalikan nilai kode
0
(berhasil) 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 CONNECT
izin ke database.
sp_migrate_user_to_contained
memiliki batasan berikut.
- Nama pengguna belum bisa ada di database.
- Pengguna bawaan, misalnya dbo dan tamu, tidak dapat dikonversi.
- Pengguna tidak dapat ditentukan dalam
EXECUTE AS
klausul prosedur tersimpan yang ditandatangani. - Pengguna tidak dapat memiliki prosedur tersimpan
EXECUTE AS OWNER
yang menyertakan klausa. 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.
BUILTIN\Administrators
Jika login ada, administrator dapat terhubung dengan memulai aplikasi mereka menggunakan opsi Jalankan sebagai Administrator.
Izin
Memerlukan CONTROL SERVER
izin.
Contoh
J. Memigrasikan satu pengguna
Contoh berikut memigrasikan login SQL Server bernama Barry
, ke pengguna database mandiri dengan kata sandi. Contoh tidak mengubah nama pengguna, dan mempertahankan login sebagai diaktifkan.
EXEC 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
INNER 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;