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 資料庫引擎 的不同實例之前使用,以消除目前 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 實例中的所有系統管理員登入。 如果刪除所有登入,請參閱當系統 管理員 istrators 鎖定時,連線 SQL Server。

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

權限

需要 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 ;  

另請參閱

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