第14周翻译:SQL Server的阶梯安全级别2
SQL Server的阶梯安全级别2:身份验证
源自:http://www.sqlservercentral.com/articles/Stairway+Series/109975/
作者:Don Kiely
2014/06/18
翻译:刘琼滨 谢雪妮 许雅莉 赖慧芳
该系列
本文是阶梯系列的一部分:SQL Server的阶梯
SQL Server拥有一切您需要确保您的服务器和数据对今天的复杂攻击。 但在你可以使用这些有效安全特性,您需要了解你所面对的威胁和一些基本的安全概念。 第一阶梯水平提供了基础,这样您就可以充分利用安全特性在SQL Server上浪费时间特性,什么都不做来防止特定威胁您的数据。
身份验证是验证的过程,一个校长,用户或进程需要访问SQL Server数据库它声称是什么人或者什么东西。 主要需要的唯一标识,以便SQL Server可以确定哪些权限校长,如果任何。 正确的身份验证是必要的第一步提供安全访问数据库对象。
SQL Server身份验证支持两种路径:Windows集成验证和SQL Server身份验证。 你使用的路径依赖于网络环境,将访问数据库类型的应用程序,这些应用程序的类型的用户。
- Windows身份验证:这种形式的身份验证依赖于Windows的重型lifting-validating身份当用户登录窗口。 权限访问SQL Server对象被分配到Windows登录。 这种类型的身份验证是只有当SQL Server上运行一个版本的Windows,支持Windows NT或Kerberos身份验证,几乎从Windows 2000标准。
- SQL Server身份验证:SQL Server可以照顾自己完全验证。 在这种情况下,您可以创建惟一的用户称谓登录在SQL服务器(密码。 用户或应用程序连接到SQL Server和供应这些凭据访问。 然后分配权限,登录直接或通过加入一个角色。
在SQL Server配置身份验证并不是一个简单的非此即彼的选择这两种类型。 您可以配置身份验证在两个方面:
- 混合模式验证:服务器同时支持SQL server和Windows身份验证。
- Windows只有模式:服务器仅支持Windows身份验证。
微软强烈建议尽可能使用Windows身份验证。 Windows有可靠的身份验证选项,包括密码策略,但Windows身份验证并不总是实用在真实的应用程序中。 SQL Server身份验证可以钩到一些Windows身份验证功能,但它不是安全的。
Windows身份验证
如果您配置您的SQL服务器运行在Windows身份验证模式中,SQL Server假定一个信任关系与Windows服务器。 它假定Windows身份验证的用户登录时。 SQL Server然后检查用户帐户,任何Windows组和任何SQL服务器角色的用户可能是一个成员,以确定该用户是否允许使用各种SQL Server对象。
Windows身份验证在SQL Server身份验证有几个优点,包括:
- 一个用户登录的,所以她没有分别登录SQL Server
- 审计功能
- 简化登录管理
- 密码策略(在Windows Server 2003和后)
Windows身份验证的另一个优点是,您所作的改变Windows用户和组将自动反映在SQL Server中,所以你不必分别管理。 然而,如果您更改Windows用户连接到SQL Server时,这些变化不会生效,直到下次用户连接到SQL Server。
配置SQL服务器安全设置
当你安装SQL Server,您可以选择服务器实例将允许的身份验证模式。 以后你可以更改设置在服务器属性对话框可在SQL Server Management Studio。 这些设置应用于所有数据库和其他对象的SQL Server实例。 如果你需要使用SQL Server身份验证对于任何数据库,设置混合模式为服务器。
图2.1显示了服务器属性对话框与安全管理工作室页面选中。 打开这个对话框,右键单击该服务器实例名称在对象资源管理器中,并且从弹出菜单中选择“属性”,进入安全页面。 你改变身份验证模式只需点击适当的单选按钮,然后单击OK以提交更改。
图2.1。 SQL服务器实例配置的身份验证模式。
添加一个Windows登录
使用Windows身份验证,您的用户将需要一个有效的Windows登录帐户才能访问SQL服务器。 你可以把权限授予一个Windows组连接到SQL Server,或者你可以把权限授予个人Windows用户如果你不想集体授予权限。
的一个优点使用管理工作室管理安全,您可以设置登录并提供数据库访问在同一时间。 启用Windows登录SQL服务器和访问AdventureWorks2012数据库,使用以下步骤,它假定本地机器上已经有一个JoeStairway登录的定义。
- 打开SQL Server Management Studio并确保对象资源管理器窗口是可见的,并且你连接到一个SQL服务器实例。
- 扩大服务器对象的树视图,然后展开安全部分。 您将看到几个子节点,如图2.2所示。
图2.2。 服务器的安全部分的对象资源管理器,您可以定义登录。
- 右键单击登录节点并从弹出菜单中选择新的登录打开登录对话框——新。
- 确保Windows身份验证单选按钮被选中。
- 您可以选择Windows登录两种方式。 第一种方式是直接输入域或机器的名字,然后一个反斜杠,Windows用户的登录名。 第二,一般容易,方法是单击搜索按钮打开对话框选择用户或组。 输入用户名,点击“检查名称”按钮找到确切的名字。 如果用户发现,完整的名称将会出现在箱子里,如图2.3所示。 点击OK以选择该用户。
图2.3。 找到一个Windows登录添加到SQL Server。
- 回到登录——新的对话框,设置AdventureWorks2012数据库登录的默认数据库。 这个数据库时使用的用户连接到服务器并没有指定一个数据库。 它不限制用户只能访问数据库。 图2.4显示了生成的登录窗口JoeStairway用户机器上叫马拉松,与一个默认的数据库设置为样本AdventureWorks2012数据库。
图2.4。 登录——新对话框允许Windows登录访问SQL服务器实例。
提示:
从来没有保留默认设置为数据库主数据库。 我说从痛苦的经验:太容易连接到服务器,忘了修改数据库。 如果你运行一个脚本,该脚本创建数以百计的数据库对象主数据库,您将有一个很乏味的工作删除这些对象手动清理主数据库。
- 接下来,给用户访问数据库。 从列表中选择用户映射页左边的对话框。 授予用户访问AdventureWorks2012数据库通过检查框旁边的数据库名称。 SQL服务器会自动将用户映射到用户数据库中具有相同名称的,正如你所看到的在第三列在表中,尽管你可以更改用户名,如果您想要的。 分配销售数据库中用户的默认模式,通过键入它在默认模式列或单击省略号(…)按钮从列表中选择它。 对话框如图2.5。
图2.5。 授予一个Windows登录访问AdventureWorks2012数据库。
提示:
是有区别的设置一个默认的数据库登录和授权访问数据库。 仅仅意味着SQL Server的默认数据库试图改变环境数据库,当用户登录时没有指定一个数据库。 但这并不授予任何权限数据库中做任何事,甚至允许访问数据库。 这意味着它可以分配一个默认的数据库,用户不能访问。 为用户做任何有用的事一旦访问一个数据库,您需要明确授予用户的权限。
- 默认情况下,新的Windows登录访问服务器。 但如果你想明确拒绝登录访问到服务器,从列表中选择状态的页面的左侧登录——新对话框并选择否认单选按钮。 你也可以暂时禁用登录通过选择禁用按钮。 图2.6显示了这些选项。
图2.6。 期权授予或拒绝访问服务器和临时禁用登录帐户。
- 单击OK创建用户。
您还可以添加一个Windows组SQL Server以同样的方式。 在这种情况下,集团的任何成员将会访问数据库服务器,与你给的组对象的访问在数据库中。
SQL Server身份验证
当您使用SQL Server登录进行身份验证时,客户端应用程序必须提供一个有效的用户名和密码来连接到数据库。 这些SQL Server登录保存在SQL服务器,没有窗户。 当登录时,如果不考虑匹配的用户名和密码,SQL Server提出了一个错误,用户不能访问SQL Server。
尽管Windows身份验证是更安全的,你可以选择使用SQL Server登录而不是在某些情况下。 SQL Server身份验证更容易管理对于简单的应用程序,没有广泛的安全需要,而且它允许你不要纠缠与Windows安全。 如果客户端运行在旧版本的Windows(基本上,任何Windows 2000岁以上)或非Windows操作系统,您必须使用SQL Server登录。
创建一个SQL Server登录,使用相同的登录登录——新对话框窗口。 而是选择一个Windows登录,输入一个独特的登录名域或计算机名称,并提供一个密码。 例如,图2.7显示了如何创建一个新的SQL Server登录卡斯珀并使AdventureWorks2012他的默认数据库。
图2.7。 创建一个SQL Server登录。
的所有其他选项用户映射和地位是相同的SQL Server登录Windows登录。
通过transact - SQL SQL Server登录
您还可以执行相同的动作transact - sql代码。 的CREATE LOGIN代码清单2.1创建一个SQL Server登录黄玉与一个相当强大的密码:
CREATE LOGIN Topaz WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v'; GO
清单2.1。 代码与t - SQL来创建一个新的SQL Server登录。
然后,授予黄玉访问AdventureWorks2012数据库,使用CREATE USER声明和分配一个默认模式,如清单2.2所示。
USE AdventureWorks2012; GO CREATE USER Topaz FOR LOGIN Topaz WITH DEFAULT_SCHEMA = HumanResources; GO
清单2.2。 代码来创建一个数据库用户关联到一个SQL Server登录。
提示:
与一级楼梯一样,你可能需要做出一些改变的代码示例,如果你想运行在本地SQL Server的实例。 清单2.2中的代码假定你有AdventureWorks2012数据库安装。 后来代码示例假设您在一台机器上运行代码命名马拉松和有一个JoeStairway用户在Windows。 随意命名您的机器马拉松或创建一个用户名字,或改变代码。
像Windows登录,您可以映射服务器登录黄玉其他一些名称在数据库中。 中的代码清单2.3地图黄玉到TopazD用户在AdventureWorks2012数据库:
USE AdventureWorks2012; GO CREATE USER Topaz FOR LOGIN Topaz WITH DEFAULT_SCHEMA = HumanResources; GO
清单2.3。 代码放弃现有的用户然后添加一个数据库用户名与登录名不同。
谨防sa登录
如果你支持SQL Server登录配置您的SQL服务器,有一个内置的SQL Server登录,您需要小心——salogin-which您可能已经注意到挂在登录节点对象资源管理器。 的sa或系统管理员,登录包含主要用于向后兼容旧版本的SQL服务器。 的sa登录映射到系统管理员固定服务器角色,和任何人登录到SQL serversa是一个完整的系统管理员,不可撤销的权利在整个SQL服务器实例和数据库。 这的确是一个强大的登录。
你不能修改或删除sa登录。 如果您选择混合模式验证安装SQL Server时,提示输入密码sa用户。 没有密码,任何人都可以以sa没有密码,登录,“让我们管理服务器。 “不用说,这是你想让你的用户做的最后一件事。 登录使用sa登录只作为一个后门如果其他系统管理员不可用或忘记了他们的Windows密码。 如果发生这种情况,您可能需要新的管理员!
永远不要使用sa登录应用程序中访问数据库。 这样做可以让黑客管理层次控制数据库服务器如果黑客可以控制应用程序。 在遥远的过去,这是一个简单的方法来攻击服务器和一个可怕的实践。 相反,设置一个自定义的窗口或应用程序的SQL Server登录使用,和给登录运行应用程序所需的绝对最小权限(实现了最小特权原则)。
提示:
事实上,你应该考虑禁用sa登录,使用的状态页面登录你之前看到的属性对话框。 这样攻击者不能使用这个全能的登录控制你的服务器实例,你是否有一个强大的sa密码或不是。
密码策略和执行
在版本的SQL Server 2005年以前,没有简单的方法为系统管理员执行密码策略,可以帮助使系统更加安全。 例如,SQL Server没有办法强迫用户创建强密码的最小长度和其他字母数字和字符。 如果有人想和一个字母创建一个登录密码,您不能配置SQL Server来防止它。 同样,没有办法使密码定期到期,如每三个月。 有些人理所当然地认为这是一个主要的理由不使用SQL Server登录。
最近版本的SQL服务器可以连接到Windows Server 2003的密码策略,Windows Vista或更高版本。 密码仍然存储在SQL Server,但是SQL服务器进行调用Windows API NetValidatePasswordPolicy()方法,该方法首先是在Windows Server 2003中引入的。 这个API函数Windows密码策略适用于SQL Server登录并返回一个值,指示是否密码是有效的。 SQL服务器调用这个函数当用户创建,集,或重置密码。
您可以定义Windows密码策略通过本地安全设置applet Windows控制面板的管理工具之一。 密码策略部分与默认设置如图2.8所示。 小应用程序有一个单独的帐户锁定策略部分,如图2.9所示,当用户生效使太多的失败的登录尝试。 默认情况下,锁定策略被禁用一个新的Windows安装。
图2.8。 Windows本地安全策略applet,显示默认的密码策略。
图2.9。 Windows本地安全策略applet,显示默认的帐户锁定策略。
表2.1列出了密码策略默认值和一些笔记如何工作。
类别 |
政策的名字 |
默认的 |
笔记 |
密码策略 |
执行密码历史 |
0密码记得 |
等防止用户重复使用旧密码,两个密码之间交替。 |
最小密码长度 |
0字符 |
使用这个需要更长的密码,使它们难以打破。 |
|
密码必须符合复杂性要求 |
禁用 |
最小的字母数字组合和其他字符,不包含用户名。 |
|
密码过期 |
年龄最大的密码 |
42天 |
数天前一个用户提示修改密码。 |
年龄最小的密码 |
0天 |
数天前允许用户更改密码。 |
|
帐户锁定策略 |
帐户锁定时间 |
不适用 |
时间在几分钟内,账户就会被锁定,如果启用锁定阈值。 |
帐户锁定阈值 |
0无效的登录尝试 |
最大数量的失败的登录尝试锁定账户之前。 |
|
重置帐户锁定柜台后 |
不适用 |
时间在几分钟后失败的计数器复位; 启用锁定阈值时启用。 |
表2.1。 Windows密码策略设置。
你可以启用或禁用密码策略执行,当你创建一个登录。 登录——新对话框中有一节在登录名,当您创建一个启用了SQL Server登录,如图2 - 10所示。
图2 - 10。 执行新的登录密码策略。
密码策略应用当您使用transact - sql创建登录。 例如,如果您正在运行SQL Server或Windows 2003服务器上后,启用密码策略,中的代码清单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_EXPIRATIONSQL Server选项控制是否检查的年龄对政策和密码CHECK_POLICY适用于其他政策。 一个MUST_CHANGE选择是可用的,部队在下次登录用户修改密码。
如果一个用户是太多的不成功的尝试登录,超过帐户锁定策略中设置,管理员可以重置帐户使用UNLOCK选项,如清单2.6所示。
ALTER LOGIN Topaz WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v' UNLOCK
清单2.6。 代码解锁登录,是锁着的,因为太多的失败的登录尝试。
你可以启用密码策略执行版本的Windows上运行SQL Server时,在Windows Server 2003。 但是SQL Server使用默认设置的最小长度为6个字符,检查密码不匹配的全部或任何部分的登录名称,和是一个混合的大写字母,小写字母,数字,和其他字符。 你不能改变这些默认值。 但是希望你不是这样的一个老版本的Windows上运行SQL Server,如果只是因为巨大的安全改进之后!
总结
在这种级别的SQL Server安全楼梯,你学到很多在SQL Server身份验证选项可用。 Windows集成验证是最安全但并不总是可行的,和微软SQL Server身份验证更好、更安全。 但是如果你使用混合模式验证,别忘了给sa登录一个非常强大的密码,或者更好的是,禁用它! 像大多数安全对象,您就可以创建并改变他们使用漂亮的GUI界面管理工作室或t - sql代码。 如果你在一个现代版本的Windows上运行SQL Server,您可以钩到本地安全策略的密码策略。