SQL Server 2012 安全概述

在保密你的服务器和数据,防备当前复杂的攻击,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的功能来应对它们,或者至少减少暴露数据给他们。

  1. 数据窃取:数据窃取包括各种对你数据的未授权访问,无论通过黑入你网络的外界人员,还是在重要人物上非法扫描的内部人员。它会涉及到读取到禁止信息的兴奋,或者被通过销售窃取的信用卡号的利益所驱动。
  2. 数据破坏:获的你数据访问权限的可以修改它,它会带来一系列的问题,包括关闭你的所有业务让你在公众面前尴尬(当你所有的客户记录被删除时就会发生)。
  3. 数据篡改:在关系数据库里存储数据的一个最大好处是数据库本身可以帮助保护数据的完整性。数据完整性包括每个订单有关联的客户,在日期列存储的日期代表日历上的日期,百分比字段只包含0和100之间的值等这些约束。当你考虑安全的时候,数据完整性不会是第一个想到的,但却是你的数据保护的重要部分。
  4. 非法存储:在过去,在商业过程期间,你收集的数据只是你个人的事。但选择在美国,遍及欧盟和可以控制你存储的各种个人信息,你如何存储它,你如何保护它的其他国家里的都有对应的法律存在。违法的处罚是严格的——包括罚款和对你公司的公共形象损失费。

这个系列文章谈到的SQL Server 2012的功能可以帮你缓解这些各类威胁和其他方面。你必须理解对你数据的威胁,才可以知道如何保护它们。不要在不能防止你特定数据威胁的措施上浪费时间。你永远不能考虑到所有的假设情况,但最为最坏的情况你要保证你的数据库服务器对它的面向客户是完全不可用的。安全总是个妥协,对时间的风险和实现保障的必要金钱之间的平衡。

安全设计理念

早在2012年,比尔盖茨发布了他臭名昭著的计算机可信备忘录,即微软在产品里如何考虑和实现安全的,可以证明是个转折点。根据微软官方网站,可信计算机政策启动了。“基于良好的商业实践,专注创建和带来安全,隐私和可靠的计算体验。我们的目标是更安全、更可信的互联网”。

话句话说,微软在十多年前就变得非常关注安全。关于这个修改的第一个版本是SQL Server 2005,微软开始在产品考虑充分的安全。自那以后,SQL Server的每个版本都会保留新的安全架构,同时加强它,增加新的功能来同时提高安全来应对新出现的威胁。

如微软在SQL Server 2005时期里所描述的,通过定义产品安全的四大支柱来影响SQL Server可信计算发展。

  1. 安全设计(Secure by design):微软进行广泛的威胁分析和代码设计与交互的安全审计,来确定攻击者可以立足获得服务器和数据的地方。这样让微软设计的SQL Server可以保护你在服务器上存储的数据的保密性,完整性和可用性。
  2. 默认安全(Secure by default):SQL Server创造性的默认安装并激活关键的核心数据库组件。这就是说不是核心的数据库的功能不会安装,或者安装之后不会启用。没有安装的功能不安装就不会作为攻击目标。你必须清醒意识安装或启用的非核心功能。这会阻止你可能不知道却安装功能的很多攻击,你以为从未用过它们。
  3. 部署安全(Secure in deploymen):微软提供工具,支持安装SQL Server的安全并保持它的安全。SQL服务器配置工具帮助你配置服务器安全。最重要的是,SQL Server的更新已经是微软在线更新的一部分,因此很容易获得安全的更新和补丁。
  4. 互动安全(Secure through communication):微软已经建立了完善的基础设施来手机它产品中的漏洞。但这些信息如果只留在微软内部的话是没有任何用处的。因此公司致力于新漏洞的互动,积极打补丁来修正它们,定期发布更新到它的在线帮助系统来体现新的安全信息。

“它是安全的”的理念已经影响了整个产品。尽管SQL Server一打开就是相当安全的,当你创建数据库和安装服务时,你必须做出明智的安全选择来保持SQL Server的安全。作出并保证生产数据库服务器的安全需要行动和警惕。

记住有时候保护数据的最佳方法是直接不把它不放到数据库里——例如,只保存你必须绝对坚持有效的信用卡信息(这样的人并不多)。如果你没有这样的需求,你应该处理信用卡事务,保存结果,而不是信用卡信息本身。你不会承受你没有数据上的安全风险。

安全的2个阶段

SQL Server的安全模型,像Windows一样,是个2个阶段的过程,允许用户和其它登录的访问服务器里受保护的资源。

  1. 身份验证(Authentication):一个用户登录成功,是有效的,可以访问服务器。身份验证回答问题,“你是谁?“需要用户去证明它,通常需要用户提供用户名和对应的密码,但其它形式的证据变得更加流行。
  2. 授权(Authorization):用户可以和SQL Server对象互动——例如数据库,表和存储过程——哪个用户有权限。授权回答问题,”你可以做什么?“。

用户可以登录到SQL Server,但除非它们有权限做什么,例如访问数据库,它就做不了什么。因此你不仅需要为你的用户提供授权凭证,你还要授权它们访问数据,在每个它们需要使用的数据库里为它们授权一次,定义账号。

当你考虑它的时候,在每个数据库里需要一个用户账号更有意义。不然的话,什么可以阻止用户登录到SQL Server并可以访问想访问任何数据库。这个概念有不同的含义来实现不同的场景,但这是安全的基本状态。

在这个系列的接下来文章会谈到验证和授权,你会学到在SQL Server里如何实现各种安全功能来应付你对数据已经识别的威胁。

SQL Server安全术语

当你与SQL Server和其它产品打交道时,你会碰到各种特定的专业术语。这里有一些最常见的术语,还有在数据库安全上下文里它们的含义。

  1. 验证(Authentication):如上面提到的,验证是积极识别一个人的过程,通过需要证明它是可以登录的人。它回答问题:你是谁?
  2. 授权(Authorization):一旦系统验证你为一个有效用户,授权(如上所述)决定用户在服务器或数据库拥有的权限。它回答问题,这里现在你能做什么?
  3. 组(Group):在Windows里,组是已登录后与它关联的主体。任何授权到组都会授权到组里相关联的登录。
  4. 模拟(Impersonation):所有的Windows进程,包括各种SQL Server进程,在特定的安全上下文里运行,通常是主体引起进程启动。当进程临时在不同的安全上下文时会发生模拟。这是非常强大的切必需的能力,但会引起潜在的滥用。
  5. 登录(Login):登录是拥有服务器实例里的对象一些访问级别的主体。通常,登录常用来与用户交互。但是SQL Server登录是一个用来从外面访问服务器的账号。有时候登录包括访问服务器级别的对象,例如配置信息,但不会授予数据库里的任何权限。
  6. 许可(Permission):许可是访问保护资源的权利,例如从表读取数据或在服务器级别创建新的数据库。一个学科通常意味着其他许可,取决于对象许可的范围。
  7. 主体(Principal):主体是可以接收访问SQL Server里保护资源的任何用户或代码组件。
  8. 权限(Privilege):权限是主体拥有的广泛权利和许可。这个词有时候和许可交替使用,通常意味着特定、狭义的权利。权利意味着一组广泛的许可。
  9. 角色(Role):SQL Server角色类似于Windows用户组,但只限于SQL Server实例范围。对于一个组,你可以分配登录和用户到角色,这就是这个角色拥有登录和用户的所有许可。
  10. 用户(User):用户是在特定数据库里拥有对象的一些访问级别的主体。用户通常会映射到登录。简单来说,登录可以访问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/

(0)

相关推荐

  • SQL server 2008 数据安全(备份和恢复数据库)

    下边是我对部分内容的总结,里边偏向了T-SQL语句实现的总结,对于SQL Server Management Studio中对象管理器的操作并没有太多的总结,因为这些都有一些向导,而且,大部分都是在对应的节点,右击找相应的操作,相应的对象,然后根基向导去操作! 首先是大概知识点的总结: 下边是一些T-SQL语句对应的总结,1,管理备份设备的语句: 2,备份的语句: 3,数据恢复的对应语句: 最后, 上边讲到了备份有完全备份,差异备份,事务日志备份和文件组和数据文件备份,恢复有简单恢复,简单恢复,

  • SQLServer 2008中的代码安全(一) 存储过程加密与安全上下文

    <一>存储过程加密 其实,用了这十多年的SQL server,我已经成了存储过程的忠实拥趸.在直接使用SQL语句还是存储过程来处理业务逻辑时,我基本会毫不犹豫地选择后者. 理由如下: 1.使用存储过程,至少在防非法注入(inject)方面提供更好的保护.至少,存储过程在执行前,首先会执行预编译,(如果由于非法参数的原因)编译出错则不会执行,这在某种程度上提供一层天然的屏障. 我至今还记得大约八.九年前采用的一个权限控制系统就是通过拼凑一个SQL语句,最终得到了一个形如" where

  • 创建安全的个人Web服务器(winserver2003、sql2000)

    一.Windows Server2003的安装   1.最小2个分区,分区格式都采用NTFS格式 2.在断开网络的情况安装好2003系统 3.安装IIS,仅安装必要的 IIS 组件.(禁用不需要的如FTP 和 SMTP 服务)   默认情况下,IIS服务没有安装,在添加/删除Win组件中选择"应用程序服务器",然后点击"详细信息",   双击Internet信息服务(iis),勾选以下选项:   Internet 信息服务管理器:公用文件:后台智能传输服务 (BIT

  • SQL Server 数据库安全管理介绍

    对于数据库应用程序,数据库的安全是至关重要的.SQL Server的安全功能可以保护数据免受未经授权的泄漏和篡改!下边是对安全一章的总结! 首先是安全对象的一些总结!大家看这张图: 在这里我把固定服务器角色和固定数据库角色的详细内容给大家! 1, 固定服务器角色的: 2,固定数据库角色: 当然有了这些知识基础,我们如何管理这些安全项目呢? 1,先看看我们验证模式的设置, 2,用户登录名的管理设置: 3.1角色的设置(对象资源管理器): 3.2,角色管理设置(T-SQL语句): 4.管理权限的设置

  • SQL Server 2008中的代码安全(八)透明加密(TDE)

    当一个用户数据库可用且已启用TDE时,在写入到磁盘时在页级实现加密.在数据页读入内存时解密.如果数据库文件或数据库备份被盗,没有用来加密的原始证书将无法访问.这几乎是SQL Server2008安全选项中最激动人心的功能了,有了它,我们至少可以将一些初级的恶意窥视拒之见外. 下面的两个例子将展示如何启用和维护透明数据加密. 示例一.启用透明加密(TDE) /********************TDE**************** 3w@live.cn ****************/ U

  • SQL Server 2012 安全概述

    在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Server里的安全功能充分利用,不用在面对特定威胁,不能保护你数据的功能上浪费时间. 从让人眼花缭乱的客户端使用连接,通过到处分布的网络,尤其是互联网,关系数据库在各种应用程序里广泛使用.这使数据对任何人,在任何地方都可访问.数据库可以保存人类知识的很大部分,包括高度敏感的个人信息和让国际商务工作的关

  • Sql Server 2008R2升级Sql Server 2012图文教程

    环境: Windows server 2008 r2 Standard +SqlServer2008R2 内网环境需要升级为SQL server 2012 升级安装时提示版本不支持 网上查询相关问题, 必须是SQL server2008 r2 sp1以上及需要安装Sp2补丁包才能升级为SQL server 2012 1)下载地址:微软官网 https://www.microsoft.com/zh-CN/download/details.aspx?id=30437 2)选择你对应的安装SQL se

  • SQL Server 2012 安装图解教程(附sql2012下载地址)

    在安装微软最新数据库SQL Server 2012之前,编者先确定一下安装环境:Windonws 7 SP1,32位操作系统.CPU是2.1GHz赛扬双核T3500,内存2.93GB. sql2012下载 http://www.jb51.net/softs/79861.html 安装SQL Server 2012的软硬件环境参数 根据微软的下载提示,32位的Windows 7操作系统,只需下载列表最下面的CHSx86SQLFULL_x86_CHS_Core.box. CHSx86SQLFULL_

  • SQL SERVER 2012新增函数之逻辑函数CHOOSE详解

    SQL SERVER 2012中新增了CHOOSE,该函数可以从值列表返回指定索引处的项. 例如: select CHOOSE(3,'A','B','C','D') as R1 /* R1 ---- C */ CHOOSE并不能这么用,例如有个字符串'A,B,C,D',我们并不能用choose得到其中的某个值: select choose(2,'A,B,C,D') /* null */ CHOOSE的主要功能和CASE WHEN类似,例如数据库中有字段Sex:1表示男,2表示女. if obje

  • Sql Server 2012 转换函数的比较(Cast、Convert和Parse)

    语法结构: 1. Cast 语法结构:CAST ( expression AS data_type [ ( length ) ] ) 2. Convert 语法结构:CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) 3. Parse 语法结构:PARSE ( string_value AS data_type [ USING culture ] ) 其中,Parse 为 Sql Server 的新特性 expression

  • SQL Server 2012使用Offset/Fetch Next实现分页数据查询

    在Sql Server 2012之前,实现分页主要是使用ROW_NUMBER(),在SQL Server2012,可以使用Offset ...Rows  Fetch Next ... Rows only的方式去实现分页数据查询. select [column1] ,[column2] ... ,[columnN] from [tableName] order by [columnM] offset (pageIndex-1)*pageSize rows fetch next pageSize r

  • 基于Win2008 R2的WSFC实现 SQL Server 2012高可用性组(AlwaysOn Group)

    两年前的<SQL Server 2008 R2数据库镜像部署>,今天"再续前缘"-- 微软新一代数据库产品SQL Server 2012已经面世一段时间了,不管从功能上讲还是性能上的体现,较之其早期产品都有了很大提升.特别是其引入高可用性组(AlwaysOn Group, AG)这一概念和功能,大大增强和提高了SQL Server的可用性,在之前的镜像数据库的基础上有了质的变化. SQL Server 2012高可用性组在实现过程中较之早起的SQL Server故障转移群集

  • SQL Server 2012安装后服务器名称找不到的解决办法

    网上说使用localhost即可,确实没错,但是有的仍旧会报出无法找到错误,我在无法通过的时候又重新安装了SQLServer,这次选中全部默认安装,之前使用的是选择安装,然后发现多了几个配置,其中有一项是建立实例,然后我再次选默认,安装完成后,再启动SQLServer2012,服务器名称中输入localhost,连接,ok. 猜想:估计是安装时没有建立实例所致,本机就没有安装实例 ,所以填localhost也没有用了. 以上所述是小编给大家介绍的SQL Server 2012安装后服务器名称找不

  • sql server 2012安装程序图集

    重点:下面的安装步骤都在断网环境下安装的 因为我想查看联网跟没有联网SQL2012会不会下载并安装.net2.0 和.net3.5和.net4和SP1补丁包 我的环境: 没有集成SP1补丁包的安装包大小是4.71GB,在论坛上各个安装包大小版本都有,我觉得还是以MSDN我告诉你或者MSDN为准. 问题一:X64位 集成SP1只需要3.94GB,比X86-X64版本大小还要小??而且在安装X86-X64版的时候没有选项给你选择是安装 SQL2012 32位还是64位?? 为了验证下载下来的文件是从

  • SQL Server 2012 安装与启动图文教程

    本文给大家介绍sql server2012安装与启动图文教程,非常详细. sqlserver2012安装步骤如下所示: SQL Server 2012 安装过程很漫长, 里面很多界面不一一截取了,我分别在win7 企业版 64位 和 win10专业版SP1 64位 装了SQL Server 2012 ,都没有问题. 1. 安装的功能选择,选择"全部" 2. 数据库引擎设置,选择"混合模式",给系统管理员sa设定登录密码. 如果你在安装的时候选择的是windows登录

随机推荐