1、那再定义一个接口,先调用那个,验证后从那个接口的方法中返回这个接口,好像有例子就是这样的。
2、可能要根据需要,如果只是通过他执行事先定义Sql就不需要吧。
这方面不熟悉,共同学习。
2、可能要根据需要,如果只是通过他执行事先定义Sql就不需要吧。
这方面不熟悉,共同学习。
解决方案 »
- 聊聊消息里的左键
- 我的gif 图片怎不动?
- 请高手,两个简单的问题?在线等待???急急!!!
- acess表中数据互相转换,并设计一个新表将其他表中特定列的数据存储下来,并可以进行算术运算
- 有谁有DevExpress Bars 3.1 控件组
- 谁有1STCLASS FOR DELPHI6的注册号及密码
- 如何动态改变EXE文件的图标,用什么工具呀?能不能详细说明呀?
- 计算两个日期相差多少天怎么做?
- Delphi StringGrid组件
- 有谁用过DevExpress控件,帮帮我?这也许和DataSet有关,大家请进……
- 用ShellExecute调用外部的程序,是不是一定就要用绝对路径
- 谁会C#编程
你是说每次调用都要验证吗?我想是否可以在连接的时候进行验证,只要一次验证。
象DATAPROVIDER的EXPORTED先设成FALSE,通过验证后,再把它设成TRUE。
请大家继续发言
2.你可能利用用户登陆信息来判断是否有poallowcommand的权力
我举个例子吧,一个学校管理系统,教师可以通过系统修改学生信息,在这个修改过程系统记录日志。
但我不希望教师就可以操作数据库,如来一条DELETE FROM tblStudent
Visibroker目录下也有这样的例子:
比如接口这样定义。
// Bank.idlmodule Bank {
interface Account {
float balance();
};
interface AccountManager {
Account open(in string name);
};
};
2、程序允许老师直接写Sql吗。他只有程序,又不需要给数据库的用户和口令。他怎么能作到随便操作数据库呢。
一个他客户端Account open以后就在服务器端创建了一个ACOUNT的对象,
如何防止其他客户端用ORB.BIND()返回该对象的存根,调用该对象了?
2、你不应该考虑正常的情况,在别人攻击的时候,他可以写一个程序通过服务端的DATAPROVIDER执行SQL语句。你的DATAPROVIDER就验证了应用程序的用户,却给了数据库用户的权限(可以发任何SQL语句)。
我想如果别人知道你程序的处理方法,并且能够得到可以通过程序验证的用户,那是怎么都可以不太困难的访问你的服务器对象并且访问数据库服务器的。
比如你可以在Open的时候根据参数进行检验的,连接的用户是否合法,然后才引用已有的或初始化一个新的Account,初始化同样是可以有参数的。想要不通过AccountManager直接绑定Account接口,不了解你的程序的处理机制的情况下,恐怕是很困难的。感觉你说的其实是一个问题。
有些时候需要把接口暴露给别人,如第三方的接口(给其它人提供的接口,以便它人访问原有系统)
我想可以在Open里创建服务器端对象的时候,在调用的接口实现类的构造函数里,根据登录的用户设置一个事先定义的属性值,标志用户可以进行的各种操作,并在各个方法实现里进行判断就可以了吧。
一个想法,仅供参考。
客户端对服务器端对象的访问靠ORB.BIND(RepositoryID: string; const ObjectName...).
我可以提供一个先创建的服务端对象,进行验证,如方法为:
UserValid(username,password)
{
如果验证通过
创建其它服务端对象
}
现在:
第一个客户端ORB.BIND进行验证的对象
调用USERVALID通过
(服务端创建其它对象)
第一个客户端ORB.BIND其他对象,调用其他对象的方法
但是这时候:
我写一个程序是否也可以ORB.BIND其他对象?
要想调用服务端的对象,这个对象必须先创建了的,才能返回他的接口。
服务端的对象是用RepositoryID,ObjectName来标志的。
RepositoryID标志对象接口,ObjectName标志对象的实例名。
TCorbaObjectFactory.Create('AccountFactory', 'Account', 'IDL:AccountServer/AccountFactory:1.0', IAccount,TAccount, iMultiInstance, tmSingleThread);
中的第一个参数('AccountFactory')好象改成什么都没关系,客户端连接的时候也用不上。
问题:
却可以创建RepositoryID,ObjectName都一样的对象?那么用ORB.bind的时候返回哪个对象的接口?
服务端的对象一经创建,是否任意客户端都可以对它进行绑定,返回接口,进而可以调用它?有没有说创建的对象是某个客户端专用的对象?
是这样的,验证结果可以用来作为服务器Account对象构造函数的参数,在服务器端,如果有多个不同帐号用户调用这个接口,会创建多个对象的。
只有AccountManager是直接Bind的,其他的都不可以。因为虽然对象已经存在了,我想对其他人也不太容易作到,因为除了写服务器端实现程序的人,可以让其他人很难得到直接Bind需要的正确参数。
Bind需要的参数并不复杂,在CMD下OSFIND一下就出来了。
我有了一点的发现:
当AccountManager调用方法创建一个服务端对象的时候,
它并不调用BOA.ObjIsReady(const Obj: IObject),所以这个对象对于其它的客户端是不可见的(用OSFIND也看不到)。妙在它返回了新建的接口给调用这个方法的客户端。
其实我Corba用的不多,看过一些书和文档,不是很熟悉,而且感觉Delphi作Corba不很方便,共同学习吧。