DCOM服务端及客户端指定用户访问的安全设置
2014-01-29 06:04
357 查看
前言:对于分布式组件,在创建组件过程中常因权限问题导致出现“拒绝访问”,无法创建组件对象或使用接口。本人水平有限,只能谈些个人经验和体会,希望能抛砖引玉!
有两种方法能使得DCOM组件顺利创建和使用:
一、使用DCOMCNFG工具在服务器及客户机上对组件进行设置,这在《COM技术内幕》中有详细说明,使用这种方法要在两种情形下使用:
1、服务器与客户机必须在同一个域中且客户机要登录域(这种环境我没试过,因为我的局域网中只用工作组没建域)
2、服务器与客户机处于工作组环境下,则客户机的当前登录用户名及密码在服务器上必须有同样的用户存在!
我不倾向于用以上的方法,但有一点要提一下,就是服务端组件注册后使用DCOMCNFG来设置DCOM组件属性时,有时会只提示“操作成功完成”,而不能正常设置,这是因为注册表登记信息不全造成的,需要手工在HKEY_CLASSES_ROOTAppID下手动添加组件的CLSID
二、在客户端程序中设定访问使用组件的用户名及密码
三、结束语
本人水平有限,不能深入讲解,希望对大家有帮助
有两种方法能使得DCOM组件顺利创建和使用:
一、使用DCOMCNFG工具在服务器及客户机上对组件进行设置,这在《COM技术内幕》中有详细说明,使用这种方法要在两种情形下使用:
1、服务器与客户机必须在同一个域中且客户机要登录域(这种环境我没试过,因为我的局域网中只用工作组没建域)
2、服务器与客户机处于工作组环境下,则客户机的当前登录用户名及密码在服务器上必须有同样的用户存在!
我不倾向于用以上的方法,但有一点要提一下,就是服务端组件注册后使用DCOMCNFG来设置DCOM组件属性时,有时会只提示“操作成功完成”,而不能正常设置,这是因为注册表登记信息不全造成的,需要手工在HKEY_CLASSES_ROOTAppID下手动添加组件的CLSID
二、在客户端程序中设定访问使用组件的用户名及密码
CoInitialize(NULL);//初始化COM环境 HRESULT hr; IRW* pIRW = NULL ;//定义接口指针 COSERVERINFO ServerInfo;//创建服务器信息结构 COAUTHINFO athn; ZeroMemory(&athn, sizeof(COAUTHINFO)); COAUTHIDENTITY author_id; ZeroMemory(&author_id, sizeof(COAUTHIDENTITY)); char* pszName= new char[255]; char* pszDomain = new char[255]; char* pszPassword = new char[255]; pszName = "name";//指定用户名,此用户必须是服务器上有的用户 pszDomain= ""; pszPassword = "password";//密码 author_id.Flags = SEC_WINNT_AUTH_IDENTITY_ANSI ; author_id.User = reinterpret_cast(pszName); author_id.UserLength = strlen(pszName); author_id.Domain = reinterpret_cast(pszDomain); author_id.DomainLength = strlen(pszDomain); author_id.Password = reinterpret_cast(pszPassword); author_id.PasswordLength = strlen(pszPassword); athn.dwAuthnLevel = RPC_C_AUTHN_LEVEL_CONNECT;//网上很多例子用RPC_C_AUTHN_LEVEL_NONE其实不能用,否则不能指定用户名密码 athn.dwAuthnSvc = RPC_C_AUTHN_WINNT; athn.dwAuthzSvc = RPC_C_AUTHZ_NONE; athn.dwCapabilities = EOAC_NONE; athn.dwImpersonationLevel = RPC_C_IMP_LEVEL_IMPERSONATE; athn.pAuthIdentityData = &author_id; athn.pwszServerPrincName = NULL; MULTI_QI MultiQI; ZeroMemory(&ServerInfo, sizeof(COSERVERINFO)); ServerInfo.pwszName = L"192.168.0.1";//服务器地址 ServerInfo.pAuthInfo = &athn; ServerInfo.dwReserved1 = 0; ServerInfo.dwReserved2 = 0; MultiQI.hr = NOERROR; MultiQI.pItf = NULL; MultiQI.pIID = &IID_IRW; hr = CoCreateInstanceEx(CLSID_inirw, NULL, CLSCTX_REMOTE_SERVER, &ServerInfo, 1, &MultiQI) ; if (SUCCEEDED(hr)) { pIRW=(IRW*)MultiQI.pItf; hr=CoSetProxyBlanket(pIRW,athn.dwAuthnSvc, athn.dwAuthzSvc, NULL, athn.dwAuthnLevel, athn.dwImpersonationLevel, &author_id, EOAC_NONE);//用于设置接口的访问安全设置,如果不用此函数设置接口则使用接口时又会出现“拒绝访问” hr=pIRW->ReadIni(); ((IRW*)MultiQI.pItf)->Release(); } CoUninitialize();
三、结束语
本人水平有限,不能深入讲解,希望对大家有帮助
相关文章推荐
- DCOM服务端及客户端指定用户访问的安全设置
- DCOM服务端及客户端指定用户访问的安全设置
- MySQL创建用户,并设置指定访问数据库
- GIT 服务端把用户设置 /sbin/nologin 后客户端同步时出错
- Vsftpd完全攻略(三)基于系统用户支持ftp上传 访问和vsftp安全设置
- mysql 设置用户指定访问某个数据库。
- 通过客户端的cookie标志来设置用户是否登录了安全吗?常用的加密算法加密后安全吗?
- 如何设置ssh安全只允许用户从指定的IP登陆
- ftp设置用户只能够访问指定的目录
- 客户端、服务端,跨域访问设置
- Vsftpd完全攻略(三)基于系统用户支持ftp上传 访问和vsftp安全设置
- DFS客户端访问设置及安全策略
- Sql2008不同用户指定访问数据库的权限设置!
- nginx中设置限制指定用户或IP组访问权限
- MySQL 设置某个用户访问指定表命令
- Summary_MySQL设置用户访问指定数据库
- 利用samba设置匿名登录和用户个人登录访问指定资源。登录samba会出现灰色的guest
- 实现用root用户进行ftp/telnet的登陆访问及telnet服务器客户端的安装和设置
- ORACLE存储过程生成视图,设置指定用户访问指定视图
- linux安全设置mysql用户和超级用户的访问权限