手机
当前位置:查字典教程网 >编程开发 >mssql数据库 >SQLServer 2008中的代码安全(五) 非对称密钥加密
SQLServer 2008中的代码安全(五) 非对称密钥加密
摘要:非对称密钥包含数据库级的内部公钥和私钥,它可以用来加密和解密SQLServer数据库中的数据,它可以从外部文件或程序集中导入,也可以在SQL...

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

我们看一组例子:

示例一、创建非对称密钥

创建非对称密钥使用如下命令:

CREATE ASYMMETRIC KEY 创建非对称密钥。(http://msdn.microsoft.com/en-us/library/ms174430.aspx)

复制代码 代码如下:

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

use DB_Encrypt_Demo

go

CREATE ASYMMETRIC KEY asymDemoKey --创建非对称密钥名称

WITH ALGORITHM = RSA_512 --加密安全类型

ENCRYPTION BY PASSWORD = 'TestASYM123!' --密码

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

使用目录视图sys.asymmetric_keys(http://msdn.microsoft.com/en-us/library/ms188399.aspx)来查看。

复制代码 代码如下:

--查看当前数据库中的非对称密钥

use DB_Encrypt_Demo

go

SELECT name, algorithm_desc, pvt_key_encryption_type_desc

FROM sys.asymmetric_keys

----结果返回

/*

name algorithm_desc pvt_key_encryption_type_desc

asymDemoKey RSA_512 ENCRYPTED_BY_PASSWORD

*/

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

你可以使用带有ENCRYPTION BY PASSWORD和DECRYPTION BY PASSWORD选项的ALTER ASYMMETRIC KEY(http://technet.microsoft.com/en-us/library/ms189440.aspx)修改私钥的密码。

复制代码 代码如下:

--修改私钥密码

ALTER ASYMMETRIC KEY asymDemoKey--要修改的密钥名称

WITH PRIVATE KEY --私钥

(ENCRYPTION BY PASSWORD = 'newpasswordE4D352F280E0',--指定新密码

DECRYPTION BY PASSWORD = 'TestASYM123!')--旧密码是用来解密的

示例四、使用非对称密钥对数据进行加密和解密。

由于同时需要公钥和密钥,在维护保密数据时使用非对称密钥来加密数据是非常安全的方式。但同时用于大数据集时将消耗更多的资源。

不推荐使用非对称密钥对数据加密,但它仍然是一个选择。一旦将非对称密钥加到数据库,就可以用来加密和解密数据。

用到以下两个sql函数:

EncryptByAsymKey 加密数据。(http://technet.microsoft.com/en-us/library/ms186950.aspx)

DecryptByAsymKey解密数据。(http://msdn.microsoft.com/en-us/library/ms189507.aspx)

注意,在通过证书加密时,DecryptByAsymKey返回的是varbinary类型的加密数据。

下面是一个例子:

复制代码 代码如下:

use DB_Encrypt_Demo

go

--创建需要加密的数据

Create Table BankUser

(PKID int primary key identity(10001,1)

,UserNo varbinary(1000) null

,CurState smallint default(0) not null

)

go

insert into BankUser

(UserNo,CurState)

VALUES (EncryptByAsymKey(AsymKey_ID('asymDemoKey'),'137492837583249ABR'),1)

--插入一条记录,字段UserNo存储了加密的号码值

go

select PKID,Curstate, cast(UserNo as nvarchar(1000)) as UserNo

from BankUser

where PKID=10001

明文结果:

SQLServer 2008中的代码安全(五) 非对称密钥加密1

查看未加密的数据:

复制代码 代码如下:

SELECT PKID,Curstate,

cast

(DecryptByAsymKey(AsymKey_ID('asymDemoKey'),UserNo,N'newpasswordE4D352F280E0')

as varchar(1000)) as UserNo --需要原始私钥

from BankUser where PKID=10001

SQLServer 2008中的代码安全(五) 非对称密钥加密2

示例五、删除非对称密钥

命令:DROP ASYMMETRIC KEY 删除指定的非对称密钥( http://msdn.microsoft.com/en-us/library/ms188389.aspx)

例子:

DROP ASYMMETRIC KEY asymDemoKey

小结:

1、本文主要介绍非对称密钥的创建、删除、查看以及用它来修改私钥、进行数据的加密和解密。

2、非对称密钥包含数据库级的内部公钥和私钥,它可以用来加密和解密SQL Server数据库中的数据。

3、非对称密钥对于数据库加密属于高安全选项,因而需要更多的SQL Server资源,不推荐使用。

下文将主要介绍相对简单的并且广泛应用的对称密钥加密(Symmetric Key Encryption)

【SQLServer 2008中的代码安全(五) 非对称密钥加密】相关文章:

SQL Server 2005中更改sa的用户名的方法

SQL Server 2000中的触发器使用

SQL Server 2008 密钥 key 使用方法

SQL Server 2008网络协议深入理解

SQL Server 2008 新特性 总结复习(一)

SQL Server 2005中的外联结用法

SQLServer 2008中通过DBCC OPENTRAN和会话查询事务

SQLServer2008安装程序失败原因一

SQL Server 2008 R2 应用及多服务器管理

Sql Server 2000 行转列的实现(横排)

精品推荐
分类导航