服务帐户在IIS和任务计划程序下具有不同的数据库行为

时间:2015-05-24 13:28:32

标签: sql-server perl iis odbc windows-server-2012

我在IIS下运行与应用程序帐户相同的脚本,并作为计划任务运行,结果非常不同。

从IIS(作为网页),我可以阅读,例如字段属性,并运行非常简单的查询,如

SELECT * FROM SYSTEMINFO

因此,存在与数据库的连接。

任何更多"高级",会产生各种错误:

SELECT SYSTEMINFOID FROM SYSTEMINFO
or
SELECT COUNT(*) FROM SYSTEMINFO
or
INSERT INTO SYSTEMINFO ( SYSTEMINFOID ) VALUES (1)

通常提供" [Microsoft] [ODBC Microsoft Access Driver] Unknown(SQL-42000)"或" [Microsoft] [ODBC Microsoft Access驱动程序]溢出(SQL-42000)"这意味着"缺少访问权限或语法错误"根据一些ms错误消息概述(相当广泛的错误组......)

如果应用程序帐户是管理员的成员,一切正常(但不是一个好的解决方案),任何其他成员资格(用户,超级用户,备份操作员)都会给出相同的错误。 (需要重启服务器才能使这些更改生效,因此调试非常耗时。)

用户拥有本地政策以及#34;替换流程令牌"和"调整内存配额"授予(以及批量+服务运行)。

环境看起来一样(除了在IIS Web环境中添加了),我可以在任务管理器中看到脚本作为应用程序帐户运行。

连接字符串是

DBI:ODBC:driver=Microsoft Access Driver (*.mdb);DBQ=C:\folder\Demo.mdb;

运行CGI,Perl 5.18,DBI, 在IIS 8.5 Win2012 std上,应用程序池使用应用程序帐户,加载用户配置文件和Impersonate用户为True

在Win 2008 R2上设置相同的工作正常。

连接到例如本地ms sql express数据库发出SSL错误,即使SSL未被使用,也使用sql帐户进行身份验证。

花了四天时间查看所有奇怪的组合,我可能忽略了任何有关设置的建议?

(摘要:当作为应用程序帐户运行时,不是iis 8.5下的管理员,脚本正在运行,与数据库的连接有效,但除了普通的查询之外的任何事情都会导致奇怪的错误。)

1 个答案:

答案 0 :(得分:0)

终于找到了解决方案: 在IIS 8.5中,要使服务帐户起作用,必须将同一用户(作为池用户)设置为Application Pass-trough身份验证。

在网站下创建应用程序,

选择此应用程序的“基本设置”,将其分配给服务帐户运行的单独池。

另外," Pass-throught autentication"必须设置为同一用户,方法是选择" Connect as ..." -button。