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