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 '使用者'
目前自主資料庫中對應至 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 ;  

另請參閱

Migrate to a Partially Contained Database
自主資料庫