代码改变世界

SQL Server安全性级别1的阶梯:SQL Server安全性概述

2017-12-03 21:12  斗转星移17  阅读(819)  评论(0编辑  收藏  举报

                                                                                                                                                                 SQL Server安全性级别1的阶梯:SQL Server安全性概述

作者:Don Kiely,2014/06/04

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

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

关系数据库被用于各种各样的应用程序中,通过广泛的分布式网络,尤其是互联网,从令人眼花缭乱的客户端连接,使得数据几乎可以在任何地方被任何人访问。数据库可以掌握很大一部分人类知识,包括高度敏感的个人信息和使国际商业运作的关键数据。

这些特征使数据库成为有意窃取数据或篡改数据的人的有吸引力的目标。确保数据安全是配置SQL Server和开发使用它来存储数据的应用程序的关键部分。此阶梯探索SQL Server 2012安全性的基础知识,以便您可以保护您的数据和服务器资源,使其尽可能细化,以防止可能影响数据的独特安全威胁。大部分信息将适用于早期版本的SQL Server,回到SQL Server 2005,因为那是微软在产品中彻底改变了安全性的原因。但是我还将讨论仅在SQL Server 2012及更高版本中的功能。

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

威胁
识别对特定数据集及其服务器的威胁是理解如何配置和使用SQL Server来保护数据的重要的第一步。您创建的用于管理您的学校足球队的设备库存的数据库可能不需要严格的安全措施。您可能希望提供至少最少的访问控制,以便团队成员不能随意更改谁拥有哪一盒足球的记录。但是,如果有人进来窃取或弄虚作假,恐怕不是世界末日。

另一方面,如果数据库中有关于团队中的孩子的个人数据,例如家庭住址和电话号码,那么您可能需要加强安全保护(并且可能在法律上要求这样做)。您可以通过隔离访问来保护数据的隐私,以便几乎任何访问数据库的人都可以更改设备数据,但只有少数人可以访问个人数据。如果数据包含父母的信用卡号码,则需要花费极大的时间来保护这些数据。

数据可能容易受到一些威胁,下面的列表是一些比较常见的威胁。网上有大量的资源可以帮助你分析你的具体情况的风险。此列表旨在帮助您开始考虑威胁以及如何使用SQL Server的功能来对付它们,或者至少减少数据暴露给他们。

数据盗窃:盗窃数据包括各种类型的未经授权的访问您的数据,无论是由外人入侵您的网络或内部人员扫描着名人物的污垢。这可能涉及阅读禁止信息的兴奋或者被潜在销售窃取的信用卡号码的动机。
数据破坏:黑客可以访问您的数据,这可能会导致一系列的问题,从公开尴尬到关闭整个操作(可能会在您的所有客户记录被删除时发生)。
数据损坏:将数据存储在关系数据库中的最大好处之一是数据库本身可以帮助保护数据的完整性。数据完整性包括要求每个订单都有一个关联的客户,存储在日期字段中的日期确实代表日历日期,百分比字段仅包含0到100之间的值。数据完整性可能不是您首先想到的与安全有关,但它是保护您的数据的重要组成部分。

vv

这个楼梯涵盖了SQL Server 2012中的功能,帮助减轻这些威胁等等。您必须了解数据的威胁,才能知道如何防范这些威胁。不要将时间浪费在不能防范针对特定数据的特定威胁的措施上。你将永远无法覆盖所有的假设情况,最坏的情况是你的数据库服务器完全无法被其预期的用户使用。安全始终是一种妥协,可以将风险与实施和维护保障所需的时间和金钱相平衡。

安全设计理念
2002年初,比尔·盖茨(Bill Gates)发表了臭名昭着的“可信赖计算”(Trustworthy Computing)备忘录,这个备忘录被证明是微软思考和实施产品安全性的一个转折点。据微软网站介绍,由此产生的可信赖计算计划“着眼于创建和提供基于健全商业实践的安全,私密和可靠的计算体验。我们的目标是建立一个更安全,更可靠的互联网。“

换句话说,十多年前,微软对安全问题非常重视。在此次更改之后发布的第一个版本的SQL Server是SQL Server 2005,Microsoft在其中彻底改变了整个产品的安全性。此后,每个版本的SQL Server都保留了这个新的安全基础设施,同时逐步增强和增加了新功能,以提高安全性并解决新出现的威胁。

正如微软在SQL Server 2005中描述的那样,可信计算通过定义产品安全设计的四大支柱来影响SQL Server的发展:

通过设计安全:Microsoft对其设计,代码和交互进行了广泛的威胁分析和安全审计,以确定攻击者可以获得进入服务器和数据的点。结果是,Microsoft设计了SQL Server来保护您在那里存储的数据的机密性,完整性和可用性。
默认情况下是安全的:开箱即用,SQL Server默认安装并激活关键的核心数据库组件。这意味着对核心数据库功能不重要的功能要么未安装,要么已安装但未激活。未安装的功能不容易受到攻击。您必须有意识地刻意安装或激活非核心功能。这可以防止许多针对您可能不知道安装的功能的攻击,因为您从未使用它们。
安全部署:Microsoft提供了安全安装SQL Server并保证其安全的工具和支持。 SQL Server配置工具可帮助您安全地配置服务器。最重要的是,SQL Server的更新现在作为在线Microsoft Update服务的一部分提供,所以很容易获得安全更新和补丁。
通过沟通获得安全:微软已经建立了一个复杂的基础设施来收集有关其产品漏洞的信息。但是,所有这些信息都是毫无价值的,如果它留在微软。因此,该公司致力于沟通新的漏洞,积极修补以防止这些漏洞,并定期更新其联机帮助系统以反映新的安全信息。
这“只是安全”的理念在整个产品中都有影响。但是,虽然SQL Server在开箱即用方面相当安全,但当您创建数据库和安装服务时,您必须做出明智的安全选择,以保持SQL Server实例的安全。需要工作和警惕,保证生产数据库服务器的安全。

请记住,有时候保护数据的最好方法就是不要把它放在数据库中 - 例如,如果你有绝对有效的需求来存储信用卡号码(而且没有信息)许多这些)。如果您没有这样的需求,则应该处理信用卡交易并存储结果,而不是信用卡信息本身。你不能在没有数据的情况下遭遇安全漏洞!

安全的两个阶段
SQL Server的安全模型与Windows一样,是一个两阶段的过程,允许用户或其他登录访问服务器中的受保护资源:

身份验证:用户登录,验证并获得对服务器的访问权限。身份验证回答了“你是谁?”这个问题,并要求用户证明这一点,通常是通过提供用户名的密码来进行证明,而其他形式的证明则越来越受欢迎。
授权

这个楼梯涵盖了SQL Server 2012中的功能,帮助减轻这些威胁等等。您必须了解数据的威胁,才能知道如何防范这些威胁。不要将时间浪费在不能防范针对特定数据的特定威胁的措施上。你将永远无法覆盖所有的假设情况,最坏的情况是你的数据库服务器完全无法被其预期的用户使用。安全始终是一种妥协,可以将风险与实施和维护保障所需的时间和金钱相平衡。

安全设计理念
2002年初,比尔·盖茨(Bill Gates)发表了臭名昭着的“可信赖计算”(Trustworthy Computing)备忘录,这个备忘录被证明是微软思考和实施产品安全性的一个转折点。据微软网站介绍,由此产生的可信赖计算计划“着眼于创建和提供基于健全商业实践的安全,私密和可靠的计算体验。我们的目标是建立一个更安全,更可靠的互联网。“

换句话说,十多年前,微软对安全问题非常重视。在此次更改之后发布的第一个版本的SQL Server是SQL Server 2005,Microsoft在其中彻底改变了整个产品的安全性。此后,每个版本的SQL Server都保留了这个新的安全基础设施,同时逐步增强和增加了新功能,以提高安全性并解决新出现的威胁。

正如微软在SQL Server 2005中描述的那样,可信计算通过定义产品安全设计的四大支柱来影响SQL Server的发展:

通过设计安全:Microsoft对其设计,代码和交互进行了广泛的威胁分析和安全审计,以确定攻击者可以获得进入服务器和数据的点。结果是,Microsoft设计了SQL Server来保护您在那里存储的数据的机密性,完整性和可用性。
默认情况下是安全的:开箱即用,SQL Server默认安装并激活关键的核心数据库组件。这意味着对核心数据库功能不重要的功能要么未安装,要么已安装但未激活。未安装的功能不容易受到攻击。您必须有意识地刻意安装或激活非核心功能。这可以防止许多针对您可能不知道安装的功能的攻击,因为您从未使用它们。
安全部署:Microsoft提供了安全安装SQL Server并保证其安全的工具和支持。 SQL Server配置工具可帮助您安全地配置服务器。最重要的是,SQL Server的更新现在作为在线Microsoft Update服务的一部分提供,所以很容易获得安全更新和补丁。
通过沟通获得安全:微软已经建立了一个复杂的基础设施来收集有关其产品漏洞的信息。但是,所有这些信息都是毫无价值的,如果它留在微软。因此,该公司致力于沟通新的漏洞,积极修补以防止这些漏洞,并定期更新其联机帮助系统以反映新的安全信息。
这“只是安全”的理念在整个产品中都有影响。但是,虽然SQL Server在开箱即用方面相当安全,但当您创建数据库和安装服务时,您必须做出明智的安全选择,以保持SQL Server实例的安全。需要工作和警惕,保证生产数据库服务器的安全。

请记住,有时候保护数据的最好方法就是不要把它放在数据库中 - 例如,如果你有绝对有效的需求来存储信用卡号码(而且没有信息)许多这些)。如果您没有这样的需求,则应该处理信用卡交易并存储结果,而不是信用卡信息本身。你不能在没有数据的情况下遭遇安全漏洞!

安全的两个阶段
SQL Server的安全模型与Windows一样,是一个两阶段的过程,允许用户或其他登录访问服务器中的受保护资源:

身份验证:用户登录,验证并获得对服务器的访问权限。身份验证回答了“你是谁?”这个问题,并要求用户证明这一点,通常是通过提供用户名的密码来进行证明,而其他形式的证明则越来越受欢迎。
授权:用户只能与那些她有权限的SQL Server对象(如数据库,表和存储过程)进行交互。授权回答这个问题:“你可以做什么?

用户只能与那些她有权限的SQL Server对象(如数据库,表和存储过程)进行交互。授权回答这个问题:“你可以做什么?

用户可能能够登录到SQL Server,但是除非他们有权执行某些操作(例如访问数据库),否则这些操作不会太好。因此,您不仅需要为用户提供身份验证凭据,还需要授权他们访问数据,方法是在每个数据库中为他们定义帐户,以便他们在进行身份验证后使用。

当你考虑这个问题的时候,在每个数据库中都需要一个用户帐户,这很有意义。否则,会阻止用户登录到SQL Server,然后使用任何他们想要的数据库?这个概念有各种各样的适应各种情况,但这是安全的基本状态。

在这个阶梯中的后续级别包括身份验证和授权,您将学习如何在SQL Server中实现各种安全功能,以防止已经识别到您的数据的威胁。

SQL Server安全术语
当您在SQL Server和其他产品中使用安全性时,您将遇到各种专业术语。以下是一些更常见的术语以及它们在数据库安全性方面的含义。

身份验证:如上所述,身份验证是通过要求她证明自己是与登录相关联的人来确定身份的过程。它回答了这个问题,你是谁?

授权:一旦系统认证用户,授权(如上所述)确定用户在服务器或数据库中的权限。这回答了这个问题,你现在可以做什么,你在这里?

组:在Windows中,组是与其关联的登录的主体。授予该组的任何权限都将授予关联的登录名。

模拟:所有Windows进程(包括各种SQL Server进程)都运行在特定的安全上下文中,通常是导致进程启动的主体。当进程临时采用不同的安全上下文时,就会发生模仿。这是一个非常强大和必要的能力,但具有滥用的可能性。

登录:登录是对服务器实例中的对象具有一定级别访问权限的主体。在常见的用法中,登录常常与用户交换使用。但是,SQL Server登录是用于从外部访问服务器的帐户。登录有时包括访问服务器范围的对象的权限,例如配置信息,但通常不赋予数据库的任何权限。

权限:权限是访问受保护资源的权限,例如从表中读取数据或在服务器级创建新数据库。权限通常意味着其他权限,具体取决于主题权限的范围。

委托人:委托人是可以接收访问SQL Server中的受保护资源的权限的任何用户或代码组件。

特权:特权是委托人拥有的广泛的权利或许可。这个词有时可以与许可交换使用,更多的时候意味着一个特定的狭义的权利。特权意味着一组更广泛的权限。

角色:SQL Server角色类似于Windows组,但仅限于SQL Server实例的范围。就像一个组一样,您可以将登录名和用户分配给一个角色,该角色向登录名和用户传递该角色拥有的所有权限。

用户:用户是对特定数据库中的对象具有一定级别访问权限的主体。用户通常被映射到登录。简而言之,登录可以访问SQL Server实例,并且用户可以访问数据。

你会看到这个阶梯中使用的大部分术语。

管理和实施SQL Server安全性
与SQL Server中的大多数管理和管理任务一样,几乎总是有多种方式来管理和实现安全功能,包括使用Management Studio的图形界面,编写和执行T-SQL代码,以及使用SQL Server与PowerShell集成在我们之间的命令行垃圾。使用PowerShell不在这个楼梯的范围之内,但是在整个楼梯上你会看到使用其他两种技术的大量例子。 (要了解PowerShell和SQL Server之间的紧密集成,请查看SQL PowerShell的阶梯。)

要将Management Studio用于安全功能,通常只需在对象资源管理器中右键单击适当的对象,然后选择“属性”,然后使用对话框中的相应页面进行所需的更改。例如,要设置AdventureWorksLT2012示例数据库的权限,请右键单击对象资源管理器中的数据库名称,选择“属性”,然后选择“权限”选项卡,如图1.1所示。

用户可能能够登录到SQL Server,但是除非他们有权执行某些操作(例如访问数据库),否则这些操作不会太好。因此,您不仅需要为用户提供身份验证凭据,还需要授权他们访问数据,方法是在每个数据库中为他们定义帐户,以便他们在进行身份验证后使用。

当你考虑这个问题的时候,在每个数据库中都需要一个用户帐户,这很有意义。否则,会阻止用户登录到SQL Server,然后使用任何他们想要的数据库?这个概念有各种各样的适应各种情况,但这是安全的基本状态。

在这个阶梯中的后续级别包括身份验证和授权,您将学习如何在SQL Server中实现各种安全功能,以防止已经识别到您的数据的威胁。

SQL Server安全术语
当您在SQL Server和其他产品中使用安全性时,您将遇到各种专业术语。以下是一些更常见的术语以及它们在数据库安全性方面的含义。

身份验证:如上所述,身份验证是通过要求她证明自己是与登录相关联的人来确定身份的过程。它回答了这个问题,你是谁?

授权:一旦系统认证用户,授权(如上所述)确定用户在服务器或数据库中的权限。这回答了这个问题,你现在可以做什么,你在这里?

组:在Windows中,组是与其关联的登录的主体。授予该组的任何权限都将授予关联的登录名。

模拟:所有Windows进程(包括各种SQL Server进程)都运行在特定的安全上下文中,通常是导致进程启动的主体。当进程临时采用不同的安全上下文时,就会发生模仿。这是一个非常强大和必要的能力,但具有滥用的可能性。

登录:登录是对服务器实例中的对象具有一定级别访问权限的主体。在常见的用法中,登录常常与用户交换使用。但是,SQL Server登录是用于从外部访问服务器的帐户。登录有时包括访问服务器范围的对象的权限,例如配置信息,但通常不赋予数据库的任何权限。

权限:权限是访问受保护资源的权限,例如从表中读取数据或在服务器级创建新数据库。权限通常意味着其他权限,具体取决于主题权限的范围。

委托人:委托人是可以接收访问SQL Server中的受保护资源的权限的任何用户或代码组件。

特权:特权是委托人拥有的广泛的权利或许可。这个词有时可以与许可交换使用,更多的时候意味着一个特定的狭义的权利。特权意味着一组更广泛的权限。

角色:SQL Server角色类似于Windows组,但仅限于SQL Server实例的范围。就像一个组一样,您可以将登录名和用户分配给一个角色,该角色向登录名和用户传递该角色拥有的所有权限。

用户:用户是对特定数据库中的对象具有一定级别访问权限的主体。用户通常被映射到登录。简而言之,登录可以访问SQL Server实例,并且用户可以访问数据。

你会看到这个阶梯中使用的大部分术语。

管理和实施SQL Server安全性
与SQL Server中的大多数管理和管理任务一样,几乎总是有多种方式来管理和实现安全功能,包括使用Management Studio的图形界面,编写和执行T-SQL代码,以及使用SQL Server与PowerShell集成在我们之间的命令行垃圾。使用PowerShell不在这个楼梯的范围之内,但是在整个楼梯上你会看到使用其他两种技术的大量例子。 (要了解PowerShell和SQL Server之间的紧密集成,请查看SQL PowerShell的阶梯。)

要将Management Studio用于安全功能,通常只需在对象资源管理器中右键单击适当的对象,然后选择“属性”,然后使用对话框中的相应页面进行所需的更改。例如,要设置AdventureWorksLT2012示例数据库的权限,请右键单击对象资源管理器中的数据库名称,选择“属性”,然后选择“权限”选项卡,如图1.1所示。

图1.1:修改AdventureWorksLT2012数据库安全性的权限页面

在数据库和服务器实例级别,对象资源管理器都包含一个安全节点,可让您管理和实施其他种类的安全功能。 图1.2显示了AdventureWorksLT2012数据库的此节点以及服务器实例级别。 每个突出显示的节点都包含各种子节点,可让您访问与选择范围相适应的安全对象。

图1.1:修改AdventureWorksLT2012数据库安全性的权限页面

在数据库和服务器实例级别,对象资源管理器都包含一个安全节点,可让您管理和实施其他种类的安全功能。 图1.2显示了AdventureWorksLT2012数据库的此节点以及服务器实例级别。 每个突出显示的节点都包含各种子节点,可让您访问与选择范围相适应的安全对象。

图1.2:对象资源管理器中服务器和数据库级别的安全对象。

您会发现在Management Studio及其各种窗口中隐藏了各种安全功能,因此在您碰到它们时进行一些探索是值得的。

在SQL Server 2005中进行安全性检查时引入的一个变化就是允许以更细化的方式分配权限。正如您将在后面的级别学习的那样,您可以为各种主体分配多种权限,以便实现最小权限的重要安全主体 - 每个主体都有权执行他们需要完成的任务的权限:否越来越少。伴随着这一变化,微软加强了T-SQL在语言中包括强大的支持,以直接操纵安全对象。

清单1.1中的代码显示了一个可以用来创建安全对象的简单T-SQL示例。代码首先创建链接到现有Windows登录的服务器级登录。然后,在AdventureWorks2012数据库中,代码创建映射到登录名的用户,并为用户分配默认模式。代码的最后一部分显示了如何将用户拖放到数据库中,并创建映射到相同登录名的另一个用户。当然是非常人为的,但它显示了你可以在代码中做什么。或者在Management Studio的GUI工具中,如果你愿意的话。

- 添加一个Windows登录到SQL Server
创建登录[马拉松\ JoeStairway]从WINDOWS;

使用AdventureWorks2012;

- 将用户命名为登录名
创建用户[马拉松\ JoeStairway]登录[马拉松\ JoeStairway]
    WITH DEFAULT_SCHEMA =生产;

- 或者,重命名数据库中的用户
DROP USER [Marathon \ JoeStairway];

创建用户Jane FOR LOGIN [Marathon \ JoeStairway];

- 查询元数据以显示用户已创建
SELECT * FROM sys.database_principals WHERE name ='Marathon \ JoeStairway';
SELECT * FROM sys.database_principals WHERE name ='Jane';
清单1.1:创建服务器登录和数据库用户的示例代码

如果你想尝试运行这个代码,你可能需要先做一些改变。除非您使用的是名为Marathon的计算机,并且现有用户名为JoeStairway,否则您需要在代码中更改这些名称。代码在AdventureWorks2012中创建数据库用户并使用其生产模式,因此您需要安装该数据库或更改代码以使用其他数据库和现有模式。但是你可能想要安装AdventureWorks套件的样本数据库,因为这个Stairway会经常使用它们。

概要
这个阶梯的第一层提供了SQL Server 2012中基本安全概念的概述。您已经了解了一些更常见的数据威胁,并探究了SQL Server安全背后的设计理念。您了解了安全性的两个阶段 - 身份验证和授权,了解了您在整个阶梯中会看到的一些安全术语,并且看到您可以通过Management Studio的GUI工具以及T-SQL代码管理和实现安全性。

在下一个级别中,您将进一步了解如何在SQL Server中使用身份验证以及可用的身份验证选项。