(5.1.1)引擎管理——包含数据库解决迁移造成孤立用户问题
关键字:包含数据库,部分包含数据库,迁移数据库,孤立用户解决办法
前提:2012以上才可以用
限制
部分包含数据库不允许以下功能。
-
部分包含数据库不能使用复制、更改数据捕获或更改跟踪。
-
编号过程
-
绑定到架构的对象,且依赖于可更改排序规则的内置功能
-
绑定因排序规则更改而导致的变化,包括对对象、列、符号或类型的引用。
-
复制、变更数据捕获和更改跟踪。
部分包含数据库
部分包含数据库是一种包含数据库,可允许存在跨越数据库边界的某些功能。 SQL Server 包括确定何时跨越包含边界的功能。
包含的用户
包含数据库有两种用户类型。
具有密码的包含数据库用户
具有密码的包含数据库用户由数据库进行身份验证。
Windows 主体
授权的 Windows 用户和授权的 Windows 组的成员可直接连接到数据库,而无需登录 master 数据库。 数据库信任 Windows身份验证。
查看数据库的包含状态:
database_uncontained_usage
sys.dm_db_uncontained_entities (Transact-SQL)。
好处:
(1)数据库迁移,避免孤立用户
在移动数据库时会发生的问题之一是:在数据库从一个实例移到另一个实例时,某些重要信息可能无法使用。
例如,登录信息存储在实例中,而不是存储于数据库中。
如果将非包含数据库从 SQL Server的一个实例移到另一个实例,则这些信息会留在原地。造成孤立用户问题。
(2)使用 AlwaysOn 的包含数据库用户的好处,避免孤立用户
通过创建包含用户,可使用户直接连接到包含数据库。
这在高可用性和灾难恢复方案中(例如在 AlwaysOn 解决方案中)是非常重要的功能。
如果用户是包含用户,则在故障转移时,用户无需在承载辅助副本的实例上创建登录名,就能够连接到辅助副本。 这会给用户带来直接的好处。
(3)数据库管理,可以直接在数据库操作
通过在数据库中维护数据库设置,而非在 master 数据库中进行维护,使每个数据库所有者都可以更好地控制其数据库,而不必向数据库所有者授予 sysadmin 权限。
一、如何开启并创建相关的数据库用户
1.1 修改实例配置, 用代码或界面操作
EXEC sys.sp_configure N'contained database authentication', N'1' GO RECONFIGURE WITH OVERRIDE GO
1.2 修改数据库 ( 希望变成包含数据库的DB ) 配置, 用代码或界面操作:
USE [master] GO ALTER DATABASE [test] SET CONTAINMENT = PARTIAL WITH NO_WAIT GO
1.3 为测试库创建带密码的用户, 代码或界面操作:
USE [test] GO CREATE USER [test] WITH PASSWORD=N'test' GO USE [test] GO ALTER ROLE [db_owner] ADD MEMBER [test] GO
二、如何连接?
三、如何备份后还原到其它实例上?
先备份: BACKUP DATABASE test TO DISK=N'd:\database_bak\test20171214.bak' WITH COMPRESSION,STATS=50 再还原, 注:其它实例必须也开启包含数据库配置! EXEC sys.sp_configure N'contained database authentication', N'1' GO RECONFIGURE WITH OVERRIDE GO USE [master] RESTORE DATABASE [test] FROM DISK = N'E:\database_bak\test20171214.bak' WITH FILE = 1 , MOVE N'test' TO N'D:\database\test.mdf' , MOVE N'test_log' TO N'D:\database\test_log.ldf', NOUNLOAD, STATS = 50 GO
四、还原之后, 马上可以用 1.3 创建的用户, 用步骤 (二) 的方法访问迁移到新实例上的这个包含数据库了!
参考文章:
---------------------
实操原文:CSDN -》吉普赛的歌 :https://blog.csdn.net/yenange/article/details/78803551
包含数据库概念:https://docs.microsoft.com/zh-cn/sql/relational-databases/databases/contained-databases?view=sql-server-2014