Stairway to SQL Server Security Level 2: Authentication

SQL Server拥有您需要的一切来保护您的服务器和数据,以抵御当今复杂的攻击。但是在您能够有效地使用这些安全特性之前,您需要了解您所面临的威胁和一些基本的安全概念。这个第一个stairway级别提供了一个基础,这样您就可以充分利用SQL Server中的安全特性,而不必浪费时间在那些不能保护您的数据的特定威胁的特性上。

身份验证是验证一个委托-一个用户或进程需要访问SQL Server数据库的过程—是谁或它声称是什么。一个主体需要唯一的标识,以便SQL Server能够确定主体拥有的权限,如果有的话。正确的身份验证是提供对数据库对象的安全访问的第一步。

SQL Server支持两种身份验证路径:Windows集成的身份验证和SQL Server身份验证。您使用的路径依赖于网络环境、访问数据库的应用程序类型以及这些应用程序的用户类型。

Windows身份验证:当用户登录到Windows时,这种身份验证形式依赖于Windows来执行重启动验证标识。访问SQLServer对象的权限被分配给Windows登录。只有在支持Windows NT或Kerberos身份验证的Windows版本上运行SQL Server时,这种类型的身份验证才可用。

SQL Server身份验证:SQL Server完全可以自己处理身份验证。在这种情况下,您可以创建独特的用户名——在SQL server和密码中称为登录。用户或应用程序连接到SQL Server并提供这些凭据以供访问。然后将权限分配给该登录,或者直接或通过成员身份登录。

在SQL Server中配置身份验证并不是这两种类型之间的简单选择。您可以通过以下两种方式配置身份验证:

混合模式验证:服务器支持SQLserver和Windows身份验证。

Windows只有模式:服务器只支持Windows身份验证。

微软强烈建议尽可能使用Windows认证。Windows具有强大的身份验证选项,包括密码策略,但Windows身份验证在实际应用程序中并不总是实用的。SQL Server身份验证可以连接到一些Windows身份验证功能,但它并不安全。

Windows身份验证

如果您将SQL服务器配置为在Windows身份验证模式下运行,那么SQLServer将假定与Windows服务器的信任关系。它假设Windows在登录到Windows时验证了用户的身份。然后,SQL Server检查用户帐户、任何Windows组和任何SQL Server角色,用户可能是决定该用户是否被允许使用各种SQL Server对象的成员。

与SQL Server身份验证相比,Windows身份验证具有几个优势,包括:

由用户单独登录,这样她就不必单独登录到SQL Server。

审计功能

简化登录管理

密码策略(在Windows Server 2003和以后)

Windows身份验证的另一大优点是,对Windows用户和组的任何更改都会自动反映在SQL Server中,因此您不必单独管理它们。但是,如果您在Windows用户连接到SQL Server时对其进行更改,那么这些更改直到用户下一次连接到SQL Server时才会生效。

配置SQL Server安全设置。

安装SQL Server时,可以选择服务器实例允许的身份验证模式。稍后,您可以在SQL Server Management Studio中更改服务器属性对话框中的设置。这些设置适用于SQL Server实例中的所有数据库和其他对象。因此,如果需要为任何数据库使用SQL Server身份验证,则必须为服务器设置混合模式。

图2.1显示了管理Studio中选择的Security页面的服务器属性对话框。要打开这个对话框,右键单击对象资源管理器中的服务器实例名,并从弹出菜单中选择Properties,然后进入安全页面。只需单击适当的单选按钮并单击OK提交更改,就可以更改身份验证模式。

 

添加一个Windows登录

要使用Windows身份验证,用户在访问SQLServer之前需要一个有效的Windows登录帐户。然后,您可以将权限授予Windows组,以连接到SQL Server,如果您不想授予集体权限,则可以向单个Windows用户授予权限。

使用管理Studio来管理安全性的优点之一是,您可以同时设置登录和提供数据库访问。要启用Windows登录访问SQL Server和AdventureWorks2012数据库,请使用以下步骤,该步骤假定本地机器已经定义了JoeStairway登录。

打开SQL Server管理Studio,确保对象资源管理器窗口可见,并连接到一个SQL服务器实例。

展开服务器对象的树视图,然后展开安全性部分。您将看到几个子节点,如图2.2所示。

右键单击Logins节点并从弹出菜单中选择New Login以打开Login - New对话框。

确保选中了Windows身份验证单选按钮。

您可以通过两种方式选择Windows登录。第一种方法是直接输入域或机器名,然后是反斜杠和用户的Windows登录名。第二种方法,通常更简单的方法是单击Search按钮打开“选择用户”或“组”对话框。键入用户名并单击Check name按钮以查找准确的名称。如果找到该用户,将会出现完整的名称,如图2.3所示。单击OK选择该用户。

6、在登录-新对话框中,将AdvultWorks2012数据库设置为登录的默认数据库。这是当用户连接到服务器而不指定数据库时使用的数据库。它不限制用户只访问该数据库。图2.4显示了一个名为马拉松的机器上的WindowsJoestRoad用户的登录结果,默认数据库设置为AdvaseAdvyWorks2012数据库。

 

图2.4。登录-新对话框使Windows登录可以访问SQLServer实例。

提示:

决不要将默认数据库设置留给主数据库。我从痛苦的经验中得到教训:相比起连接数据库,忘记数据库真的是太容易了。如果您在主数据库中运行一个创建数百个数据库对象的脚本,您将非常繁琐地删除这些对象以清理主数据库。

7、下一步,让用户访问数据库。从对话框左侧的列表中选择用户映射页。通过检查数据库名称旁边的框,授予用户访问AdvyWorks2012数据库的权限。SQLServer自动将用户映射到数据库中同名的用户,如表中的第三列中所示,尽管您可以更改用户名。在数据库中分配销售作为用户的默认模式,或者通过将其键入默认架构列或单击省略号(…)按钮来从列表中选择它。对话框应该像图2.5所示。

 

图2.5。授予AdvutuWorks2012数据库的Windows登录访问权限。

提示:

设置默认数据库用于登录和授予对数据库的访问之间存在差异。默认数据库仅意味着当用户登录而不指定数据库时,SQLServer试图将上下文更改为该数据库。但这不允许在数据库中执行任何权限,甚至允许访问数据库。这意味着可以分配一个用户根本无法访问的默认数据库。为了让用户在访问数据库后做任何有用的事情,您需要显式地授予用户权限。

8、默认情况下,新的Windows登录可以访问服务器。但是,如果要明确拒绝对服务器的登录访问,请从登录左侧的页面列表中选择“状态”-“新建”对话框,然后选择“拒绝单选”按钮。还可以通过选择禁用的按钮暂时禁用登录。图2.6显示了这些选项。

 

图2.6。授予或拒绝对服务器的访问并暂时禁用登录帐户的选项。

9、单击OK创建用户。

您还可以以相同的方式向SQLServer添加Windows组。在这种情况下,该组的任何成员都可以访问数据库服务器,无论您将该组访问到数据库中的对象。

使用用户名和密码

当使用SQLServer登录进行身份验证时,客户端应用程序必须提供有效的用户名和密码才能连接到数据库。这些SQL Server登录保存在SQLServer中,不引用Windows。登录时,如果没有帐户与用户名和密码匹配,则SQLServer会引发错误,用户无法访问SQLServer。

尽管Windows身份验证更安全,但在某些情况下,您可能会选择使用SQLServer登录。对于没有广泛安全需求的简单应用程序,SQLServer身份验证更容易管理,并且允许您避免与Windows安全性纠缠在一起。如果客户端运行在较旧版本的Windows(基本上是Windows2000以上的版本)或非Windows操作系统,则必须使用SQLServer登录。

若要创建SQLServer登录,请使用与Windows登录相同的登录新对话框。但不是选择Windows登录,而是键入没有域或机器名称的唯一登录名,并提供密码。例如,图2.7显示了如何创建一个新的SQLServer登录CASPER,并将AdvultWorks2012作为默认数据库。

 

图2.7。创建SQL Server登录名。

用户映射和状态的所有其他选项都是与Windows登录相同的SQL Server登录。通过Transact-SQL登录SQL Server

您还可以使用Transact-SQL代码执行相同的操作。清单2.1中的创建登录代码创建了一个具有相当强密码的SQLServer登录黄玉:

清单2.1。用T-SQL创建新SQL Server登录的代码。

然后,为了授予Topaz访问AdvultWorks2012数据库,使用CREATEUSER语句并分配默认模式,如清单2.2所示。

清单2.2。创建与SQL Server登录相关的数据库用户的代码。

提示:

与1级楼梯一样,如果您想在SQLServer的本地实例中运行这些代码示例,则可能需要对代码示例进行一些更改。清单2.2中的代码假定您安装了AdvyWorks2012数据库。稍后的代码示例假定您在一个名为马拉松的机器上运行代码,并且在Windows中有一个JoestAuto用户。请随意命名您的机器马拉松或创建具有该名称的用户,或适当地更改代码。

与Windows登录一样,您可以将服务器登录黄玉映射到数据库中的其他名称。清单2.3中的代码将Topaz映射到AdvutuWorks2012数据库中的TopAZD用户:

清单2.3。删除现有用户的代码然后添加一个数据库用户,其名称与登录名不同。

谨防SA登录

如果配置SQL Server以支持SQLServer登录,则有一个内置的SQLServer登录,您需要注意SA登录,您可能注意到在对象资源管理器的登录节点中挂起了SO登录。SA或系统管理员登录主要包括与旧版本的SQLServer的向后兼容性。SA登录被映射到系统管理员固定服务器角色,登录到SQLServer作为SA的任何人都是一个完整的系统管理员,对整个SQL Server实例及其所有数据库具有不可撤销的权限。这确实是一个强大的登录。

您不能修改或删除sa登录。如果您在安装SQL Server时选择混合模式身份验证,系统会提示您输入sa用户的密码。如果没有密码,任何人都可以使用无密码登录,然后播放“让我们管理服务器”。不用说,这是您希望用户做的最后一件事。如果其他系统管理员不可用或忘记了他们的Windows密码,请使用sa登录名且仅将其作为后门进行登录。如果发生这种情况,您可能需要新的管理员!

从不,EVER,使用sa登录访问应用程序中的数据库。如果黑客能够控制应用程序,那么这样做可能会给黑客管理员级的数据库服务器控制权。在遥远的过去,这是一种攻击服务器的简单方法,是一种可怕的做法。相反,请为应用程序设置自定义的Windows或SQL Server登录名,并为该登录名提供运行应用程序所需的绝对最低权限(实现最小权限原则)。

小窍门:

实际上,您应该考虑完全禁用sa登录,无论您是否拥有强大的sa密码,使用前面看到的“登录属性”对话框的“状态”页面。这样,攻击者无法使用这个全功能登录来获得对服务器实例的控制权。

密码策略和执行

在2005年以前的SQL Server版本中,系统管理员没有简单的方法来执行可能有助于使系统更安全的密码策略。例如,SQL Server无法强制用户创建最小长度的强密码以及字母数字和其他字符的混合。如果有人想使用单个字母作为密码创建登录,则无法将SQL Server配置为阻止它。同样,没有办法导致密码定期到期,例如每三个月。有些人正确地认为这是不使用SQL Server登录的主要原因。

更新版本的SQL Server可以挂接到Windows Server 2003,Windows Vista或更高版本的密码策略中。密码仍存储在SQL Server中,但SQL Server调用了Windows Server 2003中首次引入的NetValidatePasswordPolicy()Windows API方法。该API函数将Windows密码策略应用于SQLServer登录,并返回一个值指示密码是否有效。 SQL Server在用户创建,设置或重置密码时调用此函数。

您可以通过Windows控制面板的管理工具中的本地安全设置小程序来定义Windows密码策略。密码策略部分如图2.8所示,默认设置。该小程序有一个单独的账户锁定策略部分,如图2.9所示,当用户进行太多不成功的登录尝试时,该部分生效。默认情况下,在全新Windows安装中禁用锁定策略。

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

图2.9。 Windows本地安全策略小程序,显示默认帐户锁定策略。

表2.1列出了密码策略以及默认值和一些关于它们如何工作的说明。

表2.1。 Windows密码策略设置。

您可以在创建登录时启用或禁用密码策略实施。登录 - 新建对话框在创建登录名时启用了一个部分,如图2-10所示。

图2-10。为新登录实施密码策略。

当您使用Transact-SQL创建登录时,密码策略也适用。例如,如果您在Windows 2003 Server或更高版本上运行SQL Server并启用了密码策略,则清单2.4中的代码将失败。

清单2.4。尝试使用违反密码策略的密码创建登录名。

此代码失败的原因是密码不能与用户名相同。

您可以在创建或更改登录时控制策略。清单2.5中的代码关闭了检查过期和策略的选项。

清单2.5。仅更改登录以禁用此登录密码策略的代码。

CHECK_EXPIRATION选项控制SQLServer是否根据策略检查密码的年龄,并将CHECK_POLICY应用于其他策略。 MUST_CHANGE选项可用,强制用户在下次登录时更改密码。

如果用户尝试登录失败的次数过多,超出帐户锁定策略中设置的次数,管理员可以使用UNLOCK选项重置帐户,如清单2.6所示。

清单2.6。代码解锁由于失败的登录尝试失败而被锁定的登录名。

在Windows Server 2003之前的Windows版本上运行SQL Server时,您可以启用强制密码策略。但是,SQL Server使用最小长度为六个字符的默认设置,检查密码与全部或部分登录名称不匹配,并且是大写字母,小写字母,数字和其他字符的混合。您无法更改这些默认设置。但是,希望你没有在这样一个旧版本的Windows上运行SQL Server,如果仅仅是因为从那时起就有了巨大的安全性改进!

概要

在SQL Server安全性的这一级别中,您已经了解了SQL Server中可用的许多身份验证选项。 Windows集成身份验证是最安全的,但并不总是可行,并且多年来Microsoft已经使SQL Server身份验证更好更安全。但是,如果您使用混合模式身份验证,请不要忘记为sa登录提供一个非常强大的密码,或者甚至更好地禁用它!像大多数安全对象一样,您可以使用Management Studio中的良好GUI界面或T-SQL代码创建和更改它们。如果您在现代版本的Windows上运行SQL Server,则可以挂接本地安全策略的密码策略。


  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值