如果要为一个数据库创建一个独立的账号需要这个数据库为包含数据库
- 当前(非包含)的数据库所面临的问题
在描述什么是包含数据库之前,先了解一下为什么会出现包含数据库。当前的数据库有一些问题,如下:
1、在数据库迁移或部署的过程中一些信息会丢失
当我们将数据库从一个SQL Server实例迁移到另一个实例是,诸如登陆、工作代理等信息将不能一起被迁移。因为这些信息有特殊用途,自创建后就常驻SQL Server实例。在新的SQL Server实例上重新创建这些任务将是一个耗时、易出错的过程。
2、从应用开发转向部署
在Server上部署应用时或许会遇到一些障碍,因为很有可能环境不匹配。例如,创建login时可能没权限,命令行实用工具(如“xp_cmdshell”)或许是禁用的,应用里用到的数据库排序规则或许和Server初始指定的(也可能是默认的)排序规则不同。
3、应用管理的安全考量
管理和维护单个数据库比较困难,因为login、job agent等信息是跨数据库实例访问的,因此,允许用户对整个实例授权将引起对其他数据库的不必要访问,进而导致安全隐患。 - 什么是包含的数据库
义如其名,它是一种自我包含的数据库。例如,它自带所有创建数据库时所需要的数据库设置及元数据信息。它独立于SQL Server实例,没有外部依赖关系,自带授权用户的自我包含机制。由于它独立于数据库实例,就使得在部署到不同服务器时数据库的排序规则不再是一个问题。
一个包含的数据库,保留了所有数据库里必要信息和对象,如表、函数、限制、架构、类型等。它也存有所有数据库里的应用级对象,如登陆、代理作业、系统设置、链接服务器信息等。
这种数据库带给我们的好处是,可以轻松地从一台Server搬移到另一台,并且不需要做任何额外配置就可以立即使用它,因为他们没有任何外部的依赖。
创建包含数据库
方法1: 使用 Management Studio 启用包含的数据库
1.在对象资源管理器中,右击服务器名称,然后单击“属性”
2.在“高级”页面上的“包含”部分中,将“启用包含的数据库”选项设置为“True”(默认为“False”)
3.单击“确定”。
方法2: 使用T-SQL启用包含的数据库
--Enabled Advanced options sp_configure 'show advanced', 1; RECONFIGURE WITH OVERRIDE; go --Enabled Database Containment sp_configure 'contained database authentication', 1; RECONFIGURE WITH OVERRIDE; go
将一个非包含数据库转为包含数据库
1、右击该数据库并单击其属性
2. 在“选项”一栏,将包含类型选择为“部分”,最后单击“确认”。
这种方法有时候无法完成转换,那么可以试试使用sql来进行转换
USE [master] GO ALTER DATABASE TestNonContainedDB SET CONTAINMENT = PARTIAL GO
将数据库转为包含数据库后才可以创建账户和密码
USE DBName GO CREATE USER [username] WITH PASSWORD=N'password', DEFAULT_SCHEMA=[dbo] GO
创建完毕后就可以使用这个账户链接数据库了,而且当迁移数据库后这个账户也会被跟着迁移走
引文:https://blog.csdn.net/burgess_liu/article/details/7477470