Security MDX CA 2100安全问题
我已经编写了MDX查询并将其分配给Adomd连接对象。当我运行代码分析时,它会给我CA2100检查SQL查询的安全漏洞错误,我们不能直接向连接对象提供查询。它说要么我们应该将其嵌入存储过程中,要么使用参数化查询。但是在我的例子中,这个查询没有参数。因此,请帮忙,我如何才能删除这个CA 2100安全错误。PFB代码。提前谢谢Security MDX CA 2100安全问题,security,mdx,Security,Mdx,我已经编写了MDX查询并将其分配给Adomd连接对象。当我运行代码分析时,它会给我CA2100检查SQL查询的安全漏洞错误,我们不能直接向连接对象提供查询。它说要么我们应该将其嵌入存储过程中,要么使用参数化查询。但是在我的例子中,这个查询没有参数。因此,请帮忙,我如何才能删除这个CA 2100安全错误。PFB代码。提前谢谢 conn.Open(); // Adomd Connection Object var adomdCommand =
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();
您可以在SQL Server中创建执行AS查询的存储过程。假设sp是预编译的,这是安全的。您应该执行以下操作: 通过SSMS中的服务器对象将AS服务器作为链接服务器添加到SQL数据库服务器 创建存储过程。总体方案如下:
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服务器定义了角色安全性,您应该为数据库启用ImpersonateCurrentUser,那么您的角色将正常工作