我以IIS下的应用程序帐户和计划任务的身份运行相同的脚本,得到的结果截然不同。
从IIS (作为网页),我可以读取字段属性,并运行非常简单的查询,例如
SELECT * FROM SYSTEMINFO所以到数据库的连接就存在了。
任何更“高级”的东西,都会给get带来各种错误:
SELECT SYSTEMINFOID FROM SYSTEMINFO
or
SELECT COUNT(*) FROM SYSTEMINFO
or
INSERT INTO SYSTEMINFO ( SYSTEMINFOID ) VALUES (1)根据一些ms错误消息概述,通常给出"Microsoft未知(SQL-42000)“或"Microsoft Overflow (SQL-42000)”,这意味着“缺少访问或语法错误”(相当广泛的错误组...)
如果应用程序帐户是Administrators的成员,则一切正常(但不是一个好的解决方案),任何其他成员身份(用户、高级用户、备份操作员)都会产生相同的错误。(需要重新启动服务器才能使这些更改生效,因此调试非常耗时。)
用户拥有“替换进程令牌”和“调整内存配额”的本地策略(以及作为批处理+服务运行)。
环境看起来是一样的(除了添加了IIS web环境),并且我可以在任务管理器中看到脚本是以应用程序帐户运行的。
连接字符串为
DBI:ODBC:driver=Microsoft Access Driver (*.mdb);DBQ=C:\folder\Demo.mdb;在IIS8.5 Win2012标准版上运行CGI,perl5.18,DBI,应用程序池使用应用程序帐户,加载用户配置文件,并将用户模拟为真
在Win 2008 R2上设置同样的设置效果很好。
连接到例如本地ms sql express数据库会产生SSL错误,即使SSL未在使用中也是如此,并且使用sql帐户进行身份验证。
花了四天时间研究所有奇怪的组合,有什么我可能忽略的设置建议吗?
(摘要:当作为应用程序帐户运行时,不是iis 8.5下的管理员脚本正在运行,连接到数据库可以正常工作,但任何比简单查询更多的查询都会导致奇怪的错误。)
发布于 2015-06-02 22:19:42
最后找到了一个解决方案:在IIS 8.5中,为了使服务帐户正常工作,必须将相同的用户(作为池用户)设置为通过身份验证的应用程序。
在网站下创建应用程序,选择此应用程序的基本设置,将其分配到由服务帐户运行的单独池中是不够的。
此外,必须通过选择“连接身份...”-button将“传递身份验证”设置为同一用户。
https://stackoverflow.com/questions/30424039
复制相似问题