时间:2021-07-01 10:21:17 帮助过:59人阅读
在保密你的服务器和数据,防备当前复杂的攻击,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的功能来应对它们,或者至少减少暴露数据给他们。
这个系列文章谈到的SQL Server 2012的功能可以帮你缓解这些各类威胁和其他方面。你必须理解对你数据的威胁,才可以知道如何保护它们。不要在不能防止你特定数据威胁的措施上浪费时间。你永远不能考虑到所有的假设情况,但最为最坏的情况你要保证你的数据库服务器对它的面向客户是完全不可用的。安全总是个妥协,对时间的风险和实现保障的必要金钱之间的平衡。
安全设计理念
早在2012年,比尔盖茨发布了他臭名昭著的计算机可信备忘录,即微软在产品里如何考虑和实现安全的,可以证明是个转折点。根据微软官方网站,可信计算机政策启动了。“基于良好的商业实践,专注创建和带来安全,隐私和可靠的计算体验。我们的目标是更安全、更可信的互联网”。
话句话说,微软在十多年前就变得非常关注安全。关于这个修改的第一个版本是SQL Server 2005,微软开始在产品考虑充分的安全。自那以后,SQL Server的每个版本都会保留新的安全架构,同时加强它,增加新的功能来同时提高安全来应对新出现的威胁。
如微软在SQL Server 2005时期里所描述的,通过定义产品安全的四大支柱来影响SQL Server可信计算发展。
“它是安全的”的理念已经影响了整个产品。尽管SQL Server一打开就是相当安全的,当你创建数据库和安装服务时,你必须做出明智的安全选择来保持SQL Server的安全。作出并保证生产数据库服务器的安全需要行动和警惕。
记住有时候保护数据的最佳方法是直接不把它不放到数据库里——例如,只保存你必须绝对坚持有效的信用卡信息(这样的人并不多)。如果你没有这样的需求,你应该处理信用卡事务,保存结果,而不是信用卡信息本身。你不会承受你没有数据上的安全风险。
安全的2个阶段
SQL Server的安全模型,像Windows一样,是个2个阶段的过程,允许用户和其它登录的访问服务器里受保护的资源。
用户可以登录到SQL Server,但除非它们有权限做什么,例如访问数据库,它就做不了什么。因此你不仅需要为你的用户提供授权凭证,你还要授权它们访问数据,在每个它们需要使用的数据库里为它们授权一次,定义账号。
当你考虑它的时候,在每个数据库里需要一个用户账号更有意义。不然的话,什么可以阻止用户登录到SQL Server并可以访问想访问任何数据库。这个概念有不同的含义来实现不同的场景,但这是安全的基本状态。
在这个系列的接下来文章会谈到验证和授权,你会学到在SQL Server里如何实现各种安全功能来应付你对数据已经识别的威胁。
SQL Server安全术语
当你与SQL Server和其它产品打交道时,你会碰到各种特定的专业术语。这里有一些最常见的术语,还有在数据库安全上下文里它们的含义。
在这个系列的文章里你会看到大部分这些术语的使用。
SQL Server安全管理和实现
正如SQL Server里大多数操纵和管理任务,通常安全功能几乎都有很多管理和实现方法,包括使用SSMS的图形界面,编写和执行T-SQL代码,使用在命令行编写PowerShell与SQL Server进行交互。使用PowerShell已经不是本系列文章的讨论范围,但在这个系列文章里,你会看到另外2个技术的很多例子。
使用SSMS的安全功能,通常你可以在对象浏览器里右击合适的对象,选择【属性】,然后在对话框里使用合适的页来做你想要的修改。例如,在AdventureWorksLT2012示例数据库上设置安全,在对象浏览器里右击数据库名,选择【属性】,然后选择【权限】页,如插图1.1所示。
插图1.2:用来修改AdventureWorksLT2012数据库安全的权限页
同时在数据库和服务器级别,对象浏览器包括了安全节点,让你管理和实现其他各种安全功能。插图1.2显示了对AdventureWorksLT2012数据库和服务器实例级别的这个节点。这2个高亮的节点包括各种子节点,给你在选择范围内访问合适的安全对象。
插图1.2:在对象浏览器里,在服务器和数据库级别的安全对象
你会在SSMS和它各个窗体里找到各种隐藏的安全功能,因此你可以好好点开这些安全性节点。
在SQL Server 2005彻底安检里另外一个改变是可以允许更颗粒度的方式分配安全。在接下来的文章里你就会学到,你会对各种主体分配各种许可来实现“最小特权”的重要安全原则——这个想法是每个主体只能有它们需要的许可:不多也不少。随着这个改变,微软增强了T-SQL,在语言上有强大的支持,可以直接操纵安全对象。
代码1.1展示了你可以使用T-SQL创建安全对象的简单例子。代码首先创建链接到现存系统登录的服务器级别的登录。然后在AdventureWorksLT2012数据库里,代码创建了个用户映射到登录,分配了默认架构给用户。最后的一点代码向你展示了你如何在数据库里删除用户和创建另一个用户映射到同样的登录。很作秀,当然,但是它展示了在代码里你能做什么。或者你也可以在SSMS的图形界面里实现,如果你喜欢的话。
-- Add a Windows login to SQL Server CREATE LOGIN [PC201602202041\woodytu] FROM WINDOWS; GO USE AdventureWorksLT2012; GO -- Name the user the same name as login CREATE USER [PC201602202041\woodytu] FOR LOGIN [PC201602202041\woodytu] WITH DEFAULT_SCHEMA = Production; GO -- Or, rename the user in the database DROP USER [PC201602202041\woodytu]; GO CREATE USER woody FOR LOGIN [PC201602202041\woodytu]; GO -- Query metadata to show that user was created SELECT * FROM sys.database_principals WHERE name = 'PC201602202041\woodytu'; SELECT * FROM sys.database_principals WHERE name = 'woody';
代码1.1:创建服务器登录和数据库用户的示例代码
如果你想运行这个代码,首先你要做些改动。除非你的计算机名称和我的一样,且有一个woodytu的用户存在,你需要在代码里修改名称。这个代码在AdventureWorksLT2012数据库创建数据库用户,并使用它的Production架构,因此你要么需要安装这个数据库,要么修改代码使用另一个数据库和它里面存在的架构。但我还是建议你安装AdventureWorks数据库,因为接下来的文章会频繁用到它。
小结
这个系列的第一篇文章给你概括介绍了SQL Server 2012里的基本安全概念。你学到了一些常见的数据威胁,探寻了SQL Server背后的设计理念。你学到了安全的2个阶段——身份验证和授权,学习了在整个系列文章看到的一些安全术语,目睹了你可以使用SSMS图形界面和T-SQL代码来管理和实现安全。
在下一篇文章里,你会学到SQL Server里身份验证如何工作和身份验证可用选项的更多信息。
原文链接:
http://www.sqlservercentral.com/articles/Stairway+Series/109941/