3. 对称密钥
可以使用证书来创建用来在数据库中进行加密和解密的对称密钥。使用CREATE SYMMETRIC KEY语句:
CREATE SYMMETRIC KEY key_name [ AUTHORIZATION owner_name ] WITH <key_options> [ , … n ] ENCRYPTION BY <encrypting_mechanism> [ , … n ] <encrypting_mechanism> ::= CERTIFICATE certificate_name | PASSWORD = ‘password’ | SYMMETRIC KEY symmetric_key_name | ASYMMETRIC KEY asym_key_name <key_options> ::= KEY_SOURCE = ‘pass_phrase’ | ALGORITHM = <algorithm> | IDENTITY_VALUE = ‘identity_phrase’ <algorithm> ::= DES | TRIPLE_DES | RC2 | RC4 | DESX | AES_128 | AES_192 | AES_256 |
同CREATE CERTIFICATE语句一样,CREATE SYMMETRIC KEY语句相当灵活。多数情况下,你只需使用少量的选项。如下例中,创建一个对称密钥,它使用前节中创建的证书来加密:
CREATE SYMMETRIC KEY TestSymmetricKey WITH ALGORITHM = TRIPLE_DES ENCRYPTION BY CERTIFICATE TestCertificate; |
对称密钥可以用另一个对称密钥、非对称密钥、密码或证书来加密。系统也提供了ALTER SYMMETRIC KEY和DROP SYMMETRIC KEY语句来管理对称密钥。这些语句的用法请参考联机丛书。
当删除密钥和证书时,删除的顺序很重要。SQL Server不会允许你删除还在被用来加密其他密钥的证书和密钥。
3.1 对称密钥加密
SQL Server使用下面的函数来进行对称密钥加密:EncryptByKey,DecryptByKey和Key_GUID。Key_GUID返回特定对称密钥的GUID。语法为:
Key_GUID( ‘Key_Name’ ) EncryptByKey的语法为: EncryptByKey( key_GUID, { ‘cleartext’ | @cleartext } [ , { add_authenticator | @add_authenticator } , { authenticator | @authenticator } ] ) |
Key_GUID是对称密钥的GUID,cleartext为明文,Add_authenticator和authenticator指示是否使用验证器来禁止对加密字段进行整个值替换。
DecryptByKey做EncryptByKey相反的事情,它解密先前使用EncryptByKey加密的数据。语法为:
DecryptByKey( { ‘ciphertext’ | @ciphertext } [ , add_authenticator , { authenticator | @authenticator } ] ) |
Ciphertext是密文。Add_authenticator,authenticator,如果指定,必须和先前EncryptByKey时指定相同的值。DecryptByKey不需要你显示指定对称密钥的GUID。但使用的对称密钥必须已经在当前数据库中打开。OPEN SYMMETRIC KEY用来打开对称密钥。
下面的代码演示使用对称密钥来加密和解密。
— Use the AdventureWorks database USE AdventureWorks; — Create a Database Master Key CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘p@ssw0rd’; — Create a Temp Table CREATE TABLE Person.#Temp (ContactID INT PRIMARY KEY, FirstName NVARCHAR(200), MiddleName NVARCHAR(200), LastName NVARCHAR(200), eFirstName VARBINARY(200), eMiddleName VARBINARY(200), eLastName VARBINARY(200)); — Create a Test Certificate CREATE CERTIFICATE TestCertificate WITH SUBJECT = ‘Adventureworks Test Certificate’, EXPIRY_DATE = ’10/31/2009′; — Create a Symmetric Key CREATE SYMMETRIC KEY TestSymmetricKey WITH ALGORITHM = TRIPLE_DES ENCRYPTION BY CERTIFICATE TestCertificate; OPEN SYMMETRIC KEY TestSymmetricKey DECRYPTION BY CERTIFICATE TestCertificate; — EncryptByKey demonstration encrypts 100 names from the Person.Contact table INSERT INTO Person.#Temp (ContactID, eFirstName, eMiddleName, eLastName) SELECT ContactID, EncryptByKey(Key_GUID(‘TestSymmetricKey’), FirstName), EncryptByKey(Key_GUID(‘TestSymmetricKey’), MiddleName), EncryptByKey(Key_GUID(‘TestSymmetricKey’), LastName) FROM Person.Contact WHERE ContactID <= 100; — DecryptByKey demonstration decrypts the previously encrypted data UPDATE Person.#Temp SET FirstName = DecryptByKey(eFirstName), MiddleName = DecryptByKey(eMiddleName), LastName = DecryptByKey(eLastName); — View the results SELECT * FROM Person.#Temp; — Clean up work: drop temp table, symmetric key, test certificate and master key DROP TABLE Person.#Temp; CLOSE SYMMETRIC KEY TestSymmetricKey; DROP SYMMETRIC KEY TestSymmetricKey; DROP CERTIFICATE TestCertificate; DROP MASTER KEY; |
SQL Server内置了用来加密敏感数据的密钥、证书等函数。使用这个功能可以极大的增加数据库和应用的安全性。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
SQL Server 2005支持服务结束 升级何去何从
SQL Server 2005的支持就要结束了,就在2016年4月12日,SQL Server 2005的客户们应该升级了。
-
SQL Server 2005即将终止服务 你准备好了么?
2016年4月12日,微软将正式终止SQL Server 2005相关服务。微软正在终止扩展支持,这意味着不再有新特性更新,什么都没了。
-
解决SQL服务器提示属性IsLocked不可用于登录用户的错误
在SQL Server中,权限的分配很重要。特别是在用户数量众多的数据库里面,用户权限,架构的划分经常会导致权限之间的冲突,导致无法登陆。
-
TT数据库特别推荐:SQL Server编年史
无论是菜鸟还是资深DBA,除了要掌握基本的数据库管理、操作之外,还需要对不同产品的发展历史有一个了解。