通往SQL Server安全级别2的阶梯:身份验证
系列
本文是楼梯系列的一部分:通往SQL服务器安全性的阶梯
SQL Server具备保护服务器和数据免受当今复杂攻击所需的一切功能。但是,在有效使用这些安全功能之前,您需要了解您面临的威胁以及一些基本的安全概念。第一个楼梯级别为您提供了一个基础,使您可以充分利用SQL Server中的安全功能,而不会浪费时间在无法保护数据免受特定威胁的功能上。
身份验证是验证主体(需要访问SQL Server数据库的用户或进程)是谁或其声称是什么的过程。主体需要唯一标识,以便SQL Server可以确定主体具有哪些权限(如果有)。正确的身份验证是提供对数据库对象的安全访问的第一步。
SQL服务器支持两种身份验证路径: Windows集成身份验证和SQL服务器身份验证。您使用的路径取决于网络环境、将访问数据库的应用程序类型以及这些应用程序的用户类型。
视窗验证 :这种形式的身份验证依赖于Windows来执行繁重的提升—在用户登录到Windows时验证身份。然后将访问SQL Server对象的权限分配给Windows登录。只有当SQL Server在支持Windows NT或Kerberos身份验证的Windows版本上运行时,这种类型的身份验证才可用,这种身份验证自Windows 2000以来一直是标准的。
服务器验证 : SQL Server可以完全独立地处理身份验证。在这种情况下,您可以创建唯一的用户名—称为登录在SQL服务器中—和密码。用户或应用程序连接到SQL Server并提供这些凭据以供访问。然后直接或通过角色的成员资格将权限分配给该登录名。
在SQL Server中配置身份验证不是在这两种类型之间进行简单的选择。您可以通过以下两种方式之一配置身份验证:
混合模式认证 :服务器同时支持SQL服务器和Windows身份验证。
仅视窗模式 :服务器仅支持Windows身份验证。
Microsoft强烈建议尽可能使用Windows身份验证。Windows具有强大的身份验证选项,包括密码策略,但Windows身份验证在实际应用中并不总是实用的。SQL Server身份验证可以连接到某些Windows身份验证功能,但它并不安全。
视窗验证
如果将SQL Server配置为在Windows身份验证模式下运行,则SQL Server将与Windows服务器建立信任关系。它假定Windows在用户登录到Windows时对其进行了身份验证。然后,SQL Server会检查用户帐户、任何Windows组以及用户可能是其成员的任何SQL Server角色,以确定是否允许该用户使用各种SQL Server对象。
与SQL Server身份验证相比,windows身份验证有几个优点,包括:
用户一次登录,因此她不必单独登录SQL Server
审计特征
简化登录管理
密码策略
Windows身份验证的另一大优点是,您对Windows用户和组所做的任何更改都将自动反映在SQL Server中,因此不必单独管理它们。但是,如果在Windows用户连接到SQL Server时对其进行更改,则这些更改将在用户下次连接到SQL Server时生效。
正在配置SQL服务器安全设置
安装SQL Server时,可以选择服务器实例允许的身份验证模式。稍后,您可以在SQL Server管理工作室中提供的“服务器属性”对话框中更改设置。这些设置适用于SQL Server实例中的所有数据库和其他对象。因此,如果需要对任何数据库使用SQL Server身份验证,则必须为服务器设置混合模式。
图2.1显示了“服务器属性”对话框在选择了安全页的管理工作室中。若要开启此对话方块,请在[物件总管]中以滑鼠右键按一下伺服器执行个体名称,然后从快显功能表选取[属性],然后移至[安全性]页面。只需单击相应的单选按钮并单击“确定”提交更改即可更改身份验证模式。
添加Windows登录
要使用Windows身份验证,您的用户需要一个有效的Windows登录帐户才能访问SQL Server。然后,您可以向Windows组授予连接到SQL Server的权限,或者如果不想授予集体权限,则可以向单个Windows用户授予权限。
使用Management Studio管理安全性的一个好处是,您可以设置登录并同时提供数据库访问。若要启用Windows登入以存取SQL伺服器和探险2012数据库,请使用以下步骤,这些步骤假定本地计算机已经具有乔斯塔尔韦登录已定义。
1.打开SQL Server管理工作室,确保“对象资源管理器”窗口可见,并且您已连接到SQL Server实例。
2.展开服务器对象的树视图,然后展开安全部分。您将看到几个子节点,如图2.2所示。
3.右键单击“登录”节点,然后从弹出式菜单中选择“新建登录”,以打开“登录–新建”对话框。
4.确保选择了“Windows身份验证”单选按钮。
5.你可以通过以下两种方式之一选择Windows登录。第一种方法是直接键入域名或计算机名,然后键入反斜杠和用户的Windows登录名。第二种方法(通常更简单)是单击“搜索”按钮打开“选择用户或组”对话框。键入用户名,然后单击“检查名称”按钮以查找确切名称。如果找到了用户,完整名称将显示在框中,如图2.3所示。单击“确定”选择该用户。
6.返回登录–新建对话框,设置探险2012数据库作为登录的默认数据库。这是用户连接到服务器而不指定数据库时使用的数据库。它不限制用户仅访问该数据库。图2.4显示了Windows的最终登录乔斯塔尔韦名为Marathon的计算机上的用户,默认数据库设置为示例探险2012数据库。
提示:
从不将默认数据库设置为掌握数据库。我从痛苦的经历中说起:连接到服务器而忘记更改数据库太容易了。如果然后运行在掌握数据库中,您将有一项非常繁琐的工作,需要手动删除这些对象来清理掌握数据库。
7.接下来,授予用户访问数据库的权限。从对话框左侧的列表中选择“用户映射”页。授予用户对的访问权限探险2012通过选中数据库名称旁边的框来创建数据库。SQL Server会自动将用户映射到数据库中具有相同名称的用户,如表中第三列所示,但如果需要,您可以更改用户名。分配销售作为用户在数据库中的默认架构,方法是在默认架构列中键入该架构,或单击省略号(…)按钮从列表中选择该架构。对话框应如图2.5所示。
提示:
设置登录的默认数据库与授予对数据库的访问权限之间存在差异。默认数据库仅表示当用户登录时,SQL Server尝试更改该数据库的上下文而不指定数据库。但这并不授予在数据库中执行任何操作的任何类型的权限,甚至不允许访问数据库。这意味着可以分配用户根本无法访问的默认数据库。要使用户在访问数据库后执行任何有用的操作,您需要显式授予用户权限。
8.默认情况下,新的Windows登录可以访问服务器。但是,如果要明确拒绝对服务器的登录访问,请从“登录-新建”对话框左侧的页面列表中选择“状态”,然后选择“拒绝”单选按钮。也可以通过选择“禁用”按钮暂时禁用登录。图2.6显示了这些选项。
9.单击“确定”创建用户。
你也可以用同样的方法向SQL Server添加一个Windows组。在这种情况下,组中的任何成员都可以访问数据库服务器,无论您授予组对数据库中对象的访问权限如何。
服务器验证
使用SQL Server登录进行身份验证时,客户端应用程序必须提供有效的用户名和密码才能连接到数据库。这些SQL伺服器登入会储存在SQL伺服器中,而不会参考Windows。登录时,如果没有与用户名和密码匹配的帐户,SQL Server将引发错误,用户将无法访问SQL Server。
尽管Windows身份验证更安全,但在某些情况下,您可以选择使用SQL Server登录。对于没有广泛安全需求的简单应用程序,SQL Server身份验证更易于管理,它使您可以避免与Windows安全性纠缠不清。如果客户端运行在较旧版本的Windows (基本上比Windows 2000旧的任何版本)或非Windows操作系统上,则必须使用SQL Server登录。
要创建SQL Server登录名,请使用与Windows登录名相同的“登录名-新建”对话框。但是,不要选择Windows登录名,请键入唯一的登录名(不含域名或计算机名),然后提供密码。例如,图2.7显示了如何创建新的SQL Server登录卡斯帕制作探险2012他的默认数据库。
用于用户映射和状态的所有其他选项都与用于Windows登录的SQL Server登录相同。
通过事务处理登录
你也可以对Transact - SQL代码执行相同的操作。这CREATE LOGIN 2.1中的代码创建了一个SQL Server登录黄玉密码相当强:
CREATE LOGIN Topaz WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v';
GO
然后,授予黄玉访问的权限探险2012数据库,使用CREATE USER语句并分配默认模式,如清单2.2所示。
USE AdventureWorks2012;
GO
CREATE USER Topaz FOR LOGIN Topaz
WITH DEFAULT_SCHEMA = HumanResources;
GO
提示:
与第1级楼梯一样,如果要在SQL Server的本地实例中运行代码示例,可能需要对它们进行一些更改。清单2.2中的代码假定探险2012已安装数据库。稍后的代码示例假定您正在名为的计算机上运行代码马拉松赛跑有一个乔斯塔尔韦视窗中的使用者。请随意为您的Marathon机器命名或创建具有该名称的用户,或者根据需要更改代码。
与Windows登录一样,您可以映射服务器登录黄玉数据库中的其他名称。2.3中的代码映射黄玉致黄玉中的用户探险2012数据库:
DROP USER Topaz;
GO
CREATE USER TopazD FOR LOGIN Topaz WITH DEFAULT_SCHEMA = HumanResources;
GO
请注意sa登录
如果将SQL Server配置为支持SQL Server登录,则需要注意一个内置的SQL Server登录—即南非登录—你可能注意到在对象资源管理器的“登录”节点中到处游荡。这南非、或系统管理员登录,主要是为了与旧版SQL Server向后兼容。这南非登录被映射到系统管理员固定服务器角色,以及以南非是完整的系统管理员,对整个SQL Server实例和其中的所有数据库拥有不可撤销的权限。这确实是一个强大的登录。
你不能修改或删除南非登录。如果在安装SQL Server时选择混合模式身份验证,系统将提示您为南非用户。没有密码,任何人都可以以sa身份登录,而无需密码,并播放“让我们管理服务器”。“不用说,这是您最不希望用户做的事情。使用登录南非仅当其他系统管理员不可用或忘记了Windows密码时,才作为后门登录。如果发生这种情况,您可能需要新的管理员!
永远不要使用南非登录以访问应用程序中的数据库。如果黑客能够控制应用程序,那么这样做可以让黑客对数据库服务器进行管理级别的控制。在遥远的过去,这是一种攻击服务器的简单方法,也是一种可怕的做法。而是为要使用的应用程序设置自定义Windows或SQL Server登录名,并为该登录名授予运行应用程序所需的绝对最低权限(这实现了最小权限原则)。
提示:
实际上,你应该考虑禁用南非使用前面看到的“登录属性”对话框的“状态”页完全登录。这样,攻击者就无法使用此功能强大的登录来控制服务器实例,无论你是否拥有强大的南非密码与否。
密码政策与执行
在2005年以前的SQL Server版本中,系统管理员无法轻松地强制执行密码策略,从而使系统更安全。例如,SQL Server无法强制用户创建最小长度的强密码以及字母数字和其他字符的混合密码。如果有人想用一个字母创建密码登录,则无法配置SQL Server来阻止它。同样,也无法使密码定期过期,例如每三个月过期一次。有些人正确地认为这是不使用SQL Server登录的主要原因。
较新版本的SQL Server可以挂接到Windows Server 2003、Windows Vista或更高版本的密码策略中。密码仍存储在SQL服务器中,但SQL服务器会调用NetValidatePasswordPolicy ( )窗口应用编程接口方法,这是在Windows Server 2003中首次引入的。此API函数将Windows密码策略应用于SQL Server登录,并返回一个指示密码是否有效的值。当用户创建、设置或重置密码时,SQL Server调用此函数。
你可以通过Windows控制面板管理工具中的“本地安全设置”小程序定义Windows密码策略。密码策略部分如图2.8所示,具有默认设置。applet有一个单独的帐户锁定策略部分,如图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. |
|
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 |
创建登录名时,可以启用或禁用密码策略强制。登录–新建对话框在登录名下有一个部分,在创建SQL Server登录时启用,如图2 - 10所示。
当你使用Transact - SQL创建登录时,密码策略也适用。例如,如果在Windows 2003 Server或更高版本上运行SQL Server并启用了密码策略,则2.4中的代码将失败。
USE master;
GO
CREATE LOGIN SIMPLEPWD WITH PASSWORD = 'SIMPLEPWD';
GO
此代码失败的原因是密码不能与用户名相同。
你可以在创建或更改登录时控制策略。清单2.5中的代码关闭了检查到期和策略的选项。
ALTER LOGIN Topaz WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v',
CHECK_EXPIRATION = OFF, CHECK_POLICY = OFF;
这CHECK_EXPIRATION选项控制SQL Server是否根据策略检查密码的使用期限,以及CHECK_POLICY适用于其他策略。aMUST_CHANGE选项可强制用户在下次登录时更改密码。
如果用户多次尝试登录失败,超过了帐户锁定策略中设置的数量,管理员可以使用UNLOCK选项,如清单2.6所示。
ALTER LOGIN Topaz WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v' UNLOCK
在Windows Server 2003之前的Windows版本上运行SQL Server时,可以启用强制密码策略。但是SQL Server使用最小长度为六个字符的默认设置,检查密码是否与登录名的全部或任何部分不匹配,并且是大写字母、小写字母、数字和其他字符的混合。您不能更改这些默认值。但希望你不要在这样一个旧版本的Windows上运行SQL Server,哪怕只是因为从那时起的巨大安全改进!
摘要
在SQL Server安全性的这一级阶梯中,您已经了解了SQL Server中提供的许多身份验证选项。windows集成身份验证是最安全的,但并不总是可行的,多年来,Microsoft使SQL Server身份验证变得越来越安全。但是如果使用混合模式身份验证,请不要忘记南非登录一个非常强的密码,或者更好,禁用它!与大多数安全对象一样,你可以使用Management Studio中的良好GUI界面或T - SQL代码来创建和更改它们。如果您在现代版本的Windows上运行SQL Server,则可以挂接本地安全策略的密码策略