旧服务器是 Windows 2000,最初的安装人员对几乎所有内容的回答是 C:\ --> 每个人 --> 完全控制。但是,有一个设置文档,似乎在一定程度上起作用。
- 创建了一个本地管理员 com 用户
- 创建引用该用户的 COM+ 应用程序和站点提供的一些 dll
- 安装了 .net 版本 1.0、1.1、2.0(我试过在每个版本下运行,错误没有变化)
服务器对象错误 'ASP 0178 : 80070005' Server.CreateObject 访问错误 /Include/fnLookups.asp,第 10 行 检查权限时对 Server.CreateObject 的调用失败。拒绝访问此对象。
第 10 行似乎是:
设置 objClient = Server.CreateObject("fooUser.CfooUser")
我转向系统日志,我有:
特定于应用程序的权限设置不会将具有 CLSID {280D5CF7-80A4-40AC-844C-FE3653F02FF1} 的 COM 服务器应用程序的本地激活权限授予用户 mydomain\myusername SID (mySID)。可以使用组件服务管理工具修改此安全权限。
这是某种进步,它可以很好地获取 COM 应用程序和我的 ID。我将自己添加到 dcomdnfg 中“我的电脑”对象的“访问权限”和“启动和激活权限”中 - 但我的吠叫似乎指向了错误的树。
我尽我所能地浏览了mskb198432,虽然它似乎是针对早期版本的,但也没有任何乐趣。
欢迎任何想法。
编辑 - 尝试的建议列表
- 排除了 x64 的差异,在 x32 中运行同样的问题。
- 排除文件权限
- “给每个人本地启动和激活权限,以确保这是一个 COM 权限问题” - 完成,不高兴
- IIS5 隔离模式已启用
编辑 - 我可以在旧的 Windows 2k 服务器上查看任何可以提供一些见解的东西吗?
您是否尝试将相关用户添加到本地 DCOM 用户组?
http://technet.microsoft.com/en-us/library/cc738214(WS.10).aspx
这个错误是线索:
特定于应用程序的权限设置不会将具有 CLSID {280D5CF7-80A4-40AC-844C-FE3653F02FF1} 的 COM 服务器应用程序的本地激活权限授予用户 mydomain\myusername SID (mySID)。
COM 对象不应该像你一样运行,它应该作为 IUSR_MachineName 或网络服务用户运行,即运行 IIS 的用户。您不希望访问该站点的每个用户都像他们一样运行 DLL——这是个坏主意。
确保您的虚拟目录指向的物理目录的权限让运行 IIS 的用户(IUSR_machinename)具有正确的权限,并且在 COM 中注册的 DLL 对 IIS 用户具有正确的权限。
权限很难在 IIS 中调试,因为安全事件并不总是记录到安全事件日志中。身份验证和访问控制诊断 1.0 工具是调查权限问题的绝佳工具。
http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1285
为了完整起见,将站点作为 ASP.Net 1.0 和 ASP.Net 2.0 运行是有区别的。尽管该框架向后兼容,但我建议尝试将该站点作为 Framework 1.1 站点运行。这可能需要加载 Framework 1.1。
然而,代码示例表明这是经典的 ASP。因此问题与 COM 对象的安全性有关。确保 DLL 已注册,并且您授予权限的对象也有可能依赖于您未授予访问权限的另一个 DLL。
此外,在更改安全性或任何相关更改时,重新启动 IIS 以及组件服务器中的组件本身。由于内存缓存和其他扩展原因,它通常需要启动。
根据 Microsoft Web Technology 博客,这是由 Windows 2003 的 SP1 或 SP2 中引入的增强 DCOM 安全性引起的错误。
这个博客非常详细地介绍了这个问题以及如何解决它。
http://blogs.msdn.com/puneetgupta/archive/2008/01/19/server-createobject-failed-while-checking-permissions.aspx
就像一些用户抱怨的那样,你不清楚这是经典的 asp 还是 asp.net。也就是说,与您的主题行和错误消息一起,这是我的 2 美分
这是一个 .NET 应用程序吗
看起来您的应用程序正在访问 COM 对象,因此请确保 IIS 工作进程有权访问该组件。您可以尝试运行 FILEMON 和 REGMON 来准确找出哪个组件是罪魁祸首。如果组件位于 Program Files/Common 文件夹中,请确保在该文件夹上设置了正确的权限。
在 ASP.NET 甚至 Classis ASP 中访问 COM 组件通常是一个 B.... 来进行故障排除。
这是一个经典的 ASP 应用程序,而不是 ASP.NET 应用程序。确保托管该应用程序的 IIS 应用程序池在您创建的用户的上下文中运行。此外,请确保该应用不在托管 ASP.NET 应用的任何其他应用池中。
我的电脑上有 2 种不同的安全设置 - 限制和默认值。您需要仔细检查您是否编辑了默认值,并且限制至少高于您的默认值(尽管 IIRC,每个人都可以进行本地激活)。
您还应该深入了解组件本身并确保它使用默认安全性。如果它是自定义的,那么您也需要对其进行编辑(牢记限制)。
对于故障排除,我很想只给每个人本地启动和激活权限,以确保这是一个 COM 权限问题。IIRC,组件启动中的错误可能会产生误导性的错误消息,让您暂时摸不着头脑。
编辑:您还应该确保事件日志中引用的 GUID 实际上是您认为的组件。使用 Regedit 查找 GUID,并检查 AppName。它可能不是已安装的组件,而是依赖项。
正如其他人所说,这是一个经典的 ASP 和 COM 问题 - 似乎与 .NET 无关。
我所能补充的就是不要忘记确保用户可以访问文件系统上的 COM 对象 DLL。
尝试让“网络服务”访问“临时”目录 (C:\WINDOWS\Temp)
我希望这有帮助 ;-)
您是否将应用程序池作为您的帐户 (mydomain\myusername) 运行?如果是这样,您需要将该帐户添加到 IIS_WPG。
您可能还想将 IIS_WPG 添加到“分布式 COM 用户”组或在组件服务中找到实际项目并直接授予对 IIS_WPG 的访问权限