在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你须要的一切。但在你能有效使用这些安全功能前,你须要理解你面对的威胁和一些基本的安全概念。这篇文章提供了基础,所以你能够对SQL Server里的安全功能充分利用,不用在面对特定威胁,不能保护你数据的功能上浪费时间。sql
身份验证是验证主体(须要访问SQL Server数据库的用户或进程,是声称是的人或物)的过程。主体须要惟一的身份,这样的话SQL Server能够决定主体有哪一个许可。在提供安全访问数据库对象中,正确的身份验证是必须的第一步。数据库
SQL Server支持身份验证的两个途径:Windows集成身份验证和SQL Server身份验证。你使用的途径取决于网络环境,应用程序访问数据库的类型和这些应用程序的用户类型。小程序
在SQL Server里在这2个类型之间配置身份验证不是一个非此即彼的选择(能够混合使用)。你能够在任何两个方式里配置身份验证:浏览器
只要可能的话,微软强烈推荐使用Windows身份验证。Windows拥有可靠的验证选项,包括密码策略,但正真正的应用程序里,Windows身份验证并不老是可行的。SQL Server身份验证能够嵌入Windows验证的一些功能,但它不太安全。安全
若是你配置你的SQL Server在Windows身份验证里操做,SQL Server认为与Windows服务器有信任关系。当它们登陆到Windows里时,SQL Server认为Windows已经验证用户。而后SQL Server检查用户帐号,任何Windows组和任何SQL Server角色,看用户是不是其成员之一来决定用户是否容许与各个SQL Server对象打交道。服务器
与SQL Server身份验证比,Windows身份验证有不少优点,包括:网络
Winows身份验证的另外一个大优点是你对Windows用户和组的任何修改会自动在SQL Server里生效,所以你不须要单独管理它们。而后,若是你对Windows用户作出的修改,它们此时恰好链接到SQL Server,这些修改不会生效,直到下次用户链接到SQL Server才会生效。架构
当你安装SQL Server时,你能够选择SQL实例容许的验证模式。安装完成后你能够在SSMS里的服务器属性对话框里修改这个设置。这些设置适用于SQL Server实例里的全部数据库和其它对象。所以若是你须要为任何数据库使用SQL Server身份验证,你须要为服务器设置为混合模式。函数
插图2.1显示了在SSMS里选择了【安全性】页的【服务器属性】对话框。为了打开这个对话框,在对象浏览器里右击服务器实例名,从弹出的菜单里选择【属性】,而后点击【安全性】页。经过点击对应的单选框和点击【肯定】提交修改,就能够修改验证模式。工具
插图2.1:为SQL Server实例配置验证模式
使用Windows身份验证,你的用户在能访问SQL Server前须要验证Windows登陆帐号。而后你能够授予一个Windows组链接到SQL Server,或者你能够授予许可给单独的Windows用户,若是你不想授予集体许可。
使用SSMS管理安全的一个好处是你能够同时配置登陆和数据库访问。启用Windows登陆到访问SQL Server和AdventureWorks2012数据库。使用下列步骤,并假定本地机器已经定义了woodytu用户。
你也能够在一样的方式里添加Windows组到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代码来进行一样的操做。在代码2.1里的Create Login代码建立一个有强劲密码的SQL Server登陆Tudou。
1 CREATE LOGIN Tudou WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v'; 2 GO
代码2.1:使用T-SQL建立新的SQL Server登陆的代码
而后,授予Tudou访问AdventureWorks2012数据库,使用CREATE USER语句并分配默认的架构,如代码2.2所示。
1 USE AdventureWorks2012; 2 GO 3 4 CREATE USER Tudou FOR LOGIN Tudou 5 WITH DEFAULT_SCHEMA = HumanResources; 6 GO
代码2.2:用SQL Server登陆关联建立数据库用户的代码
提示:
如第一篇,若是你想在本地SQL Server实例运行它们的话,极可能你须要对代码作些改动。在代码2.2里假定你已经安装了AdventureWorks2012数据库。
像Windows登陆,你能够映射服务器登陆Tudou到数据库里其它一些名称。代码2.3里在AdventureWorks2012数据库里映射TudouZ到Tudou用户。
1 DROP USER Tudou; 2 GO 3 CREATE USER TudouZ FOR LOGIN Tudou WITH DEFAULT_SCHEMA = HumanResources; 4 GO
代码2.3:删除现存用户增长用不一样登陆名的数据库用户名的代码
若是你配置你的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会运行失败。
1 USE master; 2 GO 3 CREATE LOGIN SIMPLEPWD WITH PASSWORD = 'SIMPLEPWD'; 4 GO
代码2.4:尝试建立违反密码策略的登陆
这个代码运行失败的缘由是密码不能和用户名同样。
当你建立或修改登陆时,你能够控制策略。代码2.5关闭了过时检查和策略。
1 ALTER LOGIN Tudou WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v', 2 CHECK_EXPIRATION = OFF, CHECK_POLICY = OFF;
代码2.5:只对修改登陆来禁止密码策略的代码(只对此次登陆)
CHECK_EXPIRATION
选项控制SQL Server检查密码的策略里年龄,CHECK_POLICY
应用到其余策略。MUST_CHANGE
选项执行用户下次登陆必须修改密码。
若是用户有太屡次数的失败登陆,超过了帐号锁定策略的设置数,管理员可使用UNLOCK
来重置,如代码2.6所示。
1 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/