SQL Server安全(8/11):数据加密(Data Encryption)

在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切。但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念。这篇文章提供了基础,因此你可以对SQL Server里的安全功能充分利用,不用在面对特定威胁,不能保护你数据的功能上浪费时间。


从让人眼花缭乱的客户端使用连接,通过到处分布的网络,尤其是互联网,关系数据库在各种应用程序里广泛使用。这使数据对任何人,在任何地方都可访问。数据库可以保存人类知识的很大部分,包括高度敏感的个人信息和让国际商务工作的关键数据。

对于想要偷取数据或通过篡改数据来伤害数据的拥有者的 人来说,这些功能使数据库成为有吸引力的目标。确保你的数据安全是SQL Server配置和使用它来保存数据的程序的重要部分。这个系列会探寻SQL Server 2012安全的基本,这样的话你可以保护你的数据和服务器资源,按你需要的安全等级来保护数据,免受这些威胁对你数据的影响。大部分信息对SQL Server的早期版本也适用,回到SQL Server 2005也可以,因为那是微软在产品里彻底检查安全的时候。但我也会谈论只在SQL Server 2012和后续版本里才有的功能。

一个重要的安全概念是深度防御,这就是说最好的安全分层保护而不是单靠一层保护。在你的网络,服务器,SQL Server实例,数据库都做了安全防护后,你可以添加最后一个通过加密敏感数据的强大数据保护层。这篇文章会探寻通过加密的数据库保护,同时包括数据在网络传输或内存里,和在表里休息。你会学到加密密匙的层级和你可以用来加密数据的各种密匙,还有你如何管理密匙,让服务器为你服务。

数据加密

到目前为止,你学习了SQL Server内建的很多强大安全功能,你可以用来保护你的数据和其它数据库对象。当你把这些和强大的网络完全结合,例如防火墙,最小特权用户账号和其它工具,你的数据应该非常安全,是不是?

答案还是不安全。虽然SQL Server 2012和SQL Server 2014目前已经是最安全的了(现在已经有SQL Server 2016了)——假设你充分并有效使用了安全功能——成功的攻击还是可能的。黑客是聪明的,因此很有可能会有某些人,在某个时间,找出黑入你数据库服务器的方法,并访问你的数据。即使你有100%的自信,这样的攻击还是可能的,你会在内部攻击的接收端发现自己——信任的员工做坏事了。

可以帮你理解为你的数据和你需要保护的其它资源,如何获得安全的最高级别的安全主体是深度防御。深度防御意味着你从未依赖于单个手段来保护任何有价值的。你加入层层不同的安全,这样的话,任何攻击者在拿到你的数据前,需要突破多个困难障碍。

这也是很多中世纪的城堡有个护城河作为第一道防线,里面有很多讨厌的动物在游泳。接下来一层是戒备森严,厚的的橡木门和几米厚的石墙。经常有另一个厚的,戒备森严的墙在外墙里。层层安全保护着里面的人和宝藏。

同样的方法,SQL Server有很多层安全,它有很多来建造和维护它们。但当你的数据是极其宝贵时,你可以加最后一层防护:加密。

SQL Server 2015是第一个丰富支持数据加密的版本,自那后的每个版本都做了一些改进。你可以使用各种加密类型,包括各种加密密匙,可以秘密传输数据为看不懂的胡言乱语,除非用户有密匙来解密。SQL Server支持各类加密算法。而且最重要的是,你可以让服务器来做管理密匙和的保持它们绝密的所有工作,这是加密最困难的部分。

提示:

加密是极其密集处理的操作,因为它需要复杂的计算。现代的计算机设备都很快,对于包含75个加密列,有1亿条数据的表,完成计算需要多个处理能力,对于设计不好的查询,你会有巨大的负担,会把动力不足的服务器累趴。使用加密来保护只值得终层保护的数据。

加密密匙(Encryption keys)

SQL Server允许使用三种加密密匙的任何之一。加密密匙是小块数据,当插入到算法后,转化数据为密文,这个密文如果没有正确的加密密匙,通常不能转为明文。

  • 非对称密匙(Asymmetric Key):这种加密类型使用匹配的公共/私有密匙。一个密匙来加密数据,另一个解密它。你可以和任何人共享公共密匙,这样他们就加密任何数据,只有你才可以使用私密密匙来解密。SQL Server使用长度512、1024 或 2048 位私密密匙的RSA加密算法。关于这个算法,可以参考下维基百科。
  • 对称密匙(Symmetric Key):在这个加密类型里,加密和解密数据的密匙数据是一样的。这有时被称为公有密匙,因为双方共享数据必须有相同的密匙。在某些情况下,很难使用对称密匙,因为安全传输秘密从一个地方到另一个地方是个问题。对称密匙在数据库里使用是个好主意,因为他们从未离开数据库。SQLServer支持RC4,RC2算法,也支持DES,AES算法家族。你可以在这个网站了解这些算法的概要信息。

提示:

微软在SQL Server 2012里已经明智的取消了RC4对称密匙,只有数据库的兼容级别为90或100(SQL Server 2005和SQL Server2008)才可以,这是为了保持向后兼容。RC4有很多弱点,最重要的是算法不散列话密匙——在加密前加些随机的文本到明文——这样在同样的密文里加密值是重复的。这让解密比应该有的难度更简单。即使你维护SQL Server的老版本,也不要使用RC4!

  • 证书(Certificate):证书是对公共密匙的数字封装,作为非对称密匙加密的一部分。SQL Server可以为你创建使用的证书,或者你可以使用第三方证书授权。SQL Server使用互联网工程任务组(Internet Engineering Task Force)的X.509规格。

 SQL Server使用如下的加密密匙层级,如插图8.1所示,来加密和保护你存储在数据库里的密匙。

插图8.1:加密密匙层级

在服务器级别,SQL Server的每个实例有个服务主密匙(Service Master Key),你用来加密低一层的其它密匙。这个密匙在SQL Server实例安装时创建。你可以备份和还原它,如果它已经泄露的话,也可以重新生成它,但绝大部分时间你可以不理会它。SQL Server会为你管理它,你也从不会直接使用它。服务主密匙在系统底层存储并保护,使用Windows数据保护API或DPAPI。

服务主密匙有一些内部使用,但我们这里的目的是SQL Server用它来加密和保护你创建的任何数据库主密匙(Database Master Keys)。在你加密的任何数据库里都需要数据库主密匙。它是加密和保护任何你创建密匙的对称密匙。你需要在数据库上下文里使用代码8.1的语句创建它。

1 USE EncryptionDB;
2 GO
3 
4 CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'gK#3hbQKDFQY0oF';

代码8.1:在EncryptionDB数据库里创建一个数据库主密匙的代码

提示:

如果你没有按这个系列文章逐篇阅读的话,你可以执行下列代码来初始化测试环境。

 1 -- *** Beginning of setup code ***
 2 -- *******************************
 3 
 4 -- Set up sample encryption database
 5 USE master;
 6 GO
 7 
 8 -- Set up a login
 9 IF SUSER_SID('User1') IS NOT NULL DROP LOGIN User1;
10 CREATE LOGIN User1 WITH password = '3f@$fWDY3QvP&K0';
11 GO
12 
13 IF DB_ID('EncryptionDB') IS NOT NULL DROP DATABASE EncryptionDB;
14 CREATE DATABASE EncryptionDB;
15 GO
16 USE EncryptionDB;
17 GO
18 
19 CREATE USER User1 FOR LOGIN User1;
20 
21 CREATE TABLE Customer (
22     CustId int, 
23     Name nvarchar(30), 
24     City varchar(20), 
25     CreditCardType varbinary(1000),
26     CreditCardNumber varbinary(1000), 
27     Notes varbinary(4000));
28 GO
29 
30 -- Grant access on the table to user
31 GRANT SELECT, INSERT ON Customer to User1;
32 
33 -- *** End of setup code ***
34 -- *************************

数据库主密匙保存2次:服务主密匙加密一次并保存,用你提供的密码再次加密。你可以移除其中一个,但不能同时移除。通常我们都2个都保留。

作为对称密匙,数据库主密匙在你使用它之前必须打开。打开密匙把它载入内存并解密它,这样就可以使用了。因为服务器的服务主密匙加密数据库主密匙,SQL Server可以Wie你自动打开密匙,这样的话你基本不需要直接打开它。想服务主密匙,你可以备份和还原它,想要的话也可以修改它。

你会使用插图8.1里的其它密匙来加密数据。箭头表示你用来加密和保护其它密匙的密匙。例如,你可以使用数据主密匙来加密其它证书或对称密匙。证书和非对称密匙只能保护对称密匙,对称密匙可以被证书,非对称密匙和其它对称密匙保护。

密匙管理

插图8.1战士了加密密匙的其它方面:你可以使用任何另一个密匙或密码来创建任何密匙。这个称为密匙管理,这是SQL Server可以为你处理一个主要服务。

密匙管理最困难的一部分选择正确的加密。历史上有很多密匙被拦截后,有很多国家秘密被破解。在二战期间,美国、英国和其它联盟国家把大量资源放入截取德国和日本的加密密匙,这样的话,他们可以截取并得到高机密的信息。在最近,很多安全性的应用程序被瓦解,因为攻击能找到在应用程序里或电脑上嵌入的密匙。安全共享秘密非常困难。

你可以自己管理SQL Server加密密匙,如果你选择使用密码,那秘密保存好密匙就是你的责任。大多数人不想这样做,因为它需要高度专业的技术技能。但如果你想承担任务,当你创建密匙时直接使用密码选项。密码就是基本的密匙,你要确保你可以安全的地方保存这个密匙,当你需要它的时候,可以密码传输它。

但你没必要处理这些细节,因为SQL Server会为你管理好密匙。它会为你加密新的密匙,使用你指定的任何方法作为CREATE语句的一部分,安全保存数据如同它保存任何敏感信息。

你有管理密匙的选项,但没事就不要乱动。

加密数据

现在我们来看一个在SQL Server里加密的一个例子。在这个场景里,Customer表有一些客户的常规信息。一些信息,例如客户名称和它们所在的城市,不是敏感的数据,不值得加密。其它数据,例如信用卡类型和号码及备注会包含特定敏感的个人信息,需要加密。

你会使用对称密匙来加密表的数据,但记住对称密匙需要数据库里一个证书或非对称密匙来保护它。因此,首先使用代码8.2来创建保护对称密匙的非对称密匙。

1 CREATE ASYMMETRIC KEY User1AsymmetricKey
2     AUTHORIZATION User1
3     WITH ALGORITHM = RSA_2048

代码8.2:创建使用RSA 2048位算法,属于User1的非对称密匙。

非对称密匙称为User1AsymmetricKey,AUTHORIZATION子句指定User1拥有密匙。这个密匙使用2048位的RSA加密,非常强的加密。这个必须是真的,真的重要数据!

接下来,使用代码8.3出阿健对称密匙User1SymmetricKey。(你必须为你的密匙取更有描述性的名称!)。在这个例子里,它使用TRIPLE_DES算法,用你刚创建的非对称密匙保护它。

1 CREATE SYMMETRIC KEY User1SymmetricKey
2     WITH ALGORITHM = TRIPLE_DES
3     ENCRYPTION BY ASYMMETRIC KEY User1AsymmetricKey;

代码8.3:创建使用Triple DES算法的对称密匙,用刚才的非对称密匙。

如果你想在数据库列出对称的加密密匙,你可以使用sys.symmetric_keys目录视图来查看它们。代码8.4生成了如插图8.2所示的结果。注意,因为数据库主密匙是对称密匙,他在列表里也显示了,你可以看到它用AES_256加密的。

1 SELECT * FROM sys.symmetric_keys;

代码8.4:在数据库列出对称密匙

插图8.2:查看 sys.symmetric_keys目录视图

代码8.5展示了EncryptionDB数据库里的表结构。(这个创建表的代码和刚才初始化环境代码是一样的):

1 CREATE TABLE Customer (
2     CustId int, 
3     Name nvarchar(30), 
4     City varchar(20), 
5     CreditCardType varbinary(1000),
6     CreditCardNumber varbinary(1000), 
7     Notes varbinary(4000));

代码8.5:创建Customer表,varbinary字段用来加密数据。

注意,因为最后三个字段会包含字节流的原始字符数据的加密数据,字段类型是varbinary类型。字段长度取决于数据的大小和保护它的算法。数据库有User1用户,它在表上有SELECT和INSERT许可。

最后,是时候加密一些数据了,我们忘表里插入一些数据。第一步使用如代码8.6的语句打开对称密匙。这一步让SQL Server从内部获得密匙,请确定用户有用这个密匙的许可,然后解密密匙到内存就可以开始使用了。

1 OPEN SYMMETRIC KEY User1SymmetricKey
2     DECRYPTION BY ASYMMETRIC KEY User1AsymmetricKey;

代码8.6:第一步使用对称密匙,使用OPEN SYMMETRIC KEY打开它

数据加密使用T-SQL的EncryptByKey函数,它生成唯一的GUID来标识密匙。你可以使用Key_GUID函数来获得GUID,而不必自己直接传入值。代码8.7是常规的T-SQL插入语句,往表里插入一些数据。

1 INSERT INTO Customer VALUES (1, 'Sally Roe', 'Chatinika',
2     EncryptByKey(Key_GUID('User1SymmetricKey'), 'Visa'),
3     EncryptByKey(Key_GUID('User1SymmetricKey'), '1234-5678-9009-8765'),
4     EncryptByKey(Key_GUID('User1SymmetricKey'), 
5         'One of our best customers. Treat like royalty.'));

代码8.7:插入加密数据到表,使用EncryptByKey和Key_GUID函数。

最后一步是关闭对称密匙,使用代码8.8。这个会从内存移除密匙,释放这些资源给其它用户。你应该经常在用完后就关闭密匙,因为它留在内存里的话,就会被不小心被攻击者利用。

1 CLOSE SYMMETRIC KEY User1SymmetricKey;

代码8.8:CLOSE SYMMETRIC KEY语句关闭密匙,从内存中移除它。

提示:

如果你要在批处理里使用加密和解密很多数据,可以留着它打开。打开和关闭密匙需要一点处理,这样的话你可以更高效。但不要忘记关闭它在你完成的时候!

现在运行SELECT语句看看表里有什么,如插图8.3所示。你可以看到在没加密字段看到明文,但加密字段是随机的字节流数据。你的数据现在是安全的!

 

插图8.3:在表里存储的加密数据。

在表里的数据是毫无用处的,除非有方法取出它。在这个例子里,你需要使用常规的SELECT语句,使用DecryptByKey函数来解密数据。这个函数返回varbinary数据,以为加密数据可以是任何数据类型。因此获得原始文本需要DecryptByKey函数的转化结果为合适的文本字符。

代码8.9打开密匙,运行SELECT语句。

1 OPEN SYMMETRIC KEY User1SymmetricKey
2     DECRYPTION BY ASYMMETRIC KEY User1AsymmetricKey;
3 SELECT CustID, Name, City,
4     CONVERT(VARCHAR, DecryptByKey(CreditCardType)) AS CardType,
5     CONVERT(VARCHAR, DecryptByKey(CreditCardNumber)) AS CardNumber,
6     CONVERT(VARCHAR, DecryptByKey(Notes)) AS Notes
7 FROM Customer;
8 CLOSE SYMMETRIC KEY User1SymmetricKey;

代码8.9:打开对称密匙,然后使用DecryptByKey函数的SELECT语句获得加密数据

这会显示如插图8.4的结果。

插图8.4:使用SELECT和DecryptByKey后的解密数据

提示:

相同的EncryptByAsymKeyEncryptByCert和其它方法都可以用作其它密匙,都有对应的Decrypt函数。

小结

SQL Server的数据加密功能为你的数据提供了额外一层保护,给你在全面的深度保护。像老的中世纪城堡有多层的要塞,SQL Server攻击者需要突破网络安全,服务器安全,SQL Server实例安全和数据库安全才可以拿到你的数据。然后,胜利就在眼前,它们还要处理数据强悍加密来拿到有用的数据。加上强悍的数据库安全,使用细微度的许可来提供最小特权,让主体只能访问它们需要的数据,你可以为你最敏感的数据建立坚不可摧的保护。

原文链接:

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

转载于:https://www.cnblogs.com/woodytu/p/5342444.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模拟人脑项目彻底宣告失败:耗资10亿欧,10年前轰动全球,如今死得悄无声息...

来源:凹非寺10年砸入10亿欧元,为了用计算机模拟人脑。这个十年前曾轰动全球的项目,如今彻底“死”了,死得悄无声息。要不是有位西方记者提起,人们几乎已经完全遗忘。模拟人脑?呵,实际连一只蠕虫…

变量传值

变量传值 PHP传方式有两种:赋值传值、引用传值 赋值传值: 将一个变量的值传递给另一个变量,array数组 示例: 引用传值: 将一个变量的内存地址传给另一个变量 写时复制: 对变量使用赋值传值时,PH…

物理学的忧伤,从现代物理学的死锁谈起

来源:量子学派“这是一篇信息量极大的文章,我不知道有多少人能真正读完。但希望大家能静下心来,暂且抛开生活的油盐酱醋茶,好好去感受一下——这些似乎离我们的生活太远的智慧和知识。”盛宴已过,天才再无用武之地&…

EPSON 程序

EPSON 代码程序 1.EPSON SPEL 语言代码示例: // String RCdata$, InData$, toks$(0), data1$, data2$, data3$ //定义字符型变量名需要添加“$”符号 Integer N, x Double VX(500), VY(500), VZ(500) #define delay_Time 0.1 Function mainSetNet #201, "19…

有人机/无人机混合编队协同作战研究综述与展望

来源: 人机与认知实验室摘要:有人机与无人机混合编队协同作战是未来空战的重要形式。有人机是中央指挥,而无人机直接接受有人机的指挥和控制,并进行战场态势感知、目标打击等。有人机和无人机可以看成空间上分离而逻辑上一体的巨型…

中国独角兽报告:2019

来源:泽平宏观文:恒大研究院 任泽平 连一席 谢嘉琪导读独角兽企业代表着新经济的活力,行业的大趋势,国家的竞争力。2018年全球资本市场风起云涌,独角兽势力大洗牌。有些独角兽融资困难,光环不再&#xff1b…

软银千亿美元愿景基金PPT,孙正义解读股权投资IRR=44%

来源:股权投资论坛(PE821010)综合“正和岛(zhenghedao)、皮卡丘财经、猎云网(ilieyun)、财立方(icailifang)、腾讯科技(qqtech)等综合 日本软银公司成立于1981年&#x…

Halcon算子学习:create_sheet_of_light_model

create_sheet_of_light_model (ProfileRegion : : GenParamName, GenParamValue : SheetOfLightModelID) 创建一个执行线结构光技术3D测量的的模型 输入: ProfileRegion 包含要处理的轮廓的图像的ROI。(如果所提供的区域不是矩形的,则使用其…

腾讯研究院院长司晓:互联网大脑的人文侧面

1989年万维网推出至今,互联网已经走过了30个年头。在这激荡的30年,随着社交网络、移动通信、云计算、物联网、工业互联网、大数据、人工智能等新技术和新事物不断涌现,互联网持续建立起复杂而庞大的连接,成为驱动经济与社会快速变…

Halcon算子学习:get_sheet_of_light_result

get_sheet_of_light_result ( : ResultValue : SheetOfLightModelID, ResultName : ) 获得用线结构光技术进行测量的标志性结果 输出: ResultValue 理想的测量结果。 SheetOfLightModelID 要使用的线结构光模型的句柄 输入: ResultName 规定应提供何…

5G芯片Top10一览,谁才是最后的赢家?

来源:Electronic Products、电子工程世界从无线网络基础设施和基站到智能手机再到物联网设备应用,这些芯片组有望简化向5G通信的过渡。5G有望提供一个完全互联的移动世界,其市场范围从联网汽车、智能城市、智能手机到物联网(IoT)设备&#xf…

HALCON标定板制作、标准文件输出方法、算子讲解

利用 Halcon软件自制标定板 参考博客: halcon相机标定及图像矫正 Halcon学习 标定助手 关键算子: gen_caltab ( : : XNum, YNum, MarkDist, DiameterRatio, CalPlateDescr, CalPlatePSFile : ) 为具有矩形排列标记的标定板生成标定板描述文件和相应的后…

国产光刻机的现状究竟如何?

来源:人民网-上海频道随着信息社会的迅速发展,手机、电脑、电视等各种电子设备越来越“迷你”,从之前的“大哥大”到现在仅仅几个硬币厚的时尚手机,从老式的矮胖电视到如今轻薄的液晶电视,都不离开集成电路的发展&…

如何使用UR机器人模拟软件URsim

如何使用UR机器人模拟软件URsim 机器人软件适用版本:Polyscope v1.3及以上 适用机器人:UR3、UR5、UR10 由于优傲机器人的系统是基于Linux核心开发的,模拟软体URsim也是在Linux系统下运行,通常大家使用的电脑系统为Windows&#…

中国团队新型类脑芯片登上《自然》封面

来源:澎湃新闻网从AlphaGo战胜人类顶级围棋选手,到人工智能系统以90%准确率诊断儿科疾病,近年来,人工智能的突破大多从智能的某个领域接近或超过人类智能,距离达到人类水平的人工通用智能(AGI,A…

20145324 《Java程序设计》第6周学习总结

20145324 《Java程序设计》第6周学习总结 教材学习内容总结 第十章 1、使用输入串流将数据从来源取出 InputStream 使用输出串流将数据写入目的地 OutStream 2、dump()方法并没有限定来源或目的地真实形式,依赖InputStream、OutStream 3、可以使用dump()从HTTP服务器…

MATLAB Robotic Toolbox 机器人工具箱示例

程序是基于Matlab2016a,工具箱版本为Robotic Toolbox 10.2 参考博客: MATLAB机器人工具箱使用 Matlab Robotic Toolbox V9.10工具箱(三):轨迹规划 六轴机器人建模方法、正逆解、轨迹规划实例与Matalb Robotic Toolbox 的实现 效果&#xff1a…

人工智能最受欢迎的十大TED演讲

来源:DataCastle数据城堡当我们过于关注机器学习的技术实现时,往往就会忽略技术在未来的应用及其政治后果。本文并没有讨论最适合解决某个问题可以用什么语言或算法,而是从最受欢迎的非营利组织TED中收集了一系列演讲。在这一系列的演讲中&am…

C++编程(一):匈牙利命名法

匈牙利命名法 许多 Windows 程序员都使用“匈牙利标记法”作为变量命名约定。这是为了纪念具有传奇色彩的微软程序员 Charles Simonyi。这种标记法非常简单,其基本原则为: 即变量名(标识符)以一个或者多个小写字母开始&#xff0…

工业机器人国内外的发展现状

工业机器人国内外的发展现状 工业机器人是集合了机械原理、系统动力学、机构运动学、计算机技术、控制理论、传感和人工智能等多种先进技术于一身的综合性装备[10]。1959年,由享有“机器人之父”美誉的恩格尔﹒伯格先生和德奥尔先生于美国共同发明了第一台工业机器…