SQL Server 2012 身份验证(Authentication)

在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切。但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念。这篇文章提供了基础,因此你可以对SQL Server里的安全功能充分利用,不用在面对特定威胁,不能保护你数据的功能上浪费时间。

身份验证是验证主体(需要访问SQL Server数据库的用户或进程,是声称是的人或物)的过程。主体需要唯一的身份,这样的话SQL Server可以决定主体有哪个许可。在提供安全访问数据库对象中,正确的身份验证是必须的第一步。

SQL Server支持身份验证的两个途径:Windows集成身份验证和SQL Server身份验证。你使用的途径取决于网络环境,应用程序访问数据库的类型和这些应用程序的用户类型。

  1. Windows身份验证:这个身份验证方式依赖于Windows来担当重任——当用户登录到Windows是验证身份。访问SQL Server对象的许可然后会分配给Windows登录。只有当SQL Server运行在支持Windows NT或Kerberos身份验证的Windows版本上才可以使用,这个自Windows 2000起已经几乎是标准。
  2. SQL Server身份验证:SQL Server可以完全自主完成身份验证。在这个情况下,你可以创建唯一的用户名——在SQL Server调用登录——和密码。连接到SQL Server的用户或应用程序提供这些凭证来访问。许可然后直接分配到那个登录或通过角色里的资格。

在SQL Server里在这2个类型之间配置身份验证不是一个非此即彼的选择(可以混合使用)。你可以在任何两个方式里配置身份验证:

  1. 混合身份验证模式:服务器同时支持SQL Server和Windows身份验证。
  2. Windows身份验证模式:服务器只支持Windows身份验证。

只要可能的话,微软强烈推荐使用Windows身份验证。Windows拥有可靠的验证选项,包括密码策略,但正真正的应用程序里,Windows身份验证并不总是可行的。SQL Server身份验证可以嵌入Windows验证的一些功能,但它不太安全。

Windows身份验证

如果你配置你的SQL Server在Windows身份验证里操作,SQL Server认为与Windows服务器有信任关系。当它们登录到Windows里时,SQL Server认为Windows已经验证用户。然后SQL Server检查用户账号,任何Windows组和任何SQL Server角色,看用户是否是其成员之一来决定用户是否允许与各个SQL Server对象打交道。

与SQL Server身份验证比,Windows身份验证有很多优势,包括:

用户一次登录即可,因此她不需要单独登录到SQL Server审计功能简单化登录管理密码策略(在Windows Server 2003及后续版本)

Winows身份验证的另一个大优势是你对Windows用户和组的任何修改会自动在SQL Server里生效,因此你不需要单独管理它们。然后,如果你对Windows用户做出的修改,它们此时刚好连接到SQL Server,这些修改不会生效,直到下次用户连接到SQL Server才会生效。

配置SQL Server安全设置

当你安装SQL Server时,你可以选择SQL实例允许的验证模式。安装完成后你可以在SSMS里的服务器属性对话框里修改这个设置。这些设置适用于SQL Server实例里的所有数据库和其它对象。因此如果你需要为任何数据库使用SQL Server身份验证,你需要为服务器设置为混合模式。

插图2.1显示了在SSMS里选择了【安全性】页的【服务器属性】对话框。为了打开这个对话框,在对象浏览器里右击服务器实例名,从弹出的菜单里选择【属性】,然后点击【安全性】页。通过点击对应的单选框和点击【确定】提交修改,就可以修改验证模式。

插图2.1:为SQL Server实例配置验证模式

添加一个Windows登录

使用Windows身份验证,你的用户在能访问SQL Server前需要验证Windows登录账号。然后你可以授予一个Windows组连接到SQL Server,或者你可以授予许可给单独的Windows用户,如果你不想授予集体许可。

使用SSMS管理安全的一个好处是你可以同时配置登录和数据库访问。启用Windows登录到访问SQL Server和AdventureWorks2012数据库。使用下列步骤,并假定本地机器已经定义了woodytu用户。

1.打开SSMS,确保对象浏览器窗体可见,并且你已经连接到SQL Server实例

2.展开服务器对象的树状视图,然后展开【安全性】节点。你会看到如插图2.2所示的多个子节点。

插图2.2:服务器对象浏览器的安全性部分,你定义的登录的地方

3.右击【登录名】节点,从弹出的菜单里选择【新建登录名】来打开【登录名】——新的对话框

4.确保【Windows身份验证】单选框已经选择

5.你可以用任何2种方式选择Windows登录。第一种方式是直接输入域名或机器名,然后一个\和所使用的Windows登录名。第二个方式,通常更简单的方式点击【搜索】按钮来打开【选择用户或组】对话框。输入用户名,点击【检查名称】来查找具体的名称。如果找到用户,完整的名字在对话框里出现,如插图2.3里所示。点击【确定】选择那个用户。


插图2.3:找到一个Window登录来添加到SQL Server

6.回到【登录名-新建】对话框,设置AdventureWorks2012数据库作为登录的默认数据库。当用户连接到服务器且不指定数据库时,这是用户使用的数据库。这不限制用户只访问那个数据库。插图2.4展示对于在WIN10的机器上Windows的登录用户woodytu,设置默认数据库为示例数据库AdventureWorks2012的登录配置。

插图2.4:【登录名—新建】对话框启用Windows登录到访问SQL Server实例。

提示:
绝不保持默认数据库为master数据库。这个是惨痛的教训:连接到服务器,太容易忘记修改数据库了。到时候如果你运行脚本在master数据库上创建上百个数据库对象,你会花大量的精力来人为删除这些对象,清理master数据库。

7.接下来,给用户访问一个数据库。从对话框的左边清单里选择【用户映射】页。通过选择数据库名旁的选择框授予用户访问AdventureWorks2012数据库。SQL Server自动映射用户用同样的用户名到数据库里的用户,如你在表里的第3列所见,如果你想要的话,可以修改用户名。分配Sales作为用户在数据库里默认的架构,可以在【默认架构】列里输入,或者点击【...】按钮从列表里选择。对话框应该如插图2.5所示。

插图2.5:授予Windows登录访问AdventureWorks2012数据库

提示:
为登录设置默认数据库和授予访问到数据库之间是有区别的。当用户登录没有指定数据库时,默认数据库指的是SQL Server尝试修改上下文到那个数据库。但这不授予在数据库里做任何事的任何许可,或者甚至允许访问到数据库。这就是说分配用户完全不能访问的数据库是可能的。一旦数据库被访问了,为了让用户可以进行一些操作,你需要授权用户许可。

8.默认情况下,新的Windows登录可以访问到服务器。但是如果你想禁止登录访问服务器,从【登录名—新建】的左边列表选择【状态】,勾选【拒绝】单选框。你也可以通过选择【禁止】按钮临时禁用登录。插图2.6显示了这些选项。

插图2.6:授予和拒绝连接到数据库和临时禁用登录账号选项点击【确定】创建用户。

你也可以在同样的方式里添加Windows组到SQL Server,组的任何成员也可以访问数据库服务器,包括你给组的数据库里的任何对象 。

SQL Server身份验证

当你使用SQL Server登录作为验证时,客户端应用程序需要提供有效的用户名和密码来连接到数据库。这些SQL Server登录在SQL Server里保存,与Windows无关。当在登录时,如果没有匹配的用户名和密码,SQL Server抛出错误,用户不能访问数据库。

尽管Windows身份验证更加安全,在一些情况或许你只能选择SQL Server登录来代替。对于简单没有广泛安全需求的应用程序,SQL Server身份验证更容易管理,它允许你避免Windows安全的复杂。而且如果客户端运行在更老版本的Windows(比Windows 2000还老)或非Windows的操作系统,你必须使用SQL Server登录。

创建SQL Server登录,使用和Windows登录同样的【登录名-新建】对话框。但不是选择Windows登录,输入没有域名或机器名的用户名,并提供密码。例如,插图2.7显示了如何创建一个新的SQL Server登录user,把AdventureWorks2012作为他的默认数据库。

插图2.7:创建SQL Server登录

对于用户映射和状态的所有其它选项的SQL Server登录和Windows登录是一样的。

通过T-SQL的SQL Server登录

你也可以用T-SQL代码来进行同样的操作。在代码2.1里的Create Login代码创建一个有强劲密码的SQL Server登录Tudou。

CREATE LOGIN Tudou WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v';
GO

代码2.1:使用T-SQL创建新的SQL Server登录的代码

然后,授予Tudou访问AdventureWorks2012数据库,使用CREATE USER语句并分配默认的架构,如代码2.2所示。

USE AdventureWorks2012;
 GO

 CREATE USER Tudou FOR LOGIN Tudou
   WITH DEFAULT_SCHEMA = HumanResources;
 GO

代码2.2:用SQL Server登录关联创建数据库用户的代码

提示:

如第一篇,如果你想在本地SQL Server实例运行它们的话,很可能你需要对代码做些改动。在代码2.2里假定你已经安装了AdventureWorks2012数据库。

像Windows登录,你可以映射服务器登录Tudou到数据库里其它一些名称。代码2.3里在AdventureWorks2012数据库里映射TudouZ到Tudou用户。

 DROP USER Tudou;
 GO
 CREATE USER TudouZ FOR LOGIN Tudou WITH DEFAULT_SCHEMA = HumanResources;
 GO

代码2.3:删除现存用户增加用不同登录名的数据库用户名的代码

谨防sa登录

如果你配置你的SQL Server支持SQL Server登录,有一个SQL Server内建的SQL Server登录需要留意——sa登录——在对象浏览器里的【安全性】节点,【登录名】里可以看到。sa或系统管理员,登录是为了SQL Server的早期版本的向后兼容性。sa登录映射到sysadmin服务器角色,任何以sa登录到SQL Server的任何人有完全的系统管理员权限,在整个SQL Server实例和所有里面的数据库都有不可撤销的权利。这的确是个强大的登录。

你不能修改或删除sa登录。当你安装SQL Server的时候,如果你选择了混合验证模式,你会提示为sa用户输入密码。没有密码的话,任何人可以不输密码直接以sa登录,玩弄起“我来管理服务器”。不用说,这是你让你的用户最后做的事。如果没有其他系统管理员或忘记了它们的Windows密码,使用sa登录只是个后门。如果那个发生的话,你需要新的管理员!

绝不要在应用程序里使用sa登录来访问数据库。如果黑客拿到应用程序的控制权,这样做的话会给黑客真个数据库服务器的管理权限。在早期,这是黑入服务器的最简单方法,是个可怕的实例。相反,为应用程序设置一个自定义的Windows或SQL Server登录来使用,给这个登录来运行程序的绝对最小的必须许可(实现最小权限原则)。

提示:

事实上,你应该考虑使用刚才看到的登录属性对话框的【状态】页完全禁用sa登录。那样的话攻击者不能使用这个全能登录来控制你的服务器实例,不管你是否设置了强悍的sa密码。

密码策略与执行

在SQL Server 2005之前的版本,对于可以让系统更安全,对系统管理员的强制密码策略,没有一个简单的方法。例如,SQL Server米有办法强制用户创建最短长度、数字和其它字符混合的强壮密码。如果有人要用一个字母创建登录的密码,你不能配置SQL Server来阻止它。同样,密码也没方法设置它定期过期,例如每三个月。一些人刚好看到了这个主要原因,不使用SQL Server登录。

SQL Server的最近版本可以嵌入Windows Server 2003及后续版本的密码策略。密码还是保存在SQL Server里,但SQL Server调用了NetValidatePasswordPolicy() Windows API方法,这个是在Windows Server 2003首次引入的。这个API函数应用Windows密码策略到Server登录,返回一个值表示密码是否有效。当用户创建,设置或重置密码时,SQL Server调用这个函数。

你可以通过Windows控制面板管理工具里的本地密码策略来定义Windows密码策略。默认密码策略部分如插图2.8所示。这个小程序有独立的账号锁定策略,如插图2.9所示,当用户尝试太多的失败登录时生效。默认情况下,新安装的Windows锁定策略是禁用的。

插图2.8:Windows本地安全策略小程序,显示默认的密码策略。

插图2.9:Windows本地安全策略小程序,显示默认的账号锁定策略。

下表列出默认值的密码策略和它们如何运作的说明。

类别            策略名             默认值            说明

密码策略          强制密码历史          0个记住的密码         阻止用处重用旧密码,例如在2个密码之间修改

              密码长度最小值         0个字符            使用这个要求密码长度,让它们很难破解

              密码必须符合复杂性要求     已禁用            至少6个字母或数字和其它字符,不包含用户名

密码过期          密码最长使用期限        42天             在用户修改密码前的天数 

              密码最短使用期限        0天              在允许用户可以修改密码前的天数

账户锁定策略        账户锁定时间          不适用            如果锁定阈值启用的话则锁定

              账户锁定阈值          0次无效登录          账户锁定前失败登录次数

              重置账户锁定计数器       不适用      重置失败登录次数;

当锁定阈值启用的时候启用

表2.1:Windows密码策略设置

当你创建登录的时候,你可以启用或禁用执行密码策略。【登录名-新建】对话框在登录名下,在你创建SQL Server登录的时候,有个启用部分,如插图2.10所示。

插图2.10:对于新的登录执行密码策略

当你使用T-SQL创建登录的时候,也可以应用密码策略。例如,如果你在Windows 2003 Server后后续版本上运行SQL Server并启用了密码策略,代码2.4会运行失败。

 USE master;
 GO
 CREATE LOGIN SIMPLEPWD WITH PASSWORD = 'SIMPLEPWD';
 GO

代码2.4:尝试创建违反密码策略的登录

这个代码运行失败的原因是密码不能和用户名一样。

当你创建或修改登录时,你可以控制策略。代码2.5关闭了过期检查和策略。

 ALTER LOGIN Tudou WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v',
   CHECK_EXPIRATION = OFF, CHECK_POLICY = OFF;

代码2.5:只对修改登录来禁止密码策略的代码(只对这次登录)

CHECK_EXPIRATION选项控制SQL Server检查密码的策略里年龄,CHECK_POLICY应用到其他策略。MUST_CHANGE选项执行用户下次登录必须修改密码。

如果用户有太多次数的失败登录,超过了账号锁定策略的设置数,管理员可以使用UNLOCK来重置,如代码2.6所示。

代码如下:

ALTER LOGIN Tudou WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v' UNLOCK

代码2.6:由于太多失败登录而锁定登录,解锁的代码。

当你在Windows Server 2003之前的版本上运行SQL Server,你可以启用强制密码策略。但SQL Server默认使用至少6个字符的密码,密码里不能包含你的用户名,而且是大小写字母,数字和其他字符的混合体。你不能修改这些默认设置。但希望你不要这么老的版本上运行SQL Server,因为自那以后有了大的安全改进。

小结

在这篇SQL Server安全文章里,你学习了SQL Server里的多个验证选项。Windows集成身份验证是最安全的,但并不是都是可行的,微软多年来已经让SQL Server验证更加安全。但是如果你使用混合验证模式,不要忘记给sa足够强悍的密码,甚至停用它。同样大多数对象,你都可以使用SSMS里的图形界面或T-SQL来创建或修改它们。如果你在当下的Windows版本上运行SQL Server,你可以将本地安全策略嵌入密码策略。

感谢关注!

原文链接:

http://www.sqlservercentral.com/articles/Stairway+Series/109975/

(0)

相关推荐

  • win2003安装sqlserver 2000提示无法验证产品密钥的解决方法

    症状 在 Service Pack 4 (SP 4) 运行 Microsoft Windows Server 2003. Microsoft Windows Storage Server 2003 或 Microsoft Windows 2000 在服务器上, 您尝试安装 Microsoft SQL Server 2000 通过卷许可协议 (VLA) 媒体. 执行此操作时,会出现以下错误信息 SQL Server 安装向导的 CD KEY 页上: 无法验证产品密钥 解决方案 警告 如果您修改注册

  • sqlserver 无法验证产品密匙的完美解决方案[测试通过]

    方法一: 在给出的输入CD-KEY(序列号)的界面中,输入你已经安装的windows server 2003 的CD-KEY(序列号)即可以继续安装,而不是SQL 2000的CD-KEY(序列号). Windows server 2003的CD-KEY(序列号):JCGMJ-TC669-KCBG7-HB8X2-FXG7M (附:SQL2000的CD-KEY(序列号):SN:311-0432642 CD-KEY:H6TWQ-TQQM8-HXJYG-D69F7-R84VM) 方法二: 推荐按照下列步

  • sql server2012附加数据库问题解决方法

    SQLServer错误5120:先用widows用户登录附加再分离重新用sa附加就行了 不行的话,绝招: 你先用SQLServer创建一个新的数据库,然后用你要附加的文件去覆盖掉创建的文件!覆盖之前,记得计算机-管理-服务-把SQL服务关掉

  • 图文详解Windows Server2012 R2中安装SQL Server2008

    入手一台Windows Server2012云服务器,搭建一下服务环境,选用SQL Server2008 直奔主题,下好安装镜像后,直接双击 选择运行程序而不获取帮助 如图: 进入安装中心后选择 安装 再选择全新安装 同样选择运行程序而不获取帮助 选择后如图: 程序会检测一下系统,没警告等大问题就可以点确定 输入产品秘钥,也可以选择试用版本:试用版本简直不能忍,我直接上秘钥,关于秘钥我会在最下面给出一个方案 接受条款,下一步 点安装即可 软件又检测一遍,没有警告就可以点下一步 选择第一项即可 你

  • sqlserver服务器验证改为混合验证模式步骤

    1.启动SQL Server Management Studio,以Windows身份验证方式登录. 2.在对象资源管理器窗口中,右键单击服务器,选择属性,打开服务器属性对话框. 3.在"安全性"页上的"服务器身份验证"下,选择新的服务器身份验证模式,再单击"确定". 4.重新启动 SQL Server 服务,可以直接通过右件键点击"对象资源管理器"进行启动. 5.使用该语句启用sa用户:alter login sa enab

  • php使用sql server验证连接数据库的方法

    本文实例讲述了php使用sql server验证连接数据库的方法.分享给大家供大家参考.具体分析如下: 当您连接到 SQL Server 时,SQL Server Driver for PHP 支持 SQL Server 身份验证,在使用 SQL Server 身份验证连接到 SQL Server 时必须考虑以下几点. 必须对服务器启用 SQL Server 混合模式身份验证,在尝试建立连接时必须设置 UID 和 PWD 连接属性,UID 和 PWD 必须映射到有效的 SQL Server 用户

  • Microsoft SQL Server 2012 数据库安装图解教程

    我们下载地址:http://www.jb51.net/softs/79861.html 官网下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=29066 1. 根据微软的下载提示,64位的Windows7操作系统,只需下载列表的CHSx64SQLFULL_x64_CHS_Core.box.CHSx64SQLFULL_x64_CHS_Intall.exe和CHSx64SQLFULL_x64_CHS_Lang.box三个安装包即

  • SQL Server 2012 安装图解教程(附sql2012下载地址)

    在安装微软最新数据库SQL Server 2012之前,编者先确定一下安装环境:Windonws 7 SP1,32位操作系统.CPU是2.1GHz赛扬双核T3500,内存2.93GB. sql2012下载 http://www.jb51.net/softs/79861.html 安装SQL Server 2012的软硬件环境参数 根据微软的下载提示,32位的Windows 7操作系统,只需下载列表最下面的CHSx86SQLFULL_x86_CHS_Core.box. CHSx86SQLFULL_

  • SQL Server 2012 身份验证(Authentication)

    在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Server里的安全功能充分利用,不用在面对特定威胁,不能保护你数据的功能上浪费时间. 身份验证是验证主体(需要访问SQL Server数据库的用户或进程,是声称是的人或物)的过程.主体需要唯一的身份,这样的话SQL Server可以决定主体有哪个许可.在提供安全访问数据库对象中,正确的身份验证是必须的

  • SQL Server 2012 安全概述

    在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Server里的安全功能充分利用,不用在面对特定威胁,不能保护你数据的功能上浪费时间. 从让人眼花缭乱的客户端使用连接,通过到处分布的网络,尤其是互联网,关系数据库在各种应用程序里广泛使用.这使数据对任何人,在任何地方都可访问.数据库可以保存人类知识的很大部分,包括高度敏感的个人信息和让国际商务工作的关

  • 基于Win2008 R2的WSFC实现 SQL Server 2012高可用性组(AlwaysOn Group)

    两年前的<SQL Server 2008 R2数据库镜像部署>,今天"再续前缘"-- 微软新一代数据库产品SQL Server 2012已经面世一段时间了,不管从功能上讲还是性能上的体现,较之其早期产品都有了很大提升.特别是其引入高可用性组(AlwaysOn Group, AG)这一概念和功能,大大增强和提高了SQL Server的可用性,在之前的镜像数据库的基础上有了质的变化. SQL Server 2012高可用性组在实现过程中较之早起的SQL Server故障转移群集

  • SQL SERVER 2012数据库自动备份的方法

    为了防止数据丢失,这里给大家介绍SQL SERVER2012数据自动备份的方法: 一.打开SQL SERVER 2012,如图所示: 服务器类型:数据库引擎: 服务器名称:127.0.0.1(本地),也可以选择远程连接; 身份验证:包含Windows身份验证和 SQL Server身份验证,此处选择Windows 身份验证; 二.如图,选择[管理]-->[维护计划]-->[维护计划向导]: 三.在[SQL SERVER 维护计划向导]界面,点击[下一步]: 四.填写如图所示:名称和说明,点击[

  • sql server 2012安装程序图集

    重点:下面的安装步骤都在断网环境下安装的 因为我想查看联网跟没有联网SQL2012会不会下载并安装.net2.0 和.net3.5和.net4和SP1补丁包 我的环境: 没有集成SP1补丁包的安装包大小是4.71GB,在论坛上各个安装包大小版本都有,我觉得还是以MSDN我告诉你或者MSDN为准. 问题一:X64位 集成SP1只需要3.94GB,比X86-X64版本大小还要小??而且在安装X86-X64版的时候没有选项给你选择是安装 SQL2012 32位还是64位?? 为了验证下载下来的文件是从

  • 如何安装SQL Server 2012群集

    在前面的博文中,我们介绍了如何通过软件模拟实现共享磁盘(//www.jb51.net/network/592807.html),也介绍了搭建Windows 2008群集的方法(//www.jb51.net/os/windows/win2008/592817.html),接下来,我们就要在此基础上安装SQL Server 2012群集. 一.环境准备 1.准备3台计算机 DC1:IP地址192.168.1.1,子网掩码255.255.255.0,默认网关192.168.1.254,DNS为192.

  • Sql Server 2008R2升级Sql Server 2012图文教程

    环境: Windows server 2008 r2 Standard +SqlServer2008R2 内网环境需要升级为SQL server 2012 升级安装时提示版本不支持 网上查询相关问题, 必须是SQL server2008 r2 sp1以上及需要安装Sp2补丁包才能升级为SQL server 2012 1)下载地址:微软官网 https://www.microsoft.com/zh-CN/download/details.aspx?id=30437 2)选择你对应的安装SQL se

  • SQL SERVER 2012新增函数之逻辑函数CHOOSE详解

    SQL SERVER 2012中新增了CHOOSE,该函数可以从值列表返回指定索引处的项. 例如: select CHOOSE(3,'A','B','C','D') as R1 /* R1 ---- C */ CHOOSE并不能这么用,例如有个字符串'A,B,C,D',我们并不能用choose得到其中的某个值: select choose(2,'A,B,C,D') /* null */ CHOOSE的主要功能和CASE WHEN类似,例如数据库中有字段Sex:1表示男,2表示女. if obje

  • Sql Server 2012 转换函数的比较(Cast、Convert和Parse)

    语法结构: 1. Cast 语法结构:CAST ( expression AS data_type [ ( length ) ] ) 2. Convert 语法结构:CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) 3. Parse 语法结构:PARSE ( string_value AS data_type [ USING culture ] ) 其中,Parse 为 Sql Server 的新特性 expression

随机推荐