使用ADO.NET时,请注意以下语句:
OPEN SYMMETRIC KEY sym_RegAna_Default DECRYPTION BY ASYMMETRIC KEY asym_RegAna_Default WITH PASSWORD = 'a very secure password :-)'
实际上是以:
的形式发送到SQL Serverexec sp_executesql N' OPEN SYMMETRIC KEY sym_RegAna_Default DECRYPTION BY ASYMMETRIC KEY asym_RegAna_Default WITH PASSWORD = ''a very secure password :-)'' ;
因为它是作为动态SQL字符串发送的,所以您可以使用SQL事件探查器查看密码。
启动SQL跟踪将产生以下输出:
exec sp_executesql N'Open SYMMETRIC KEY sym_RegAna_Default DECRYPTION BY ASYMMETRIC KEY asym_RegAna_Default WITH PASSWORD =''非常安全 密码:-)'';
我知道修复此问题的唯一方法是不使用sp_execute将其作为动态SQL执行,而是直接使用查询。这样,SQL Server将识别出它是一个敏感查询,并将用以下内容替换跟踪输出:
--*OPEN SYMMETRIC KEY----------------------------
是否可以强制ADO.NET NOT 使用sp_execute?
(我搜索了这个,我可以找到类似的问题,但它们总是变成执行计划缓存问题/参数嗅探)
作为背景参考,This问题是我提问的触发器。
答案 0 :(得分:0)
我一直在寻找答案,在Google上找不到任何东西,直到我终于遇到这个: http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.common.serverconnection.aspx
您可以使用此ServerConnection对象在不使用sp_executesql的情况下执行查询。 这可以使用ADO.Net SqlConnection完成,因此您可以在密钥打开后继续使用ADO.Net。
SqlConnection sqlConnection = new SqlConnection();
ServerConnection serverConnection = new ServerConnection(sqlConnection);
serverConnection.ExecuteNonQuery("OPEN SYMMETRIC KEY sym_RegAna_Default DECRYPTION BY ASYMMETRIC KEY asym_RegAna_Default WITH PASSWORD = 'a very secure password :-)'");
-- Do ADO.Net work with sqlConnection