首页 > 技术文章 > 第十三周翻译:SQL Server安全级别1:SQL Server安全性概述

hualalalala 2017-12-01 11:26 原文

SQL Server安全级别1:SQL Server安全性概述

源自:Stairway to SQL Server Security Level 1: Overview of SQL Server Security

http://www.sqlservercentral.com/articles/Stairway+Series/109941/

作者:Don Kiely, 2014/06/04

翻译:刘琼滨 谢雪妮 雅莉 赖慧芳

正文:

该系列

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

 

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

 

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

 

这些特性使数据库成为那些想要盗取数据或通过篡改数据而损害其所有者的人的目标。确保您的数据是安全的是配置SQL Server和开发使用它来存储数据的应用程序的关键部分。这个阶梯探讨了SQL Server 2012安全性的基础知识,这样您就可以保护您的数据和服务器资源,尽可能地保护您不受影响数据的独特安全威胁。大部分信息将应用于SQL Server的早期版本,回到SQL Server 2005,因为这是微软对产品的安全性进行了彻底的修改。但我还将讨论只在SQL Server 2012和以后的特性。

 

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

 

威胁

识别特定一组数据及其服务器的威胁是理解如何配置和使用SQL server来保护数据的重要第一步。你创建的一个数据库用来管理你的小学足球队的设备库存,可能不需要很重的安全措施。您可能想要提供至少最小的访问控制,这样团队成员就不能随意地更改谁拥有哪个足球球的记录。但是,如果有人进入并窃取或扰乱数据,这可能并不是世界末日。

 

另一方面,如果数据库有关于团队中孩子的个人数据,比如家庭地址和电话号码,那么您可能想要加强安全保护(您可能在法律上要求这样做)。您可以通过隔离访问来保护数据的隐私,这样几乎任何访问数据库的人都可以更改设备数据,但只有少数人能够访问个人数据。如果数据包含了父母的信用卡号,那么你需要采取极端的措施来保护这些数据。

 

您的数据可能容易受到一些威胁,下面列出的是一些比较常见的威胁。Web上有大量可用的资源,可以帮助您分析特定情况下的风险。这个列表的目的是帮助您开始考虑威胁,以及如何使用SQL Server的特性来对抗它们,或者至少减少您的数据对它们的影响。

 

盗窃数据:窃取数据包括各种未经授权的对你的数据的访问,无论是外部入侵你的网络,还是对名人的内部扫描。它可能包括阅读被禁止的信息的兴奋,或者被潜在的信用卡号码的销售所激发。

数据破坏:一个能够访问你的数据的黑客可以改变它,它会引起一系列的问题,从公开的尴尬到关闭你的整个操作(当你所有的客户记录被删除时可能会发生)。

资料损坏在关系数据库中存储数据的最大好处之一是,数据库本身可以帮助保护数据的完整性。数据完整性包括要求每个订单都有一个相关的客户,在日期字段中存储的日期实际上表示一个日历日期,而百分比字段只包含0到100之间的值。数据完整性可能不是与安全性有关的第一件事,但它是保护数据的重要部分。

非法储存:在过去,您在业务过程中收集的数据实际上是您自己的业务。但是现在美国有无数的联邦法律。在整个欧盟,以及其他国家,这些国家控制着你可以储存的个人数据,你如何存储,以及你如何保护它。对违规行为的处罚可能会对你的公司的公众形象造成严重的罚款和损害。

 

这段楼梯涵盖了SQL Server 2012中的一些特性,这些特性帮助减轻了这些威胁和其他许多问题。你必须了解你的数据的威胁,知道如何保护你的数据。不要把时间浪费在那些不能保护你的特定数据的具体威胁的措施上。您将永远无法覆盖所有假设的情况,最坏的情况下,您将使数据库服务器完全无法使用其预期的用户。安全始终是一种妥协,它平衡了实施和维护保障措施所需要的时间和资金的风险。

安全设计理念

早在2002年,比尔盖茨就发布了他那声名狼藉的“值得信赖的计算备忘录”,这一备忘录被证明是微软如何看待和实现其产品安全的一个转折点。根据微软网站的说法,由此产生的可信赖计算计划“专注于创建并交付基于可靠业务实践的安全、私有和可靠的计算体验”。我们的目标是更安全、更可信的互联网。”

 

换句话说,十多年前,微软对安全问题的态度变得非常严肃。在这一变化之后,SQL Server的第一个版本是SQL Server 2005,在这个版本中,微软对整个产品的安全性进行了彻底的改进。从那以后,每一个版本的SQL Server都保留了新的安全基础设施,同时增加了新的安全性,并增加了新的特性,以提高安全性和应对新出现的威胁。

 

正如微软在SQL Server 2005年所描述的那样,通过定义产品安全设计的四个支柱,可信计算影响了SQL Server的开发

 

安全:微软对其设计、代码和交互进行了广泛的威胁分析和安全审计,以确定攻击者可以在服务器和数据中获得立足之地。其结果是,Microsoft设计了SQL Server,以保护您存储在那里的数据的机密性、完整性和可用性。

巩固安全:在默认情况下,SQL Server只在默认情况下安装和激活关键的核心数据库组件。这意味着那些对核心数据库功能不重要的特性要么没有安装,要么被安装,但没有被激活。没有安装的特性不容易受到攻击。你必须有意识地、有意识地安装或激活非核心功能。这可以防止许多对您可能不知道的特性的攻击,因为您从未使用过它们。

确保:微软为安全地安装SQL Server提供了工具和支持,并确保了它的安全。SQL Server配置工具可以帮助您安全地配置服务器。最重要的是,SQL Server的更新现在可以作为在线Microsoft更新服务的一部分,所以很容易获得安全更新和补丁。

安全通过沟通:微软已经建立了一个精心设计的基础设施来收集关于其产品中漏洞的信息。但是,如果这些信息都留在微软内部,那么这些信息都是毫无价值的。因此,该公司致力于沟通新的漏洞,积极地打补丁以保护他们,并定期更新其在线帮助系统,以反映新的安全信息。

 

这种“it安全”的理念对整个产品都有影响。但是,尽管SQL Server非常安全,但是当您创建数据库和安装服务时,您必须做出明智的安全选择,以保证SQL服务器的安全。要使生产数据库服务器安全,需要工作和保持警惕。

 

请记住,有时候保护数据的最好方法就是不要把它放在数据库中,例如,如果您有绝对有效的需要挂在这类信息上(并且没有很多这样的信息),那么就只存储信用卡号。如果您没有这样的需求,您应该处理信用卡交易并存储结果,而不是信用卡信息本身。你不能忍受你没有的安全数据!

安全的两个阶段

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

 

证明:用户登录,得到验证,并获得对服务器的访问权。认证回答了这个问题:“你是谁?”“并且要求用户证明它,通常是通过提供用户名的密码,但其他形式的证明正变得越来越受欢迎。”

授权:用户可以只与数据库、表和存储过程进行交互,而这些SQL服务器是她拥有权限的。授权回答了这个问题:“您允许做什么?”

 

用户可能可以登录到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中的大多数管理和管理任务一样,几乎总是有多种方式来管理和实现安全特性,包括使用管理Studio的图形界面、编写和执行t-SQL代码,以及使用SQL Server与PowerShell集成在我们之间的命令行。使用PowerShell超出了这个楼梯的范围,但是在整个楼梯中,您将看到许多使用其他两种技术的示例。(要了解PowerShell和SQL Server之间的紧密集成,请查看SQL PowerShell的楼梯)。

 

为了使用管理Studio进行安全特性,大多数情况下,您只需在对象浏览器中右击一个适当的对象并选择Properties,然后在对话框中使用适当的页面来进行您想要的更改。例如,要在AdventureWorksLT2012示例数据库中设置权限,右键单击对象浏览器中的数据库名称,选择Properties,然后选择权限选项卡,如图1.1所示。

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

 

在数据库和服务器实例级上,对象资源管理器包括一个安全节点,它允许您管理和实现其他类型的安全特性。图1.2显示了AdventureWorksLT2012数据库和服务器实例级的这个节点。两个突出显示的节点中的每个节点都包含多个子节点,它们使您能够访问与选择范围相适应的安全对象。

 

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

 

你会在整个管理工作室和它的各种窗口中找到各种各样的安全特性,所以当你遇到它们的时候,有必要进行一些探索。

 

SQL Server 2005中引入的安全检查所带来的变化之一是允许以更细粒度的方式分配权限。正如您将在以后的级别中了解到的那样,您可以为各种主体分配多种权限,以便实现最重要的安全原则,即每个主体都有权限来完成他们需要做的事情:不多也不少。除了这一变化,微软还加强了t-sql,在语言中包含了对直接操作安全对象的强大支持。

 

清单1.1中的代码展示了一个简单的t-sql示例,您可以使用它来创建安全对象。该代码首先创建一个与现有的Windows登录相关联的服务器级登录。然后,在AdventureWorks2012数据库中,代码创建了一个映射到登录的用户,并为用户分配了一个默认的模式。最后一点代码显示了如何在数据库中删除用户,并创建另一个用户映射到相同的登录。当然,这是非常做作的,但是它展示了你可以在代码中做些什么。或者在管理工作室的GUI工具中,如果你喜欢的话。

 

-- Add a Windows login to SQL Server

CREATE LOGIN [Marathon\JoeStairway] FROM WINDOWS;

GO

 

USE AdventureWorks2012;

GO

 

-- Name the user the same name as login

CREATE USER [Marathon\JoeStairway] FOR LOGIN [Marathon\JoeStairway]

    WITH DEFAULT_SCHEMA = Production;

GO

 

-- Or, rename the user in the database

DROP USER [Marathon\JoeStairway];

GO

CREATE USER Jane FOR LOGIN [Marathon\JoeStairway];

GO

 

-- Query metadata to show that user was created

SELECT * FROM sys.database_principals WHERE name = 'Marathon\JoeStairway';

SELECT * FROM sys.database_principals WHERE name = 'Jane';

 

清单1.1:用于创建服务器登录和数据库用户的示例代码。

 

如果您想尝试运行这段代码,那么您可能需要先进行一些更改。除非您在一个名为马拉松的机器上,并且拥有一个现有的用户名joest气道,否则您将需要在代码中更改这些名称。该代码在AdventureWorks2012中创建数据库用户,并使用它的生产模式,因此您要么需要安装该数据库,要么需要更改代码以使用另一个数据库和现有的模式。但是,您可能想要安装AdventureWorks的样本数据库,因为这段楼梯将频繁地使用它们。

摘要

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

 

在下一层,您将了解更多关于如何在SQL Server中进行身份验证,以及可用的身份验证选项。

 

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

 

注册到我们的RSS订阅源,当我们在楼梯上发布一个新级别的时候,就会得到通知!

推荐阅读