Stairway to SQL Server Security Level 2: Authentication - SQLServerCentral

身份验证是指验证主体-需要访问SQLServer数据库的用户或进程-是否是它声称的对象或对象的过程。主体需要唯一标识,以便SQLServer能够确定主体具有哪些权限(如果有的话)。正确的身份验证是提供对数据库对象的安全访问的必要的第一步。

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

  • Windows身份验证这种形式的身份验证依赖于Windows,当用户登录到Windows时,要执行繁重的身份验证。然后将访问SQLServer对象的权限分配给Windows登录。这种类型的身份验证只有在SQLServer运行在支持Windows NT或Kerberos身份验证的Windows版本上时才可用,该版本自Windows 2000以来一直是标准的。
  • SQLServer身份验证:SQLServer完全可以单独处理身份验证。在这种情况下,您可以创建唯一的用户名-称为登录在SQLServer和密码中。用户或应用程序连接到SQLServer,并为访问提供这些凭据。然后直接或通过角色中的成员身份将权限分配给该登录名。

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

  • 混合模式认证服务器支持SQLServer和Windows身份验证。
  • Windows纯模式服务器只支持Windows身份验证。

Microsoft强烈建议尽可能使用Windows身份验证。Windows具有健壮的身份验证选项,包括密码策略,但Windows身份验证在实际应用程序中并不总是实用的。SQLServer身份验证可以连接到其中的一些Windows身份验证功能,但它并不是那么安全。

Windows身份验证

如果将SQLServer配置为在Windows身份验证模式下操作,则SQLServer将假定与Windows Server建立信任关系。它假设Windows在用户登录到Windows时对其进行身份验证。然后,SQLServer检查用户帐户、任何Windows组和用户可能参与的任何SQLServer角色,以确定是否允许该用户处理各种SQLServer对象。

与SQLServer身份验证相比,Windows身份验证有几个优点,包括:

  • 用户只需登录一次,就不必单独登录SQLServer
  • 审计特征
  • 简化登录管理
  • 密码策略(Windows Server 2003及更高版本)

Windows身份验证的另一个优点是,对Windows用户和组所做的任何更改都会自动反映在SQLServer中,因此不必单独管理它们。但是,如果在Windows用户连接到SQLServer时对其进行更改,则这些更改在用户下次连接到SQLServer之前不会生效。

配置SQLServer安全设置

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

图2.1显示了“服务器属性”对话框在ManagementStudio中,选择了安全页。要打开此对话框,右键单击对象资源管理器中的服务器实例名称,然后从弹出菜单中选择“属性”,然后转到“安全”页。只需单击适当的单选按钮并单击OK提交更改即可更改身份验证模式。

图2.1.为SQLServer实例配置身份验证模式。

添加Windows登录

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

使用ManagementStudio来管理安全性的好处之一是您可以同时设置登录并提供数据库访问。若要启用Windows登录名访问SQLServer和AdventureWorks 2012数据库中,使用以下步骤,这些步骤假定本地机器已经具有乔斯泰已定义的登录。

  1. 打开SQLServerManagementStudio,并确保对象资源管理器窗口可见,并且您已连接到SQLServer实例。
  2. 展开服务器对象的树视图,然后展开Security部分。您将看到几个子节点,如图2.2所示。

图2.2.服务器对象资源管理器的安全部分,您可以在其中定义登录。

  1. 右键单击“登录”节点,然后从弹出菜单中选择“新建登录”,以打开“登录-新”对话框。
  2. 确保选中了Windows身份验证单选按钮。
  3. 您可以通过两种方式中的任何一种选择Windows登录名。第一种方法是直接键入域或机器名,然后为用户使用反斜杠和Windows登录名。第二种方法(通常更容易)是单击“搜索”按钮,打开“选择用户或组”对话框。键入用户名,然后单击“检查名称”按钮,以找到确切的名称。如果找到用户,全名将出现在框中,如图2.3所示。单击OK选择该用户。

图2.3.查找要添加到SQLServer的Windows登录名。

  1. 回到“登录-新建”对话框中,设置AdventureWorks 2012数据库作为登录名的默认数据库。这是当用户连接到服务器而不指定数据库时使用的数据库。它并不限制用户只访问该数据库。图2.4显示了Windows的最终登录乔斯泰用户在名为“马拉松”的机器上使用,默认数据库设置为示例。AdventureWorks 2012数据库。

图2.4.“登录-新建”对话框使Windows登录名能够访问SQLServer实例。

提示:

绝不可能将默认数据库设置为师父数据库。我说的是痛苦的经历:连接到服务器而忘记更改数据库太容易了。如果然后运行一个脚本,该脚本将在师父数据库中,您需要手动删除这些对象,以清除师父数据库。

  1. 接下来,让用户访问数据库。从对话框左侧的列表中选择“用户映射”页面。授予用户对AdventureWorks 2012通过选中数据库名称旁边的框来创建数据库。SQL Server自动将用户映射到数据库中具有相同名称的用户,正如您在表的第三列中看到的那样,尽管您可以根据需要更改用户名。指派销售作为数据库中用户的默认模式,可以在默认模式列中键入该模式,或者单击省略号(…)。按钮从列表中选择它。对话框应该如图2.5所示。

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

提示:

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

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

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

  1. 单击OK创建用户。

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

SQLServer身份验证

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

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

若要创建SQLServer登录名,请使用与Windows登录相同的Login-New对话框。但是,不要选择Windows登录名,而是键入没有域名或机器名称的唯一登录名,并提供密码。例如,图2.7显示了如何创建新的SQLServer登录名卡斯珀并使AdventureWorks 2012他的默认数据库。

图2.7.创建SQLServer登录名。

用于用户映射和状态的所有其他选项都是与Windows登录相同的SQLServer登录。

通过Transact-SQL登录SQLServer

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

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

清单2.1。使用T-SQL创建新SQLServer登录名的代码.

然后,允许黄玉访问AdventureWorks 2012数据库,使用CREATE USER语句并分配默认模式,如清单2.2所示。

USE AdventureWorks2012;
GO

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

清单2.2.创建与SQLServer登录名关联的数据库用户的代码。

提示:

与第一级阶梯一样,如果要在SQLServer的本地实例中运行代码示例,则可能需要对代码示例进行一些更改。清单2.2中的代码假设您有AdventureWorks 2012数据库已安装。稍后的代码示例假设您在名为马拉松并且有一个乔斯泰Windows中的用户。可以随意命名您的机器马拉松,或者创建一个具有该名称的用户,或者酌情更改代码。

就像Windows登录一样,您可以映射服务器登录名黄玉数据库中的其他名称。清单2.3中的代码映射黄玉TopazD中的用户。AdventureWorks 2012数据库:

DROP USER Topaz;
GO
CREATE USER TopazD FOR LOGIN Topaz WITH DEFAULT_SCHEMA = HumanResources;
GO

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

小心SA登录

如果将SQLServer配置为支持SQLServer登录,则需要注意一个内置的SQLServer登录名登录-您可能已经注意到在对象资源管理器的登录节点中徘徊。大或系统管理员,登录主要是为了向后兼容SQLServer的旧版本。大登录被映射到系统管理员修正了服务器角色,任何登录到SQLServer的是一个完整的系统管理员,对整个SQLServer实例及其中的所有数据库具有不可撤销的权限。这确实是一个强大的登录。

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

永远不要用登录以访问应用程序中的数据库。如果黑客能够控制应用程序,那么这样做可以让黑客在管理级别上控制您的数据库服务器。在遥远的过去,这是攻击服务器的一种简单方法,是一种可怕的做法。相反,可以设置自定义Windows或SQLServer登录以供应用程序使用,并为该登录提供运行应用程序所需的绝对最小权限(该权限实现了最小特权原则)。

提示:

实际上,您应该考虑禁用使用前面看到的“登录属性”对话框的状态页完全登录。这样,攻击者就不能使用这个功能强大的登录来控制您的服务器实例,而不管您是否具有强大的身份。密码或不密码。

密码政策与执行

在2005年以前的SQLServer版本中,系统管理员执行有助于提高系统安全性的密码策略是不容易的。例如,SQLServer无法强制用户创建最小长度的强密码以及字母、数字和其他字符的混合。如果有人想用一个字母为密码创建登录名,则无法配置SQLServer来阻止它。同样,没有办法使密码定期过期,例如每三个月一次。有些人正确地认为这是不使用SQLServer登录的一个主要原因。

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

可以通过Windows控制面板的管理工具中的本地安全设置小程序定义Windows密码策略。密码策略部分显示在图2.8中,其中包含默认设置。applet有一个单独的帐户锁定策略部分,如图2.9所示,当用户尝试太多登录失败时,这个部分就会生效。默认情况下,在新的Windows安装中禁用锁定策略。

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

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

表2.1列出了密码策略和默认值,并说明了它们的工作方式。

范畴策略名称违约注记
密码策略强制密码历史记住0密码防止用户重复使用旧密码,例如在两个密码之间交替使用。
最小密码长度0字符使用它需要更长的密码,以使它们更难破解。
密码必须符合复杂性要求。残废字母数字和其他字符的最小混合,并且不包含用户名。
密码过期最大密码年龄42天提示用户更改其密码的天数。
最低密码年龄0天允许用户更改密码的天数。
帐户锁定政策帐户锁定期限不适用如果启用锁定阈值,则帐户被锁定的时间以分钟为单位。
帐户锁定阈值0无效登录尝试在帐户被锁定之前,尝试登录失败的最大次数。
重置帐户锁定计数器后不适用重置失败尝试的计数器的时间(以分钟为单位);启用锁定阈值时启用。

表2.1.Windows密码策略设置。

您可以在创建登录时启用或禁用密码策略强制执行。Login-New对话框在登录名下有一个节,在创建SQLServer登录时启用该部分,如图2-10所示。

图2-10强制新登录的密码策略。

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

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

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

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

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

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

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

CHECK_EXPIRATION选项控制SQLServer是否根据策略和CHECK_POLICY适用于其他政策。阿MUST_CHANGE选项可以强制用户在下一次登录时更改密码。

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

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

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

在Windows Server 2003之前的Windows版本上运行SQLServer时,可以启用“强制密码策略”。但SQLServer使用至少6个字符的默认设置,检查密码是否与登录名的全部或任何部分不匹配,并且是大写字母、小写字母、数字和其他字符的组合。您不能更改这些默认值。但是,希望您没有在这样一个旧版本的Windows上运行SQLServer,如果仅仅是因为从那时起就有了巨大的安全改进!

摘要

在SQLServer安全性阶梯的这个级别上,您了解了SQLServer中可用的许多身份验证选项。Windows集成身份验证是最安全的,但并不总是可行的,多年来,Microsoft使SQL Server身份验证变得更好、更安全。但是,如果使用混合模式身份验证,请不要忘记将登录一个非常强的密码,或者,更好的,禁用它!与大多数安全对象一样,您可以使用ManagementStudio中漂亮的GUI界面或T-SQL代码来创建和更改它们。如果在现代版本的Windows上运行SQL Server,则可以连接到本地安全策略的密码策略。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值