SQLServer安全性阶梯2的阶梯:身份验证

SQLServer安全性阶梯2的阶梯:身份验证

作者: Don Kiely, 2014/06/18

这篇文章是阶梯系列的一部分: SQL Server安全性的阶梯

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

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

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

 

 

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

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

 

 

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

 

 

l   混合模式验证:服务器支持SQL serverWindows身份验证。

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

 

 

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

 

 

 Windows身份验证

 

 

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

 

 

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

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

l   审计功能

l   简化登录管理

l   密码策略(Windows Server 2003及以后)  

 

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

 

 

配置SQL Server安全设置

 

 

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

 

 

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

 2.1。为SQL服务器实例配置身份验证模式。

 

添加一个Windows登录

 

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

 

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

 

 

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

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

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

 

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

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

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

2.3。查找Windows登录名以添加到SQLServer。


6.回到Login - New对话框,将AdventureWorks2012数据库设置为登录的默认数据库。这是当用户连接到服务器并且没有指定数据库时使用的数据库。它不限制用户只访问该数据库。图2.4显示了在名为Marathon的机器上的Windows JoeStairway用户的结果登录,并将默认数据库设置为示例的AdventureWorks2012数据库。

 

2.4。登录 - 新建对话框使Windows登录可以访问SQL Server实例。

 

提示:

永远不要将默认数据库设置为主数据库。我从痛苦的经验中总结:连接到服务器和忘记更改数据库太容易了。如果您运行一个在主数据库中创建数百个数据库对象的脚本,那么您将会有一个非常繁琐的工作:手动删除这些对象,以清理主数据库。

1. 1.接下来,让用户访问数据库。从对话框左侧的列表中选择UserMapping页面。通过检查数据库名称旁边的复选框,授予用户访问AdventureWorks2012数据库的权限。SQL Server自动将用户映射到数据库中具有相同名称的用户,正如您可以在表的第三列中看到的那样,即使你可以更改用户名。在数据库中指定Sales作为用户的默认模式,或者通过在默认的模式列中键入它,或者单击省略号(…)按钮从列表中选择它。对话框应该如图2.5所示。图2.5。授予对AdventureWorks2012数据库的Windows登录访问权限。

2. 

3. 提示:

4. 设置一个登录和授予访问数据库的默认数据库之间是有区别的。默认数据库仅仅意味着SQL Server尝试在用户登录而不指定数据库时将上下文更改为该数据库。但这并没有授予任何权限来在数据库中执行任何操作,甚至不允许访问数据库。这意味着可以为用户分配一个无法访问的默认数据库。对于用户在访问数据库时做任何有用的事情,您需要授予用户权限。

5. 8.默认情况下,新的Windows登录可以访问服务器。但是,如果您想要拒绝对方服务器的登录访问,请从login - New对话框左侧的页面列表中选择Status,并选择deny单选按钮。您还可以通过选择禁用按钮来临时禁用登录。图2.6显示了这些选项。

 

2.6。允许或拒绝访问服务器并暂时禁用登录帐户的选项。

 

9.单击OK以创建用户。

 

您还可以以同样的方式向SQL Server添加一个Windows组。在这种情况下,组中的任何成员都可以访问数据库服务器,无论您将该组提供给数据库中的对象。

 

SQL Server身份验证

 

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

 

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

 

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

Figure 2.7. Creating a SQL Server login.

All of the other options for user mapping and status are the same SQL Server logins as they are for Windows logins.

SQL Server Logins via Transact-SQL

2.7。创建一个SQLServer登录。

 

用户映射和状态的所有其他选项与SQL登录名相同,都与Windows登录名相同。

 

SQL Server通过Transact-SQL进行登录

您还可以使用Transact-SQL代码执行相同的操作。CREATE LOGIN2.1中的代码创建了一个具有相当强密码的SQL Server登录Topaz

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

GO

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

 

然后,要授予TopazAdventureWorks2012数据库的访问权限,请使用该CREATE USER语句并分配一个默认模式,如例2.2所示。 

USE AdventureWorks2012;

GO

 

CREATE USER Topaz FOR LOGIN Topaz

    WITH DEFAULT_SCHEMA = HumanResources;

GO

2.2。用于创建与SQLServer登录关联的数据库用户的代码。

 

提示:

1级阶梯一样,如果您想在本地SQL Server实例中运行它们,您可能需要对代码示例进行一些更改。例2.2中的代码假定您已安装AdventureWorks2012数据库。稍后的代码示例假设您正在名为Marathon的计算机上运行代码,并且在Windows中有JoeStairway用户。您可以随意为您的机器Marathon命名或创建一个具有该名称的用户,或者根据需要更改代码。

 

Windows登录一样,您可以将服务器登录Topaz映射到数据库中的其他名称。例2.3中的代码将Topaz映射到AdventureWorks2012数据库中的TopazD用户: 

DROP USER Topaz;

GO

CREATE USER TopazD FOR LOGIN Topaz WITH DEFAULT_SCHEMA = HumanResources;

GO

2.3。删除现有用户的代码然后添加名称不同于登录名的数据库用户。

 

注意sa登录

如果您将SQL Server配置为支持SQL Server登录,则需要注意一个内置SQL Server登录 - sa登录 - 您可能已经注意到它在对象资源管理器的登录节点中闲逛。该SA,或系统管理员,登录包括主要用于与旧版本的SQL Server的向后兼容性。该SA登录映射到系统管理员固定服务器角色,任何谁到SQL Server登录作为SA是一个完整的系统管理员,以在整个SQL Server实例不可撤销的权利和它所有的数据库。确实,这是一个强大的登录。

 

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

 

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

 

提示:

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

 

密码策略和执行

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

 

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

 

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

 

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

 

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

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

 

2.1Windows密码策略设置。

 

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

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.

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

 

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

 

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选项控制SQL Server是否根据策略检查密码的年龄并CHECK_POLICY应用于其他策略。有一个MUST_CHANGE选项可以强制用户在下次登录时更改密码。

 

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

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

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

 

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

 

概要

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

 

 

本文是 SQL Server安全性阶梯的一部分。

 


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

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值