欢迎来到HELLO素材网! 南京网站制作选择顺炫科技
丰富的DIV CSS模版、JS,jQuery特效免费提供下载
当前位置:主页 > 建站教程 > 服务器教程 >

SQL Server 2012新功能:数据库身份验证

发表于2017-11-24 14:38| 次阅读| 来源网络整理| 作者session

摘要:将您的数据从一个SQL Server实例移动到另一个实例,并不是一个少见的需求,可能是为了数据迁移,也可能是为了故障

【IT168 专稿】将您的数据从一个SQL Server实例移动到另一个实例,并不是一个少见的需求,可能是为了数据迁移,也可能是为了故障转移。问题是,有时需要些驻留在数据库外的数据,所以需要更多的开销而不仅仅是移动数据到一个新的实例;这意味着需要移动/恢复外部数据(比如登录数据等)到你的一个实例。听起来并不困难,但必须强调这是非常繁琐的并且出现任何失误哪怕是一个对象(存储于数据库外部的对象)都会影响你的应用按照预期执行。

  SQL Server 2012(名称叫Denali)有一个叫做Contained Database Authentication的新功能,解决了上述问题并且为数据库管理者和应用程序开发者提供便利。

  Contained Database Authentication(包含的数据库身份验证)

  SQL Server 2012引入了一个叫做Contained Database Authentication的新功能,这个功能允许数据库部分包含存储在外部的数据。换句话说,一旦你在SQL Server实例级启用此功能,你能够建立一个用于存放用户信息和资格的数据库(而不是在主数据库中获取注册信息),所以当数据库迁移时不需要在目标实例上创建注册信息(做SID的映射)。令人欣慰。

  除了上述好处,contained database提供了一个更好的功能。当你的服务排序规则和数据库不同时,临时对象将被contained database使用的而不是从服务器引出的排序规则所建立。之前必须使用COLLATE,现在这不是必须的了。

  请注意:

  ·这适用于那些访问数据库但是在实例级不做任何系统管理的用户。

  ·部分包含的数据库无法使用诸如复制,数据变更捕获或变更跟踪等功能。

  ·部分包含的数据库中创建的用户对于主数据库和临时数据库有guest权限。

  ·此功能用于AlwaysOn以便更便于用户数据迁移。

  ·现在已有足够的理论,让我们围绕这一新功能做一些实际的应用。

  开始Contained Database Authentication实例

  SQL Server实例默认情况下不启用Contained Database Authentication。首先,你需要启用它,然后就可以创建with containment的数据库或是可以验证用户的数据库。有两种方法来启用此功能(不是使用PowerShell命令)。

  第一种方法,使用sp_configure系统存储过程开启,脚本如下:

USE master
GO
sp_configure
'show   advanced options', 1
GO
RECONFIGURE
GO
sp_configure
'CONTAINED   DATABASE AUTHENTICATION', 1
GO
RECONFIGURE
GO
sp_configure
'show   advanced options', 0
GO
RECONFIGURE
GO


▲图1-使用脚本配置contained database authentication

  第二种方法,使用SSMS向导(SQL Server Management Studio)。连接到想开启此功能的SQL Server实例上,在对象资源管理器中右击实例名称,单击“属性”菜单,单击如下所显示的“高级”页面,最后设置“Enable Contained Databases”的值为True,其默认值为False:

SQL Server 2012新功能:数据库身份验证


▲图2-使用向导配置contained database authentication

  一旦在实例级中启用此功能,你可以在在CREATE DATABASE命令中使用CONTAINMENT = PARTIAL从句创建数据库,命令如下所示。如果没有指定,CONTAINMENT = NONE为默认值。

USE master
GO
--Contained Database   Authentication
CREATEDATABASE   [CDA]
CONTAINMENT
= PARTIAL
ON    PRIMARY
(
       NAME  
= N'CDA',
       FILENAME  
= N'C:\Program   Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\CDA.mdf' ,
       SIZE  
= 4096KB ,
       FILEGROWTH  
= 1024KB )
LOG   ON
(
       NAME  
= N'CDA_log',
       FILENAME  
= N'C:\Program Files\Microsoft   SQL Server\MSSQL11.SQL2012\MSSQL\DATA\CDA_log.ldf' ,
       SIZE  
= 1024KB ,
       FILEGROWTH  
=10%)
GO
USE[CDA]
GO
IFNOT   EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1AND name = N'PRIMARY')
      
ALTER   DATABASE[CDA]   MODIFY FILEGROUP   [PRIMARY]DEFAULT
GO