迁移到部分包含的数据库

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

本主题内容:

  • 准备迁移数据库

  • 启用部分包含的数据库

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

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

准备迁移数据库

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

  • 您应该了解部分包含的数据库模型。 有关详细信息,请参阅包含数据库

  • 您应该了解部分包含的数据库所独有的风险。 有关详细信息,请参阅针对包含数据库的安全性最佳方法

  • 包含的数据库不支持复制、变更数据结构或更改跟踪。 确认数据库没有使用这些功能。

  • 复查为了部分包含的数据库而修改的数据库功能的列表。 有关详细信息,请参阅经过修改的功能(包含数据库)

  • sys.dm_db_uncontained_entities (Transact-SQL) 进行查询,以查找数据库中非包含的对象或功能。 有关详细信息,请参阅相关内容。

  • 监视 database_uncontained_usage XEvent 以了解何时使用非包含的功能。

启用包含的数据库

必须先在 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)

概念

包含数据库