我可以想出三个选项,你可以采取。首先是让系统管理员从活动目录提供服务帐户,授予与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
如果在连接字符串中使用集成安全性,应用程序是否会工作? –
@Remus Rusanu,不,我需要使用用户名和密码连接到每个数据库。 – w0051977