最近开始学习DELHPI 但看到分布式多层部分时,有点难理解。 
书上的例子都没有讲到安全问题, 大多的做法是在服务端创建一个远程数据模块,然后放一个QUERY 再放一个DATASETPROVIDER;在客户端放一个SOCKETCONNECTION或DCOMCONNECTION之类的连接件,和一个客户端数据集CLIENTDATASET。
接下来指定一下各组件的属性即可访问服务器了。在这种情况下,如果我写了好服务器,那么别人自己也写一个客户端软件,不就可取我服务器上的数据了吗???? 这当然是绝对不可以的。那么, 怎么控制别人不能访问我的服务器上的提供者呢??? 用DCOM的访问先排除,它需要配置,我不喜欢。

解决方案 »

  1.   

    有一种方法比较简单,就是在开发阶段将数据提供者组件的EXPORT属性设为false,在运行时用代码才改为True.
    另一种方法是只有在运行时才建立数据提供者组件,设置其属性。
    那种方法适合你?
    解决好了给我回复。:)
      

  2.   

    大虾们,帮看一下吧:
    http://expert.csdn.net/Expert/topic/1950/1950721.xml?temp=.9892084
      

  3.   

    这点你有点过忧了,第一你可以加入认证机制,第二,即使别人可以连上你的应用服务器,他也不知道你里面DATASETPROVIDER的NAME,无法作连接啊,第三,即使他连上了,他了不知里面有哪里表!这些不就想知道你的机器名,可以PING通但不能存取是一样的!
      

  4.   

    to foxe(火狐)
     如何加入认证机制??知道里面DATASETPROVIDER的NAME就可以存取呀!??
      

  5.   

    应该在数据库的访问上作文章
    yangmq(小思) 说的相当秒
      

  6.   

    SOCKETCONNECTION可以使用Interceptor
      

  7.   

    Raptor(猛禽)  的方法好!
      

  8.   

    数据库本身就有很多安全机制, 你可以设置用户权限, 访问时多用视图和存储过程.
    grant all on tablename to myname
    revoke update, delete on tablename to Tom
    ...
      

  9.   

    你可以自己做一个验证,通过后再把datasetprivder与dataset相连起来,不然断开,
    我已经试验成功了,
      

  10.   

    思路,
       做个远程的login方法
        procedure login
        begin
         if 判断用户是否合法,then 
        begin
            数据连接
        end
        else
        begin
            不做连接
        end;
        end;
    这样,即使用户知道表,知道datasetprivder,也没有用的,因为验证没有通过啊,
      

  11.   

    呵呵,谢谢楼上的各位,学习ing …………
    我在回去试试
      

  12.   

    to lwk_hlj(披着狼皮的人)     请老兄给释疑:    (本人刚学多层)如果合法用户通过了验证,然后数据连接,如果此时有非法用户连接呢?