sp_migrate_user_to_contained (Transact-SQL)

適用於:SQL Server

將對應至SQL Server登入的資料庫使用者,轉換為具有密碼的自主資料庫使用者。 在自主資料庫中,使用此程式來移除安裝資料庫之SQL Server實例的相依性。 sp_migrate_user_to_contained會將使用者與原始SQL Server登入分開,以便針對自主資料庫個別管理密碼和預設語言等設定。 sp_migrate_user_to_contained可以在將自主資料庫移至 SQL Server Database Engine 的不同實例之前使用,以消除目前SQL Server實例登入的相依性。

注意

使用 sp_migrate_user_to_contained時請小心,因為您將無法反轉效果。 此程式只用于自主資料庫中。 如需相關資訊,請參閱 自主資料庫

語法

  
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' }   

引數

[@username = ] N'user'
目前自主資料庫中對應至 SQL Server 已驗證登入的使用者名稱。 值為 sysname,預設值為 Null

[@rename = ]N'copy_login_name' | N'keep_name'
當以登入為基礎的資料庫使用者具有與登入名稱不同的使用者名稱時,請使用 keep_name 在移轉期間保留資料庫使用者名稱。 使用 copy_login_name 來建立具有登入名稱的新自主資料庫使用者,而不是使用者。 依據登入的資料庫使用者與登入名稱有相同的使用者名稱時,這兩個選項會在不變更名稱的情況下建立自主資料庫使用者。

[@disablelogin = ]N'disable_login' | N'do_not_disable_login'
disable_login 會停用 master 資料庫中的登入。 若要在停用登入時連接,連接必須提供自主資料庫名稱做為連接字串 一部分的初始目錄

傳回碼值

0 (成功) 或 1 (失敗)

備註

sp_migrate_user_to_contained 會使用密碼建立自主資料庫使用者,而不論登入的屬性或許可權為何。 例如,如果停用登入,或使用者遭到拒絕資料庫的 CONNECT 許可權,程式可能會成功。

sp_migrate_user_to_contained 具有下列限制。

  • 使用者名稱不能已存在於資料庫中。

  • 無法轉換內建使用者,例如 dbo 和 guest。

  • 無法在已簽署預存程式的 EXECUTE AS 子句中指定使用者。

  • 使用者無法擁有包含 EXECUTE AS OWNER 子句的預存程式。

  • sp_migrate_user_to_contained 不能用在系統資料庫中。

安全性

移轉使用者時,請小心不要停用或刪除SQL Server實例中的所有系統管理員登入。 如果刪除所有登入,請參閱在系統管理員鎖定時連線到SQL Server

如果 存在 BUILTIN\Administrators 登入,系統管理員可以使用 [ 以系統管理員身分執行 ] 選項啟動其應用程式來連線。

權限

需要 CONTROL SERVER 權限。

範例

A. 移轉單一使用者

下列範例會將名為 Barry 的SQL Server登入移轉至具有密碼的自主資料庫使用者。 此範例不會變更使用者名稱,並保留啟用的登入。

sp_migrate_user_to_contained   
@username = N'Barry',  
@rename = N'keep_name',  
@disablelogin = N'do_not_disable_login' ;  
  

B. 將所有具有登入的資料庫使用者移轉為沒有登入的自主資料庫使用者

下列範例會將以 SQL Server 登入為基礎的所有使用者移轉至具有密碼之自主資料庫使用者。 此範例會排除未啟用的登入。 您必須在自主資料庫中執行此範例。

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 ;  

另請參閱

移轉至部分自主資料庫
自主資料庫