SQL SERVER2005加密解密技术

小弟不才,最近完成了一个SQL 2005数据库加密解密项目。把完成项目的问题记录下来,以便日后参考。

        先来简单说明SQL SERVER2005数据库加密解决的方法:
        数据加密是SQL Server 2005新增的数据安全特性,这对应用程序开发者来说是非常重要的改进。SQL Server 2005服务器支持的加密算法主要有以下三种:对称式加密(Symmetric Key Encryption;⑵ 非对称密钥加密(Asymmetric Key ryption;⑶ 数字证书(Certificate;
        下面具体看一下如何对数据库数据进行加密:
        1、产生密钥:在含有ENTP表的数据库中使用Triple DES作为加密算法,生成对称式密钥: 
       CREATE SYMMETRIC KEY User1SymmetricKeyCert
             AUTHORIZATION User1
             WITH ALGORITHM = TRIPLE_DES
              ENCRYPTION BY CERTIFICATE User1Certificate
        2、打开密钥:对称式密钥使用前必须显式打开
        OPEN SYMMETRIC KEY User1SymmetricKeyCert DECRYPTION BY CERTIFICATE User1Certificate
        3、加密数据:采用密钥对数据库进行加密处理
         INSERT INTO Entp VALUES (4, '12345678-9', '企业名称', EncryptByKey(Key_GUID( 'User1SymmetricKeyCert'), 'Amex'), EncryptByKey(Key_GUID( 'User1SymmetricKeyCert'), '1234-5678-9009-8765'), EncryptByKey(Key_GUID( 'User1SymmetricKeyCert'), 'Window shopper. Spends at most.'))
        4、关闭密钥:
        CLOSE SYMMETRIC KEY User1SymmetricKeyCert
        5、解密:
         OPEN SYMMETRIC KEY User1SymmetricKeyCert
DECRYPTION BY CERTIFICATE User1Certificate
SELECT CustID, Name, City,
CONVERT(VARCHAR, DecryptByKey(CreditCardType)) AS CardType
FROM Entp
CLOSE SYMMETRICKEYUser1SymmetricKeyCert
 
        以上是以密钥对数据库数据进行加密及解决的方法。
        SQL 2005还有两种加密方法,其中一种是以数据库证书及对应证书的密钥对数据库进行加密。另一种是SQL SERVER 2005的简单加密方法。在加密过程中除了可按照以上步骤对数据库加密外,还有需要注意的是在加密过程中应注意加密字段的数据类型应为:varbinary(MAX)
本人因为是在原有数据库中进行数据处理,即把SQL2000的数据库升级为SQL2005的数据库,因此需把原有的数据导入2005数据库中,在导数据的过程中应注意源数据库中表的字段需进行加密后insert into至目的数据库,
注意:
1、在源数据库中的加密字段的字段类型应为:nvarchar()类型,否则加密处理后的数据解密后会成为乱码。
        2、如不是从源数据库中导入数据的情况,而是手工insert 数据至目标数据库则需进行源数据的字段类型转换。如下:
Insert into entp values(4,'12345678-9', EncryptByKey(Key_GUID('加密密码', convert(nvarchar(100),'企业名称')))
        3、在加密后的数据中必须要验证一下数据是否加密成功,在加密过程中可能会加密失败,使加密过程的数成为NULL值,这种情况是由于在数据录入了非法字符或其他情况产生的。如何解决呢?呵,那就只能换一种加密方法。
         具体的数据库加密处理代码可在网上查到,在处理过程中应数据库加密后的数据是不断变化的,因此加密后的数据可能无法对数据进行查询了,麻烦呀,那就只能写存储过程或视图的方式对数据进行加密和解密,同时对存储过程和视图再加密,这样就可以解决加密问题。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值