在IIS站点中Adomd.net集成认证账号问题

时间:2021-07-11 02:32:02

最近在做一个Asp.net项目的时候 ,在C#代码里面用到了Adomd.net去连接SSAS服务器做MDX查询,开发完成后将Asp.net代码部署到IIS后发现Adomd.net老是连接不到SSAS服务器抛出异常。由于我们的Web站点服务器和SSAS服务器都是在同一个域环境下,所以按道理来说Adomd.net是可以用windows集成认证方式直接连接到SSAS服务器的,但是后来跟踪代码发现Adomd.net居然是用Anonymous的匿名账号去连接到SSAS服务器,很显然匿名账号默认是不允许访问SSAS服务器的所以Adomd.net的连接请求被SSAS服务器拒绝了。

但是经过检查IIS中Web站点所用的应用程序池的执行账号已经设置为域环境中的Administrator账号了,按道理说这时候Asp.net代码中如果用windows集成认证去连接SSAS服务器应该就是用的应用程序池的执行账号Administrator才对。但是通过异常跟踪发现Adomd.net是用的Anonymous这个匿名账号去连接SSAS的。

在IIS站点中Adomd.net集成认证账号问题

最后发现原来在IIS中除了应用程序池可以配置执行账号外,还有一个地方可以配置执行账号,就是站点的Physical Path Credentials(物理路径执行账号)设置。如果你在Asp.net代码中通过IO流去读取或写入了服务器上的文件,那么就是用Physical Path Credentials设置的账号去访问服务器上的文件,默认情况下Physical Path Credentials没有设置值,就是用的Anonymous匿名账号!下图中将IIS站点的Physical Path Credentials也设置成了域管理员账号Administrator。

在IIS站点中Adomd.net集成认证账号问题

在IIS站点中Adomd.net集成认证账号问题

将Physical Path Credentials也改为Administrator后,Adomd.net就是用的Administrator这个账号去连接SSAS服务器了,成功连接到了SSAS服务器上。这不得不说Adomd.net的windows集成认证方式有点奇怪,因为按照常理Asp.net站点一般都是用应用程序池的执行账号去做数据库连接的windows集成认证的,但是Adomd.net居然是用Physical Path Credentials(物理路径执行账号)的设置账号去做windows集成认证的,如果不知道这一点Asp.net站点会一直使用Anonymous匿名账号去连接SSAS服务器。。。