2012-09-13 170 views
0

我正在开发一个内部网应用程序,其中包含密码的数据库表中的几个连接字符串(以前的开发人员这样做 - 我知道这是不好的做法)。该计划是从SQL Server 2005升级到SQL Server 2008,所以我要等待这个,然后使用TDE(透明数据加密),因为即使数据被加密,也不需要对代码进行任何更改。SQL Server 2005加密

我现在已经发现我们没有升级到SQL Server 2008.还有哪些其他选项可以最大限度地减少应用程序所需的更改?我想在web.config中使用加密工具,但我相信需要进行很多更改。我还有什么其他选择?有两个客户端应用程序连接到它,即VB6和VB.NT.

+0

如果在连接字符串中使用集成安全性,应用程序是否会工作? –

+0

@Remus Rusanu,不,我需要使用用户名和密码连接到每个数据库。 – w0051977

回答

0

我可以想出三个选项,你可以采取。首先是让系统管理员从活动目录提供服务帐户,授予与SQL帐户相同的权限,然后在IIS中应用程序池的高级设置中配置应用程序标识属性。然后,您将能够从配置字符串中删除用户名和密码,并将其替换为属性“trusted_connection = true”。

其次,您可以应用列级加密来加密存储在数据库中的连接字符串。它可以在您的Intranet应用程序没有任何代码更改的情况下完成。您需要重命名该表,使用包含函数decryptautokeybycert的旧​​表名创建一个视图。我会在帖子末尾发表一个例子。

第三,您可以让DBA配置服务器以强制所有连接使用SSL \ TLS加密。

use master 
go 
create database EncryptedData 
go 
use EncryptedData 
create master key encryption by password='[email protected]!' 

create certificate KeyProtection with subject='Key Protection' 

create symmetric key ColumnKey 
    with algorithm=AES_256 
    encryption by certificate KeyProtection 

create table SecretMessages(Ciphertext varbinary(4000)) 
go 
create view dbo.MessageRecords 
as 
select 
    cast(DECRYPTBYKEYAUTOCERT(cert_id('KeyProtection'), null,Ciphertext) as varchar(max)) MessageRecord 
from dbo.SecretMessages 
go 

open symmetric key ColumnKey decryption by certificate KeyProtection 

insert into SecretMessages(Ciphertext) values (ENCRYPTBYKEY(key_guid('ColumnKey'),'Hello world 1')) 
insert into SecretMessages(Ciphertext) values (ENCRYPTBYKEY(key_guid('ColumnKey'),'Hello world 2')) 
insert into SecretMessages(Ciphertext) values (ENCRYPTBYKEY(key_guid('ColumnKey'),'Hello world 3')) 
insert into SecretMessages(Ciphertext) values (ENCRYPTBYKEY(key_guid('ColumnKey'),'Hello world 4')) 
insert into SecretMessages(Ciphertext) values (ENCRYPTBYKEY(key_guid('ColumnKey'),'Hello world 5')) 
close symmetric key ColumnKey 


select * from MessageRecords