SQL Server 2008中的代码安全(七):证书加密

ENCRYPTBYASYMKEY() –非对称密钥ENCRYPTBYCERT() –证书加密ENCRYPTBYKEY()
–对称密钥ENCRYPTBYPASSPHRASE() –通行短语加密

 SQL Server
2008中SQL应用系列–目录索引

 SQL Server
2008中SQL应用系列–目录索引

复制代码 代码如下:–SQLSERVER中的加密函数
2013-7-11ENCRYPTBYASYMKEY() –非对称密钥ENCRYPTBYCERT()
–证书加密ENCRYPTBYKEY() –对称密钥ENCRYPTBYPASSPHRASE() –通行短语加密

证书可以在数据库中加密和解密数据。证书包含密钥对、关于证书拥有者的信息、证书可用的开始和结束过期日期。证书同时包含公钥和密钥,前者用来加密,后者解密。SQL
Server可以生成它自己的证书,也可以从外部文件或程序集载入。因为可以备份然后从文件中载入它们,证书比非对称密钥更易于移植,而非对称密钥却做不到。这意味着可以在数据库中方便地重用同一个证书。

证书和非对称密钥使用数据库级的内部公钥加密数据,并且使用数据库级内部私钥解密数据。而对称密钥相对简单,它们包含一个同时用来加密和解密的密钥。困此,使用对称密钥加密数据更快,并且用在大数据时更加合适。尽管复杂度是考虑使用它的因素,但它仍然是一个很好的加密数据的选择。

—————————————————————————————–非对称密钥包含数据库级的内部公钥和私钥,它可以用来加密和解密SQL
Server数据库中的数据,–它可以从外部文件或程序集中导入,也可以在SQL
Server数据库中生成。它不像证书,不可以备份到文件。–这意味着一旦在SQL
Server中创建了它,没有非常简单的方法在其他用户数据库中重用相同的密钥。–非对称密钥对于数据库加密属于高安全选项,因而需要更多的SQL
Server资源。 –我们看一组例子:

注意:证书和非对称密钥同样的消耗资源。

 我们看一组例子:

–示例一、创建非对称密钥—-创建非对称密钥使用如下命令:

我们看一组例子:

示例一、创建对称密钥

–CREATE ASYMMETRIC KEY

示例一、创建数据库证书

对称密钥的特性是:在数据库会话中使用它对数据进行加密和解密前必须首先打开。

–以下语句创建一个非对称密钥asymDemoKey

创建数据库证书:CREATE SYMMETRIC KEY 
()

创建对称密钥使用如下命令:CREATE SYMMETRIC KEY 
创建对称密钥。()

use [pratice] go

USE
DB_Encrypt_Demo
GO
–创建证书
CREATE CERTIFICATE cert_Demo –证书名称
ENCRYPTION BY PASSWORD
=’asdfG!!!’–加密证书的密码
WITH SUBJECT =’DB_Encrypt_Demo Database Encryption
Certificate’,–证书主题
START_DATE =’3/14/2011′,
EXPIRY_DATE =’10/20/2012′–起止日期
GO

use
DB_Encrypt_Demo
go

CREATE ASYMMETRIC KEY asymDemoKey –创建非对称密钥名称 WITH ALGORITHM =
RSA_512 –加密安全类型 ENCRYPTION BY PASSWORD = ‘123!’ –密码

示例二、查看数据库中的证书


创建一个用于加密对称密钥的非对称密钥
CREATE ASYMMETRIC KEY
symDemoKey –名称
WITH ALGORITHM = RSA_512
–加密算法
ENCRYPTION BY PASSWORD
=’TestSYM456!’–密码

–示例二、查看当前数据库中的非对称密钥

使用目录视图sys.certificates()来查看。

— 创建一个对称密钥
CREATE SYMMETRIC KEY
sym_Demo
WITH ALGORITHM =
TRIPLE_DES
ENCRYPTION BY ASYMMETRIC KEY
symDemoKey

–使用目录视图sys.asymmetric_keys()来查看。

–查看当前数据库中的证书
use DB_Encrypt_Demo
go

示例二、查看当前数据库中的对称密钥

–查看当前数据库中的非对称密钥 USE [pratice] go

–查看证书
SELECT name, pvt_key_encryption_type_desc,
issuer_name
FROM sys.certificates

使用目录视图sys.symmetric_keys()来查看。

SELECT name, algorithm_desc, pvt_key_encryption_type_desc FROM
sys.asymmetric_keys

—-结果返回
/*
name pvt_key_encryption_type_desc issuer_name
cert_Demo ENCRYPTED_BY_PASSWORD DB_Encrypt_Demo Database Encryption
Certificate
*/

–查看当前数据库中的非对称密钥
use DB_Encrypt_Demo
go
SELECT name, algorithm_desc FROM
sys.symmetric_keys
—-结果返回
/*
name algorithm_desc
sym_Demo TRIPLE_DES
*/

–示例三、修改非对称密钥的私钥密码

示例三、备份和还原证书

示例三、修改非对称密钥的加密方式

–你可以使用带有ENCRYPTION BY PASSWORD和DECRYPTION BY
PASSWORD选项的–ALTER ASYMMETRIC KEY修改私钥的密码

创建证书后,也可以使用BACKUP
CERTIFICATE()命令备份到文件,为了安全地保存或在其他数据库中还原它。

你可以使用ALTER SYMMETRIC
KEY()命令修改对称密钥的加密方式。但执行前必须使用OPEN
SYMMETRIC
KEY()命令打开它。

–修改私钥密码 ALTER ASYMMETRIC KEY asymDemoKey–要修改的密钥名称 WITH
PRIVATE KEY –私钥 (ENCRYPTION BY PASSWORD = ‘456’,–指定新密码
DECRYPTION BY PASSWORD = ‘123!’)–旧密码是用来解密的

–备份证书
BACKUP CERTIFICATE cert_Demo
TOFILE=’H:\SqlBackup\certDemo.BAK’–证书备份路径,用来加密
WITH PRIVATE KEY
(FILE=’H:\SqlBackup\certDemoPK.BAK’,–证书私钥文件路径,用来解密
ENCRYPTION BY PASSWORD
=’1234GH!!!’,–加密私钥密码
DECRYPTION BY PASSWORD
=’asdfG!!!’
)–解密私钥密码

use
DB_Encrypt_Demo
go

–示例四、使用非对称密钥对数据进行加密和解密。—-由于同时需要公钥和密钥,在维护保密数据时使用非对称密钥来加密数据是非常安全的方式。–但同时用于大数据集时将消耗更多的资源。—-不推荐使用非对称密钥对数据加密,但它仍然是一个选择。一旦将非对称密钥加到数据库,就可以用来加密和解密数据。—-用到以下两个sql函数:—-EncryptByAsymKey
加密数据。—-DecryptByAsymKey解密数据。

–备份后,可以在其他数据库中使用这个证书,或使用DROP
CERTIFICATE命令删除它。
DROP CERTIFICATE cert_Demo
GO
–从备份文件中还原证书到数据库中
CREATE CERTIFICATE cert_Demo
FROMFILE=’H:\SqlBackup\certDemo.BAK’
WITH PRIVATE KEY
(FILE=’H:\SqlBackup\certDemoPK.BAK’,
DECRYPTION BY PASSWORD =’1234GH!!!’
,–解密私钥密码
ENCRYPTION BY PASSWORD
=’asdfG!!!’)–加密私钥密码

–先用私钥密码打开对称密钥
OPEN SYMMETRIC KEY
sym_Demo
DECRYPTION BY ASYMMETRIC KEY
symDemoKey
WITH PASSWORD =’TestSYM456!’

–注意,在通过证书加密时,DecryptByAsymKey返回的是varbinary类型的加密数据。—-下面是一个例子:

 

–打开之后,先增加密码加密,取代原密钥
ALTER SYMMETRIC KEY
sym_Demo
ADD ENCRYPTION BY PASSWORD
=’newnew!456′
–再删除非对称密钥加密
ALTER SYMMETRIC KEY
sym_Demo
DROP ENCRYPTION BY
ASYMMETRIC KEY symDemoKey
–完成操作后,关闭对称密钥
CLOSE SYMMETRIC KEY
sym_Demo

use [pratice] go

示例四、管理证书的私钥