在三层分布式中,DCOM连接方式的安全验证比较好,但配置很复杂,而且经常配不上。
而Socket连接方式无需配置,而且可以应用在外网上,但是没有任何验证,也就是说,如果有人知道服务器的接口,就可以访问数据库资源,请我有没有好的方法来解决这个问题。

解决方案 »

  1.   

    应该是在逻辑层做控制,关键是如何在业务逻辑层进行控制。我们一般的做法是在表现层调用中间层的Provider,这样如何做控制?
      

  2.   

    可以在验证后再连接DataSetProvider1的DateSet ,比如
    服务段定义一个login的方法.和属性LoginEd
    function login(UserName,PassWord:String):Boolean;
    property LoginEd客户端在连接时候 调用SocketConnection1.AppServer.Login(UserName,Passowrd);
    当UserName和Password正确的时候
    服务端的 LoginEd := True;
    DataSetProvider1.Exported := LoginEd这样在设计期间如果不知道username和password那么ClientDataSet1是不会列出ProviderName的.
      

  3.   

    这个应该算是个问题
    不过可以在scktsrvr来限制
    也可以把scktsrvr综合到应用程序服务器中
    把一些需要验证的东西直接放到应用程序服务器端
    比如说限制ip连接,验证用户登陆等等
      

  4.   

    对于安全性。。TSocketConnection和DCOM连接都有各自不足的地方。。不过对于TSocketConnection,楼主说的问题倒是已经提供方法解决的,就是使用
    Intercept,在\Delphi6\Demos\Midas\Intrcpt有例子。
      

  5.   

    来听课的
    不好意思打饶下:
    提问请到小类社区==>小类社区在那里???
    --------------------
    进入论坛后左上角有个显示导航栏,点击后左边展开,有个目录树
    下面分的很细,例如 开发语言->DELPHI->基础类,基础类就是小类社区
      

  6.   

    将客户端验证放在中间层,
    那就自己定义数据包,传递XML也行
      

  7.   

    halfdream(哈欠) 
    这位仁兄,我看了那个源代码,不过我该如何使用呢?(我指的不是如何使用DLL)
      

  8.   

    拦截器DLL客户端与服务器各带一份..客户端的TSocketConnection 有interceptName属性可以设置.
    服务端则scktsrvr.exe properties设置intercept GUID
      

  9.   

    谢谢halfdream(哈欠)。你高手啊,我弄出来了