迁移到部分包含的数据库

适用于: SQL Server

本主题讨论要更改为部分包含的数据库模型的准备工作,接着提供了迁移步骤。

本主题内容:

准备迁移数据库

在考虑将数据库迁移到部分包含的数据库模型时,请复查以下各项。

启用包含的数据库

必须先在 SQL Server 数据库引擎的实例上启用包含的数据库,然后才能创建包含的数据库。

使用 Transact-SQL 启用包含的数据库

下面的示例对 SQL Server 数据库引擎的实例启用包含的数据库。

sp_configure 'contained database authentication', 1;  
GO  
RECONFIGURE ;  
GO  

使用 Management Studio 启用包含的数据库

下面的示例对 SQL Server 数据库引擎的实例启用包含的数据库。

  1. 在对象资源管理器中,右键单击服务器名称,然后单击“属性”

  2. “高级” 页面上的 “包含” 部分中,将 “启用包含的数据库” 选项设置为 “True”

  3. 选择“确定”

将数据库转换为部分包含的数据库

通过更改 CONTAINMENT 选项可以将数据库转换为包含的数据库。

使用 Transact-SQL 将数据库转换为部分包含的数据库

下面的示例将名为 Accounting 的数据库转换为部分包含的数据库。

USE [master]  
GO  
ALTER DATABASE [Accounting] SET CONTAINMENT = PARTIAL  
GO  

使用 Management Studio 将数据库转换为部分包含的数据库

下面的示例将数据库转换为部分包含的数据库。

  1. 在对象资源管理器中,展开“数据库”,右键单击要转换的数据库,然后单击“属性”

  2. “选项” 页面上,将 “包含类型” 选项更改为 “部分”

  3. 选择“确定”

将用户迁移为包含的数据库用户

以下示例将所有基于 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 ;  

另请参阅

包含的数据库
sp_migrate_user_to_contained (Transact-SQL)
sys.dm_db_uncontained_entities (Transact-SQL)