2012-09-13 5 views
0

Je développe une application intranet qui contient quelques chaînes de connexion dans une table de base de données avec des mots de passe (le développeur précédent l'a fait - je sais que c'est une mauvaise pratique). Le plan était de passer de SQL Server 2005 à SQL Server 2008, donc j'allais attendre cela et ensuite utiliser TDE (Transparent Data Encryption) car aucune modification n'est nécessaire pour coder même lorsque les données sont cryptées.Cryptage SQL Server 2005

J'ai maintenant découvert que nous ne procédons pas à la mise à niveau vers SQL Server 2008. Quelles autres options est-ce que j'ai pour minimiser les changements requis pour l'application? J'ai pensé à utiliser la fonction de cryptage dans le web.config mais je crois que beaucoup de changements seront nécessaires. Quelles autres options ai-je? Deux applications client s'y connectent, à savoir VB6 et VB.NT.

+0

l'application fonctionnerait-elle si la sécurité intégrée est utilisée à la place dans la chaîne de connexion? –

+0

@Remus Rusanu, Non, je dois me connecter à chaque base de données en utilisant le nom d'utilisateur et mot de passe. – w0051977

Répondre

0

Je peux penser à trois options que vous pouvez prendre. Tout d'abord, demandez à votre administrateur système de fournir un compte de service à partir du répertoire actif, accordez les mêmes autorisations que le compte sql, puis configurez la propriété Identité de l'application dans les paramètres avancés du pool d'applications dans IIS. Vous pourrez alors supprimer le nom d'utilisateur et le mot de passe de la chaîne de configuration et le remplacer par la propriété "trusted_connection = true". Deuxièmement, vous pouvez appliquer un chiffrement au niveau de la colonne pour chiffrer les chaînes de connexion stockées dans votre base de données. Cela peut être fait sans aucun changement de code pour votre application intranet. Vous devrez renommer la table, créer une vue avec l'ancien nom de table contenant la fonction decryptautokeybycert. Je posterai un exemple à la fin du post. Troisièmement, vous pouvez demander au DBA de configurer le serveur pour forcer le chiffrement de toutes les connexions à l'aide de 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