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 yang berbeda dari Mesin Database SQL Server 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 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'user'
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 | '
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 tidak dapat ada di database.

  • Pengguna bawaan, misalnya dbo dan tamu, tidak dapat dikonversi.

  • Pengguna tidak dapat ditentukan dalam klausul EXECUTE AS dari prosedur tersimpan yang ditandatangani.

  • Pengguna tidak dapat memiliki prosedur tersimpan yang menyertakan klausul 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 Koneksi ke SQL Server Saat Administrator Sistem Dikunci.

Jika ada login BUILTIN\Administrators, administrator dapat terhubung dengan memulai aplikasi mereka menggunakan opsi Jalankan sebagai Administrator.

Izin

Memerlukan izin SERVER KONTROL.

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.

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 masuk

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 Sebagian Berisi
Database Terkandung