小弟不才,最近完成了一个SQL 2005数据库加密解密项目。把完成项目的问题记录下来,以便日后参考。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

        先来简单说明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值,这种情况是由于在数据录入了非法字符或其他情况产生的。如何解决呢?呵,那就只能换一种加密方法。

         具体的数据库加密处理代码可在网上查到,在处理过程中应数据库加密后的数据是不断变化的,因此加密后的数据可能无法对数据进行查询了,麻烦呀,那就只能写存储过程或视图的方式对数据进行加密和解密,同时对存储过程和视图再加密,这样就可以解决加密问题。

          

 

 

“很久没写帖子了,写的简单,只供各位参考”