Windows 的安全机制规定:接收远程的com+调用的时候,会验证这个调用的权限。如果权限不够就出现经典的“拒绝访问”错误。 解决这个问题已知访问方式有:
- 匿名访问;简单来说就是在应用服务器(简称AP)上启用Guest账户,并且设置Guest具有激活和访问COM+的权限。这条路是可行,不过安全性不能得到保证。
- 客户端电脑的登录用户和密码和AP上的一个用户一致,并且这个用户在AP上也具有相应的访问COM+的权限。这种方式要比第一种好一些,但是哪个单位的IT系统会是这种样子呢。肯定是每台机器都有自己的帐户密码。这个方式也不好。注:这种方式在不需要发布客户端软件到诺干多的机器上的时候也是可行的,比如访问COM+ 的是webServer.
- 在域管理的网络环境中,同样可以实现,但是有个问题,如果您的客户不愿意改造成域环境呢。所以这种方法也是有局限性的。
下面就来一一详细演示:
匿名访问的设置:
我们在应用服务器(AP)上做下面三个设置,之后就可以启用企业服务的远程匿名访问功能。
1、启用Guest用户,我们可以通过: 计算机管理 –> 系统工具 –> 本地用户和组 把 Guest 用户起用,如下图所示:把 Account is disabled 前面的勾去掉:
2、配置企业服务的安全设置,我们需要修改调用的身份验证级别为无,模拟级别:匿名。
3、修改Com+的全局设置,允许 Everyone 有远程启动,远程激活的权限如下图:我们在 组件服务中,选择组件服务-> 计算机 –> 我的电脑 上右键菜单中选择属性,就可以打开下面设置页面:
然后我们在客户端,就可以简单的安装企业服务代理,再用asp.net 来通过企业服务代理来请求应用服务器上的企业服务了。
基于域的远程企业服务调用
如果是域服务器的话,很多设置已经是默认设置了,我们只需要简单的做上面的第三步,即允许 Everyone 有远程启动,远程激活的权限。
无域的远程企业服务调用
这时候的关键就是要建立一个账户,在服务器和客户端机子上用户名和密码都完全一致。
然后在服务器和客户端给予这个账号必要的操作权限。这里简单的以 administrator 账户为例。
我们在 web.config 中再打开模拟设置,类似如下即可:
<identity impersnotallow="true" userName="administrator" password="12345" />
设置权限时,必须确保“启动和激活权限”对话框的“组或用户名”列表中包括 SYSTEM,且允许 SYSTEM 具有启动权限。SYSTEM 隐含包括在 Everyone 组中。但是,出于安全原因,建议您不要对 Everyone 组启用启动权限。
参考资料:
部署分布式 Com+
http://blog.joycode.com/ghj/archive/2006/10/24/28028.aspx
非匿名方式访问远程的com+
Access is denied when calling a remote serviced component (framework 1.1->1.0 issue)
http://www.keyongtech.com/501832-access-is-denied-when-calling
Error instantiating a COM+ proxy
http://www.issociate.de/board/post/293611/Error_instantiating_a_COM+_proxy.html
远程调用com+组件问题
设置计算机范围启动和激活权限
http://technet.microsoft.com/zh-cn/library/cc771689.aspx
以远程计算机上的用户身份访问Com+应用
http://school.cnd8.com/delphi/jiaocheng/7002.htm
配置 COM+ 服务器对象的启动权限
http://technet.microsoft.com/zh-cn/library/cc778126(WS.10).aspx
基于COM+技术的安全性研究
http://www.qqread.com/data-structure/f206773.html
设置管理安全性
http://technet.microsoft.com/zh-cn/library/cc755073.aspx
COM+在win2003+IIS+MSSQL环境下的部署步骤
第 10 章 - Web 服务安全性
http://www.microsoft.com/china/technet/security/guidance/secmod10.mspx#EHCAE
COM+ 管理:了解组件服务管理工具
http://docs.huihoo.com/com/com_pl/index.html
COM(Component Object Model)
http://docs.huihoo.com/com/index.html
Error instantiating a COM+ proxy
http://www.issociate.de/board/post/293611/Error_instantiating_a_COM+_proxy.html
asp, Error instantiating a COM+ proxy
http://asp.itgroups.info/28/5/thread-2086552.html
"General access denied error" under IIS accessing remote component
http://www.issociate.de/board/goto/703185/%22General_access_denied_error%22_under_IIS_accessing_remote_component.html
ASP.NET 中的进程和请求标识
http://support.microsoft.com/kb/317012/zh-cn
COM+ with ASP.NET
http://www.dotnet247.com/247reference/message.aspx?vote=86f67a1b-c961-4229-84c6-4c1b9ecc818a&id=128688&threadid=373882
COM+ with ASP.NET
http://www.dotnet247.com/247reference/msgs/25/128688.aspx
Windows 2003 ASP and COM+ Proxy
http://www.adminvc.com/bbsid-326865-9.html