我正在做一个面向公众的web项目,它将部分由OLAP服务器提供支持。我想从安全的角度比较两种方法:
-
我最初的想法是通过AJAX将用户意图的一些表示传递给web服务器,让web服务器做大量的输入验证并构造一个适当的MDX表达式传递给OLAP服务器,最后代理OLAP结果返回给浏览器。(从切线上看,这似乎是jpivot采用的方法;例如,在jpivot示例中,我刚刚点击向下钻取到一个表,发送到服务器的不是MDX,而是x-www-form-urlencoded字符串"wcf65768426.x=3&wcf65768426.y=3")
-
相比之下,xmla4js项目似乎以打开防火墙端口并通过XML/a向世界(或至少向您的特定客户)公开您的OLAP服务器为前提,用客户端javascript编写MDX查询,并让浏览器直接命中OLAP服务器。
我的直觉反应是对第二种方法相当怀疑。它似乎假定,如果有人对我的OLAP服务器执行任意MDX语句,不会发生任何不好的事情。我还不是一个特别高级的MDX的学生,但对我来说,这不是一个没有风险的命题。至少有人可以启动一些非常昂贵的查询,或者下载比您希望轻松提供给人们的更大的数据集块。这不是人们通常在SQL服务器上做的事情,我最初倾向于认为同样的理由建议您也不应该在OLAP服务器上这样做。
但是我也想假设xmlla4js背后的人在头脑中有一些没有疯狂的安全风险的用例。我想我可能考虑得太谨慎了。
有没有更有经验的OLAP人员想评论一下让人们直接访问您的OLAP服务器的智慧,例如通过XML/A?
有趣的问题。当然,如果您认为您的用户可能会入侵您的网页,那么提供对您的数据集市(这里是OLAP服务器)的直接访问是一个风险来源。这是xmla4js选项,它非常类似于让用户直接访问rdbm。
-
是的,当然创建一个非常非常耗时的MDX查询相对容易(例如使用计算成员)。
-
细粒度安全性在OLAP中是可能的,因此用户可能无法访问详细信息。事实与维度安全。
选项1的一个问题是成本(时间和金钱)。你将需要更多的时间来实现,你将无法使用现有的小部件和库(例如GVI库)。对你来说,安全性和黑客攻击比交付时间更重要吗?
一个可能的解决方案是使用xml的http代理,只允许执行"已知"请求。但是,什么是已知查询呢?
一些OLAP服务器允许更好地控制MDX请求分配的线程数以及可以并行执行的请求数量。但这只解决了部分问题。
这真是一个有趣的问题……不是微不足道的。你不是我们的客户,真倒霉;-)经过反思,这可能是一个应该针对个别OLAP服务器产品而不是针对一般OLAP而提出的问题。例如,如果OLAP服务器的编码考虑了安全性,支持只读、非管理员帐户,并且可以超时花费太长时间的查询,那么您将比在相反的情况下更好地公开该服务器。
不幸的是,OLAP供应商似乎并没有对此给出明确的指导。例如,找到设置Sql Server分析服务匿名访问所需的信息相对容易,但很难找到微软关于开放匿名SSAS XML/A访问公共互联网有多危险的明确声明。