SQL Server安全级别2的楼梯:身份验证
在2014/06/18 被Don Kiely所发表
这部分
这篇文章是阶梯系列的一部分:SQL Server安全阶梯
SQL服务器拥有您所需的一切,以保护您的服务器和数据免受当今复杂的攻击。但在您能够有效地使用这些安全特性之前,您需要了解所面临的威胁和一些基本的安全概念。这第一个阶梯级别提供了一个基础,这样您就可以充分利用SQL Server中的安全特性,而不会浪费时间来处理对您的数据没有特定威胁的功能。
认证过程的验证,principal-a用户或进程需要访问SQL Server数据库是谁或什么它声称是。主体需要唯一的标识,这样SQLServer就可以确定主体有哪些权限,如果有的话。正确的身份验证是向数据库对象提供安全访问的必要的第一步。
SQLServer支持两种身份验证路径:Windows集成身份验证和SQLServer身份验证。您使用的路径取决于网络环境、将访问数据库的应用程序类型以及这些应用程序的用户类型。
Windows身份验证:这种形式的认证依赖于Windows做繁重的身份验证时,用户登录到Windows。访问SQL Server对象然后被分配到Windows登录权限。只有当SQL Server在支持Windows NT或Kerberos身份验证的Windows版本上运行时,这种类型的认证才可用,这是Windows 2000以来的标准。
SQL Server身份验证:SQL Server可以照顾认证完全依靠自己。在这种情况下,您可以创建独特的用户名称为SQL Server和密码登录。用户或应用程序连接到SQL Server,并提供这些凭据以供访问。然后直接将权限分配给登录,或者通过角色中的成员分配权限。
在SQL Server中配置身份验证并不是这两种类型之间的简单选择。可以以两种方式任意配置身份验证:
混合模式身份验证:服务器支持SQL Server和Windows身份验证。
·窗口模式:服务器只支持Windows身份验证。
微软强烈建议尽可能使用Windows身份验证。Windows具有强大的身份验证选项,包括密码策略,但Windows身份验证在实际应用中并不总是实用的。SQLServer身份验证可以钩住一些Windows身份验证特性,但它并不是那么安全。
Windows身份验证
如果配置SQL Server以在Windows身份验证模式下运行,则SQLServer将与Windows服务器假定信任关系。它假定Windows在登录到Windows时对用户进行身份验证。SQL Server然后检查用户帐户、任何Windows组和用户可能是哪个成员的SQL Server角色,以确定该用户是否允许与各种SQLServer对象一起工作。
Windows身份验证与SQLServer身份验证相比,有许多优点,包括:
·由用户单一登录,所以她没有登录到SQL服务器分开
·审计特征
·简化登录管理
·密码策略(在Windows Server 2003及以后的版本)
Windows身份验证的另一大优势是,您对Windows用户和组的任何更改都会自动反映在SQL Server中,因此您不必单独管理它们。但是,如果在连接到SQL Server时对Windows用户进行了更改,那么在下次用户连接到SQLServer之前,这些更改将不会生效。
配置SQL Server安全设置
安装SQL Server时,可以选择服务器实例允许的身份验证模式。稍后,您可以更改SQL Server Management Studio中可用的“服务器属性”对话框中的设置。这些设置适用于SQL Server实例中的所有数据库和其他对象。因此,如果您需要为任何数据库使用SQL Server身份验证,则必须为服务器设置混合模式。
安装SQL Server时,可以选择服务器实例允许的身份验证模式。稍后,您可以更改SQL Server Management Studio中可用的“服务器属性”对话框中的设置。这些设置适用于SQL Server实例中的所有数据库和其他对象。因此,如果您需要为任何数据库使用SQL Server身份验证,则必须为服务器设置混合模式。
图2.1显示了安全管理页面中的服务器属性对话框,其中选择了安全页面。要打开此对话框,右键单击对象资源管理器中的服务器实例名称,然后从弹出菜单中选择属性,然后转到安全页面。通过单击相应的单选按钮并单击OK提交更改,即可更改身份验证模式。
5.您可以通过两种方式选择Windows登录。第一个方法是直接输入域或机器名称,然后是反斜杠和用户的Windows登录名。第二种,通常更容易的方法是单击Search按钮打开选择用户或组对话框。键入用户名并单击Check Names按钮以找到准确的名称。如果找到用户,则将显示完整的名称,如图2.3所示。单击OK选择该用户。
图2.3查找Windows登录以添加到SQL Server。
6. 回到Login - New对话框,将AdventureWorks2012数据库设置为登录的默认数据库。这是当用户连接到服务器并没有指定数据库时使用的数据库。它不限制用户访问该数据库。图2.4显示了在名为Marathon的机器上的Windows JoeStairway用户的最终登录,并将默认数据库设置为sample AdventureWorks2012数据库。
图2.4 Login - New对话框启用Windows登录以访问SQL服务器实例。
提示:
永远不要将默认数据库设置为主数据库。我从痛苦的经验中说:连接服务器和忘记更改数据库太容易了。如果您运行一个脚本,在主数据库中创建数百个数据库对象,那么您将会有一个非常繁琐的工作,即手动删除这些对象以清理主数据库。
7 接下来,让用户访问数据库。从对话框左侧的列表中选择User Mapping页面。通过检查数据库名称旁边的复选框,授予用户访问AdventureWorks2012数据库的权限。SQL Server自动将用户映射到数据库中具有相同名称的用户,正如您可以在表的第三列中看到的那样,尽管您可以更改用户名。分配销售数据库中用户的默认模式,通过键入它在默认模式列或单击省略号(…)按钮从列表中选择它。对话框应该类似于图2.5。
图2.5授予对AdventureWorks2012数据库的Windows登录访问权限。
提示:
设置一个登录和授予访问数据库的默认数据库之间有区别。默认数据库仅仅意味着,当用户登录时,SQL Server试图将上下文更改为该数据库,而无需指定数据库。但是,这并不允许在数据库中执行任何操作,甚至不允许访问数据库。这意味着可以指定用户无法访问的默认数据库。为了让用户在访问数据库时做任何有用的事情,您需要显式地授予用户权限。
8。默认情况下,新的Windows登录可以访问服务器。但是,如果您想显式地拒绝登录访问服务器,请从login - New对话框左侧的页面列表中选择Status,并选择deny单选按钮。您还可以通过选择禁用按钮临时禁用登录。图2.6显示了这些选项。
图2.6授予或拒绝访问服务器的选项,以及临时禁用登录帐户。
9.单击OK创建用户。
您还可以以同样的方式向SQL Server添加一个Windows组。在这种情况下,组中的任何成员都可以访问数据库服务器,无论您将该组织提供给数据库中的对象。
图2.1。为SQLServer实例配置身份验证模式。
添加Windows登录
要使用Windows身份验证,您的用户在访问SQL Server之前需要一个有效的Windows登录帐户。然后您可以向Windows组授予连接到SQLServer的权限,或者如果不想授予集体权限,可以授予个别Windows用户的权限。
一个关于使用Management Studio管理安全的好东西,你可以设置登录,同时提供数据库访问。为了使Windows登录访问SQL Server和adventureworks2012数据库,使用以下步骤,假设本地机器上已经有一joestairway登录定义。
1.sql服务器管理工作室,确保对象资源管理器窗口是可见的,你连接到SQL Server实例。
2、展开服务器对象的树视图,然后展开安全部分。你会看到几个子节点,如图所示2.2.
图2.2。一个服务器的对象资源管理器中的安全部分,在那里你可以定义登录。
3.right按登录节点,从弹出菜单选择新的登录,打开登录–新对话框。
4、确保选中了Windows身份验证单选按钮。
SQL Server身份验证
当你使用SQL Server登录进行身份验证时,客户机应用程序必须提供有效的用户名和密码才能连接到数据库。这些SQL Server登录在SQL Server中保存,而不引用Windows。当登录时,如果没有帐户匹配用户名和密码,SQL服务器会引发错误,用户无法访问SQL Server。
即使Windows身份验证更加安全,你也可以选择在某些情况下使用SQL Server登录。SQL Server身份验证更易于管理那些没有广泛安全需求的简单应用程序,它允许你避免与Windows安全性纠缠在一起。如果客户机在老版本的Windows上运行(基本上是比windows2000更老的版本)或者非Windows操作系统,就必须使用SQL Server登录。
要创建一个SQL服务器登录,请使用与Windows登录相同的登录新对话框。但是,不必选择Windows登录,而是键入一个没有域或机器名称的惟一登录名,并提供密码。例如,图2.7显示了如何创建一个新的SQL Server登录Casper,并将AdventureWorks2012作为他的默认数据库。
图2.7。创建一个SQL Server登录。
用户映射和状态的所有其他选项都是与Windows登录相同的SQL Server登录。
SQL Server登录通过transact -SQL
你还可以使用transact - sql代码执行相同的操作。清单2.1中的创建登录代码创建了一个具有相当强密码的SQL服务器登录Topaz:
清单2.1。使用t - SQL创建新的SQL Server登录的代码。
然后,要授予Topaz访问AdventureWorks2012数据库的权限,使用CREATE USER语句并分配一个默认模式,如清单2.2所示。
;
提示:
与一级阶梯一样,如果你想在本地的SQL服务器实例中运行它们,你可能需要对代码示例进行一些更改。清单2.2中的代码假定你已经安装了AdventureWorks2012数据库。以后的代码示例假设你正在运行名为Marathon的机器上的代码,并在Windows中有一个JoeStairway用户。你可以随意命名您的机器马拉松,或者创建一个具有该名称的用户,或者根据需要更改代码。
与Windows登录一样,你可以将服务器登录Topaz映射到数据库中的其他名称。清单2.3中的代码将Topaz映射到AdventureWorks2012数据库中的TopazD用户:
清单2.3。删除现有用户的代码,然后添加一个与登录名不同的数据库用户。
注意sa登录
如果你配置你的SQL服务器来支持SQL Server登录,那么有一个内置的SQL Server登录,您需要注意这个sa登录,你可能已经注意到在对象资源管理器中的logins节点上挂着。sa或系统管理员登录主要是为了向后兼容老版本的SQL Server。sa登录映射到sysadmin固定服务器角色,任何登录到SQL server as sa的人都是完整的系统管理员,对整个SQL server实例及其所有数据库都具有不可撤销的权限。这确实是一个强大的登录。
你不能修改或删除sa登录。如果在安装SQL Server时选择混合模式身份验证,则提示你输入sa用户的密码。如果没有密码,任何人都可以以没有密码的sa登录,并播放“让我们管理服务器”。不用说,这是你最不想让用户做的事情。如果其他系统管理员无法使用或忘记了他们的Windows密码,则只使用sa登录作为后门登录。如果出现这种情况,你可能需要新的管理员!
永远不要使用sa登录在应用程序中访问数据库。如果黑客能够控制应用程序,那么这样做可以在你的数据库服务器上提供一个黑客管理员级别的控制。在遥远的过去,这是攻击服务器的一种简单方法,是一种可怕的实践。相反,可以为应用程序设置一个自定义窗口或SQL Server登录,并提供运行应用程序所需的绝对最小权限(实现最小特权原则)。
提示:
实际上,你应该考虑使用您先前看到的登录属性对话框的状态页来完全禁用sa登录。这样,攻击者就不能使用这种强大的登录来获得服务器实例的控制权,无论你是否拥有强大的sa密码。
密码策略和执行
在2005年以前的版本的SQL Server中,系统管理员没有简单的方法来执行密码策略,从而使系统更安全。例如,SQL Server没有办法强制用户创建一个最小长度的强密码,以及字母数字和其他字符的混合。如果有人想要为密码创建一个单字母的登录,那么您不能配置SQL Server来阻止它。同样,也没有办法让密码定期过期,比如每三个月。有些人认为这是不使用SQL Server登录的主要原因。
最新版本的SQL Server可以连接到Windows Server 2003、Windows Vista或后续版本的密码策略。密码仍然存储在SQL Server,但是SQL服务器调用NetValidatePasswordPolicy()Windows API方法,首先介绍了Windows Server 2003。该API函数将Windows密码策略应用于SQL Server登录,并返回一个值,该值指示密码是否有效。当用户创建、设置或重新设置密码时,SQL服务器调用此函数。
你可以通过Windows控制面板的管理工具中的本地安全设置applet来定义Windows密码策略。密码策略部分如图2.8所示,默认设置为。applet有一个单独的帐户锁定策略部分,如图2.9所示,当用户进行太多失败的登录尝试时,它会生效。默认情况下,在新的Windows安装中禁用锁定策略。
放大|在新窗口打开
图2.8。Windows本地安全策略小程序,显示默认密码策略。
图2.9。Windows本地安全策略小程序,显示默认帐户锁定策略。
表2.1列出了密码策略以及默认值以及关于它们如何工作的一些注释。
Category | Policy Name | Default | Notes |
Password Policy | Enforce password history | 0 passwords remembered | Prevents users from reusing old passwords, such as alternating between two passwords. |
Minimum password length | 0 characters | Use this to require longer passwords to make them harder to break. | |
Password must meet complexity requirements | Disabled | Minimum mix of alphanumeric and other characters, and does not contain the user name. | |
Password Expiration | Maximum password age | 42 days | Number of days before a user is prompted to change their password. |
Minimum password age | 0 Days | Number of days before a user is allowed to change a password. | |
| Minimum password age | 0 Days | Number of days before a user is allowed to change a password. |
Account Lockout Policy | Account lockout duration | Not applicable | Time in minutes that the account is locked out if the lockout threshold is enabled. |
Account lockout threshold | 0 invalid login attempts | Maximum number of unsuccessful login attempts before the account is locked out. | |
Reset account lockout counter after | Not applicable | Time in minutes after which the counter of unsuccessful attempts is reset; enabled when the lockout threshold is enabled. |
表2.1。Windows密码策略设置。
在创建登录时,可以启用或禁用密码策略执行。登录–新对话框,启用当你创建一个SQL Server登录名下的部分,如图2-10。
图2-10。为新登录执行密码策略。
密码策略适用于当您使用Transact-SQL创建登录以及。例如,如果您在Windows 2003 Server或更高版本运行SQL Server并启用了密码策略,清单2.4中的代码将失败。
USE master;
GO
CREATE LOGIN SIMPLEPWD WITH PASSWORD = 'SIMPLEPWD';
GO
创建登录密码=“simplepwd”simplepwd;
去
清单2.4。试图使用密码违反密码策略创建登录。
此代码失败的原因是密码不能与用户名相同。
你能控制的政策,当你创建或更改登录。清单2.5中的代码关闭了检查到期和策略的选项。
修改登录密码=“黄玉ybqyzipt8 } b ] B [ { 5al0v”,
check_expiration =关闭,check_policy =关闭;
清单2.5。更改登录以禁用此登录的密码策略的代码。
的check_expiration选项控制是否对SQL Server检查政策和check_policy密码时代适用于其他政策。一个must_change选项可用,迫使用户在下次登录时更改密码。
如果用户做了太多失败的登录尝试,超过了帐户锁定策略中设置的数量,管理员可以使用解锁选项重置帐户,如清单2.6所示。
修改登录密码=“黄玉ybqyzipt8 } b ] B [ { 5al0v”解锁
清单2.6。解锁由于失败的登录尝试而锁定的登录的代码。
在Windows Server 2003之前在Windows版本上运行SQL Server时,可以启用强制密码策略。但是SQL Server使用默认设置的最小长度为六个字符,检查密码与登录名的所有部分或任何部分不匹配,并且是大写字母、小写字母、数字和其他字符的组合。不能更改这些默认值。但希望您不会在这样一个旧版本的Windows上运行SQL Server,如果只是因为那时的安全性有了很大的改进的话!
总结
在SQL Server安全性的这个级别中,您已经了解了SQL Server中可用的许多身份验证选项。Windows集成身份验证是最安全的,但并不总是可行的,微软多年来使得SQL Server认证更加完善和安全。但是,如果您使用混合模式身份验证,请不要忘记给SA登录一个非常强的密码,或者更好地禁用它!最喜欢的对象,你可以创造和改变了他们使用的很好的GUI界面管理工作室或T-SQL代码。如果您在一个现代版本的Windows上运行SQL Server,则可以连接到本地安全策略的密码策略中。
本文是SQL Server安全楼梯的一部分。
注册到我们的RSS提要并在我们发布一个新级别的楼梯时得到通知!