很多书都说三层结构提供了更好的数据安全性,但是开发三层结构,在服务器端,必须提供所有数据,然后客户端根据权限等信息进行对数据的过滤,这时客户端所能看到的试这个用户所能允许看到的数据,但是有一个问题让我觉得很奇怪,加入这客户端机器上有一个人用delphi自己做一个客户端,那么数据库的数据就完全暴露在它面前,这很明显是不可许的,那么用什么方法杜绝这种可能发生呢?我是初学者,我前面的观点可能有错误,谁能给于更正?

解决方案 »

  1.   

    是的,客户端的确是通过应用服务器来使用,但是,服务器通过什么允许客户机访问呢?大家可能说通过DCOMCNFG来设定运行COM服务的用户名,但是假如有这样一个人,他是工作在DCOMCNFG里面的一个用户,那么对于服务器端来说,这个用户是合法的。假如这个人A用DELPHI自己开发一个客户端,就像我们开发客户端一样的方法,这个时候服务器端识别的用户名仍然是合法的,在A开发的客户端面前,数据库的所有数据都是暴露的,那么随便一个阿三都可以自己开发一个客户端修改一些他本来无权看到数据,那是不是很可怕啊?是不是需要另外一套机制来限定服务器端只允许我们自己开发的客户端的访问呢?那么应该怎样建立这个机制呢?大家能不能多发表一些看法?
      

  2.   

    应用端要必须通过应用服务器才可以使用
    假如这个人A用DELPHI自己开发一个客户端,必须调用中间层才可以浏览数据的啊
    不可能直接看到
      

  3.   

    你会给所有用户ADMINISTRATIR权限吗?A用户没有管理员权限,他写的程序在客户端运行只有USER权限,不会看到全部数据的呀。
      

  4.   

    1、配置DCOM的访问权限
    开始-运行-dcomcnfg
    选择你的应用服务器-属性-安全性-使用自定义访问权限。
      

  5.   

    你所做的是假三层,真正的三层应该是:
    server:
    proceudre getXXXXByID(cookie:string;id:integer;vdata:olevarian)
    begin
    if checkck(cookie) then begin
       clientdataset1.open;
       vdata:=clientdataset.data;
    end else raise Exception.create("Cookie Error");
    end;client
    getXXXXByID(currnetusercookie,id, XXXXClientDataSet.data)
    //then can use XXXXClientDataSet
      

  6.   

    记住最好调用方法访问server端数据
      

  7.   

    哇,谢谢 johnma(johnma) 的解答,使我这个菜鸟开始学习
    但是我还不是很明白,为什么要将客户端的data传到服务器端呢?
    还有服务器端的clientdataset1是指什么呢?
    我有个例子,能不能用你所说的方法实现一下?
    我服务器端有一个表,里面有一个有一个字段为所属部门。
    同时数据库里面有一个user表。有一个记录里这个user属于A部门,这样是为了设定它所能得到的数据是表内属于A部门的数据。麻烦你能够传授一下,谢谢,嫌分不够我可以再开。再次感谢!