【问题标题】:prevent ado.net from using sp_execute for security reason出于安全原因,阻止 ado.net 使用 sp_execute
【发布时间】:2014-01-20 01:52:48
【问题描述】:

使用 ADO.NET 时如下声明:

OPEN SYMMETRIC KEY sym_RegAna_Default DECRYPTION BY ASYMMETRIC KEY asym_RegAna_Default WITH PASSWORD = 'a very secure password :-)'

实际上是发送到 SQL Server 为:

exec sp_executesql N' OPEN SYMMETRIC KEY sym_RegAna_Default DECRYPTION BY ASYMMETRIC KEY asym_RegAna_Default WITH PASSWORD = ''a very secure password :-)'' ;

因为它是作为动态 SQL 字符串发送的,所以您可以使用 SQL Profiler 查看密码。

启动 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.NETNOT 使用 sp_execute?

(我用谷歌搜索过这个,我可以找到类似的问题,但结果总是执行计划缓存问题/参数嗅探)

作为背景参考,This 问题是我提出问题的触发因素。

【问题讨论】:

    标签: sql-server ado.net


    【解决方案1】:

    我自己也在寻找这个问题的答案,但在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-30
      • 2016-02-07
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多