Windows Server 2012 上的组件服务应用程序未 运行 正确
Component Services application not running properly on Windows Server 2012
我是新手...我已经在 Windows Server 2012 上设置了我的 COM+ 应用程序(经典 ASP),但只能将其安装到 运行 通过在应用程序属性中取消选中 "Enforce access checks for this application"。现在 运行 没问题,但是任何时候应用程序试图以任何方式访问数据库,我什么都得不到。我已经检查了对必要文件夹的访问权限(据我所知)并且用户(本地用户,在身份选项卡中)具有 read/write 访问权限。有任何想法吗?是否需要更多信息?
您可能已经知道,Windows 服务器版本是一个不断变化的权限问题雷区(又名用户身份问题)。在 2008 年有效的方法在 2012 年可能不再有效。
经典 ASP 解决方案中的组件几乎都有可能 运行 在 Windows 的上下文中成为不同的身份。
意外身份的典型示例是系统、网络服务和 IUSR。
这些选项咬合在哪里,例如:
- 在 IIS 中,您的网站有一个分配的应用程序池,它 运行 位于其中。应用程序池具有用户身份分配;
- 在 IIS 中,您的虚拟文件夹映射到 Windows 下的物理文件夹,那里有访问安全性;
- 对于 COM,您可以进一步设置身份选项 - 这是 'run-as' 身份,它是为您执行 COM 组件的有效用户。
- 使用诸如 MS SQL Server 之类的数据库,您可以获得用户连接安全的概念,可以将其设置为使用 Windows 用户身份验证(信任 windows 用户)或userid/pwd 必填。因此,如果您在代码中使用 ADODB 等,则必须提供一个连接字符串,该字符串必须与数据库期望并允许的连接设置相匹配。
根据您的描述,我假设您已启动 IIS 站点并 运行ning,并且您的问题仅限于从 COM 组件访问数据库。您需要确定 COM 组件如何连接到数据库并检查数据库是否会接受正在使用的凭据。如果您对数据库使用 Windows 身份验证,那么您需要确认正在使用的 运行-as 身份。在我的设置中,我们创建了一个专门的 Windows 用户,我们专门为 COM 预留该用户,以便我们可以绝对确定身份,并且在我们从 COM 组件进行的最详细的日志记录中,我们捕获了 运行-作为身份只是为了确认它全部正确连接。
我们也对 IIS 应用程序池用户的专用 Windows 用户执行相同操作。通常,您最好通过自己分配而不是采用默认值来确定正在使用哪个身份。此外,网络服务等默认设置似乎在 Windows 总体上具有越来越少的权限。
警告 - 另一方面,不要给你的专用用户更多的访问权限,例如当你感到沮丧或感觉时让他们成为管理员组的成员通过权限问题的方式。当然,在非常临时的基础上分配这些以确认访问权限是问题所在,但请务必尽快删除此类分配。
编辑:当您发表评论时,我已经写了一半。您说缺少组件 - 我没有考虑到这种可能性,因为您似乎在说配置有效但 COM 没有。很好地解决了您的问题。我将保留这个答案,因为我写的一些内容可能对未来走相同或相似道路的人有用。
我是新手...我已经在 Windows Server 2012 上设置了我的 COM+ 应用程序(经典 ASP),但只能将其安装到 运行 通过在应用程序属性中取消选中 "Enforce access checks for this application"。现在 运行 没问题,但是任何时候应用程序试图以任何方式访问数据库,我什么都得不到。我已经检查了对必要文件夹的访问权限(据我所知)并且用户(本地用户,在身份选项卡中)具有 read/write 访问权限。有任何想法吗?是否需要更多信息?
您可能已经知道,Windows 服务器版本是一个不断变化的权限问题雷区(又名用户身份问题)。在 2008 年有效的方法在 2012 年可能不再有效。
经典 ASP 解决方案中的组件几乎都有可能 运行 在 Windows 的上下文中成为不同的身份。
意外身份的典型示例是系统、网络服务和 IUSR。
这些选项咬合在哪里,例如:
- 在 IIS 中,您的网站有一个分配的应用程序池,它 运行 位于其中。应用程序池具有用户身份分配;
- 在 IIS 中,您的虚拟文件夹映射到 Windows 下的物理文件夹,那里有访问安全性;
- 对于 COM,您可以进一步设置身份选项 - 这是 'run-as' 身份,它是为您执行 COM 组件的有效用户。
- 使用诸如 MS SQL Server 之类的数据库,您可以获得用户连接安全的概念,可以将其设置为使用 Windows 用户身份验证(信任 windows 用户)或userid/pwd 必填。因此,如果您在代码中使用 ADODB 等,则必须提供一个连接字符串,该字符串必须与数据库期望并允许的连接设置相匹配。
根据您的描述,我假设您已启动 IIS 站点并 运行ning,并且您的问题仅限于从 COM 组件访问数据库。您需要确定 COM 组件如何连接到数据库并检查数据库是否会接受正在使用的凭据。如果您对数据库使用 Windows 身份验证,那么您需要确认正在使用的 运行-as 身份。在我的设置中,我们创建了一个专门的 Windows 用户,我们专门为 COM 预留该用户,以便我们可以绝对确定身份,并且在我们从 COM 组件进行的最详细的日志记录中,我们捕获了 运行-作为身份只是为了确认它全部正确连接。
我们也对 IIS 应用程序池用户的专用 Windows 用户执行相同操作。通常,您最好通过自己分配而不是采用默认值来确定正在使用哪个身份。此外,网络服务等默认设置似乎在 Windows 总体上具有越来越少的权限。
警告 - 另一方面,不要给你的专用用户更多的访问权限,例如当你感到沮丧或感觉时让他们成为管理员组的成员通过权限问题的方式。当然,在非常临时的基础上分配这些以确认访问权限是问题所在,但请务必尽快删除此类分配。
编辑:当您发表评论时,我已经写了一半。您说缺少组件 - 我没有考虑到这种可能性,因为您似乎在说配置有效但 COM 没有。很好地解决了您的问题。我将保留这个答案,因为我写的一些内容可能对未来走相同或相似道路的人有用。