zoukankan      html  css  js  c++  java
  • 外文转译:SQL Server安全级别2的阶梯:身份验证

    SQL Server安全级别2的阶梯:身份验证

    作者:Don Kiely, 2014/06/18

    该系列

    本文是“Stairway系列:SQL Server安全性的阶梯”的一部分

    SQL Server提供了保护服务器和数据免受当今复杂攻击所需的一切。但是,在您有效使用这些安全功能之前,您需要了解您面临的威胁以及一些基本的安全概念。这第一阶梯级别提供了一个基础,以便您可以充分利用SQL Server中的安全功能,而不会浪费时间在功能上无所事事,以防止对数据的特定威胁。

    验证是验证主体(需要访问SQL Server数据库的用户或进程)是谁或声称是什么的过程。主体需要唯一标识,以便SQL Server可以确定主体拥有哪些权限(如果有)。正确认证是提供对数据库对象的安全访问的必要的第一步。

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

    • 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身份验证。

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

    Windows身份验证

    如果将SQL Server配置为在Windows身份验证模式下运行,则SQL Server将假定与Windows Server存在信任关系。它假定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显示了Management Studio 的“ 服务器属性”对话框,并选择了“安全性”页面。要打开此对话框,请右键单击对象资源管理器中的服务器实例名称,然后从弹出菜单中选择“属性”,然后转到“安全性”页面。您只需单击相应的单选按钮,然后单击“确定”即可更改身份验证模式。

    图2.1。配置SQL Server实例的身份验证模式。

    添加Windows登录

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

    使用Management Studio管理安全性的好处之一是您可以设置登录并同时提供数据库访问权限。要启用Windows登录来访问SQL Server和AdventureWorks2012数据库,请使用以下步骤,这些步骤假定本地计算机已经定义JoeStairway登录名。

    1. 打开SQL Server Management Studio并确保“对象资源管理器”窗口可见,并且连接到SQL Server实例。
    2. 展开服务器对象的树视图,然后展开“安全”部分。你会看到几个子节点,如图2.2所示。

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

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

    图2.3。找到一个Windows登录名添加到SQL Server。

    1. 返回登录 - 新建对话框,将AdventureWorks2012数据库设置为登录的默认数据库。这是当用户连接到服务器并且不指定数据库时使用的数据库。它不限制用户访问该数据库。图2.4显示了名为Marathon 的Windows JoeStairway用户的登录名,默认数据库设置为示例AdventureWorks2012数据库。

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

    小费:

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

    1. 接下来,让用户访问一个数据库。从对话框左侧的列表中选择“用户映射”页面。通过选中数据库名称旁边的框,授予用户对AdventureWorks2012数据库的访问权限SQL Server会自动将用户映射到数据库中具有相同名称的用户,正如您可以在表中的第三列中看到的那样,但是如果需要,可以更改用户名。销售额分配为数据库中的用户默认模式,方法是在默认模式列中键入或单击省略号(...)按钮以从列表中选择它。对话框应该如图2.5所示。

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

    小费:

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

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

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

    1. 单击确定以创建用户。

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

    SQL Server身份验证

    当您使用SQL Server登录进行身份验证时,客户端应用程序必须提供有效的用户名和密码才能连接到数据库。这些SQL Server登录保存在SQL Server中,而不参考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登录Casper,并将AdventureWorks2012作为默认数据库。

    图2.7。创建一个SQL Server登录。

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

    SQL Server通过Transact-SQL进行登录

    您也可以使用Transact-SQL代码执行相同的操作。CREATE LOGIN清单2.1中代码创建了一个具有相当强密码的SQL Server登录Topaz

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

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

    然后,要授予Topaz对AdventureWorks2012数据库的访问权限,请使用该CREATE USER语句并指定一个默认模式,如清单2.2所示。

    USE AdventureWorks2012;
    GO
    
    CREATE USER Topaz 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登录进行登录。如果发生这种情况,您可能需要新的管理员!

    永远,永远,使用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密码策略应用于SQL Server登录,并返回一个值指示密码是否有效。SQL Server在用户创建,设置或重置密码时调用此函数。

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

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

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

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

    类别 政策名称 默认 笔记
    密码政策 强制密码历史记录 记住0个密码 防止用户重复使用旧密码,例如在两个密码之间交替。
    最小密码长度 0个字符 使用它来要求更长的密码,以使它们更难以破解。
    密码必须符合复杂性要求 字母数字和其他字符的最小组合,不包含用户名。
    密码过期 最大密码年龄 42天 提示用户更改密码之前的天数。
    最小密码年龄 0天 允许用户更改密码之前的天数。
    帐户锁定政策 帐户锁定持续时间 不适用 如果锁定阈值已启用,则以分钟为单位的时间表示帐户被锁定。
    帐户锁定阈值 0次无效的登录尝试 帐户被锁定之前登录失败的最大次数。
    重置帐户锁定计数器后 不适用 在几分钟之后,重试失败的计数器; 启用锁定阈值时启用。

    表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

    清单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集成身份验证是最安全的,但并不总是可行的,多年来微软已经使SQL Server身份验证更好更安全。但是,如果您使用混合模式身份验证,请不要忘记给sa登录一个非常强大的密码,或者甚至更好,禁用它!与大多数安全对象一样,您可以使用Management Studio中的良好GUI界面或T-SQL代码创建和更改它们。如果您在现代版本的Windows上运行SQL Server,则可以挂接本地安全策略的密码策略。

     

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

    转译地址:http://www.sqlservercentral.com/articles/Stairway+Series/109975/

  • 相关阅读:
    Netty 源码解析(八): 回到 Channel 的 register 操作
    Netty 源码解析(七): NioEventLoop 工作流程
    SVM入门
    Understanding Neural Networks Through Deep Visualization
    如何直观的解释back propagation算法?
    caffe层解读系列-softmax_loss
    深度学习与计算机视觉系列(10)_细说卷积神经网络
    Ubuntu 14.04 Nvidia显卡驱动手动安装及设置
    贾扬清分享_深度学习框架caffe
    caffe卷积输入通道如何到输出通道
  • 原文地址:https://www.cnblogs.com/fenglianchen/p/8018172.html
Copyright © 2011-2022 走看看