我编写了MDX查询并将其分配给Adomd Connection对象。当我运行代码分析时,它给了我CA2100查看SQL查询的安全漏洞错误我们无法直接向连接对象提供查询。它说我们应该将它嵌入存储过程或使用参数化查询。但就我而言,此查询没有参数。请帮忙,如何删除此CA 2100安全错误。 PFB代码。提前谢谢。
conn.Open();
// Adomd Connection Object
var adomdCommand = new AdomdCommand()
{
Connection = conn,
CommandType = CommandType.Text,
CommandText = mdxQuery
};
//Execute command to return cell set..
CellSet csResult = adomdCommand.ExecuteCellSet();
conn.Close();
答案 0 :(得分:0)
您可以在执行AS查询的SQL Server中创建存储过程。假设sp是预编译的,那就是安全的。您应该执行以下操作:
创建存储过程。一般方案是(sp body):
declare @tsqlquery varchar(1000)
declare @mdxquery varchar(2000)
set @tsqlquery = 'SELECT
"[DimA].[A].[A name].[MEMBER_CAPTION]" as dimensionName,
convert(float, "[Measures].[X]") AS measureValue
FROM OPENQUERY(<**YOUR LINKED SERVER**>,'
set @mdxquery = '''**YOUR MDX QUERY**' + '''' + ')'
EXEC(@tsqlquery + @mdxquery)
您还可以创建基于参数修改MDX查询文本的参数化存储过程。只要您使用存储过程,您就是安全的。例如,我们的报表服务器查询仅使用SP,而不是直接AS查询。
PS。如果您的AS服务器已定义角色安全性,则应为数据库启用ImpersonateCurrentUser,然后您的角色将起作用。