MDX CA 2100安全问题

时间:2015-01-23 05:27:41

标签: security mdx

我编写了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();

1 个答案:

答案 0 :(得分:0)

您可以在执行AS查询的SQL Server中创建存储过程。假设sp是预编译的,那就是安全的。您应该执行以下操作:

  • 将您的AS服务器作为链接服务器添加到SQL数据库服务器(通过SSMS中的服务器对象)
  • 创建存储过程。一般方案是(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,然后您的角色将起作用。