三层结构访问数据库,如何给不同用户授权? ** 在线等待,谢谢 ** (100分)

  • 主题发起人 主题发起人 huawdg
  • 开始时间 开始时间
H

huawdg

Unregistered / Unconfirmed
GUEST, unregistred user!
采用 MIDAS 三层结构,各用户都通过中间层访问数据库的。
数据库访问权限是只需要给中间层呢,还是授给每个用户?
如果只授给中间层,岂不是只要知道应用服务器主机名的程序都可以访问数据库了?
如果授给每个用户,中间层怎么验证用户的访问权限?
向各位富翁求教,谢谢!
 
关注。
//如果把各用户相应的权限都保存在数据库中呢? 登录时判断。
 
不同的用户,有不同的用户名,通过后台服务,进行判别就是了。
后台服务都用同一身份登陆数据库,如sa.
 
如果通过 DCOMConnection 连接应用服务器,好象是有 DCOMCNFG 来授权给各用户的。
用户通过 TDCOMConnection 连接我的应用服务器时,有什么方法可以取得用户名呢?
又有什么方法可以取得用户的 IP 地址呢?

还有,如果通过 TSocketConnection 来连接应用服务器,又怎样来授权呢?

请大家继续指教。
 
中间层就像一个代理服务器,中转就可以了。
服务器主机名不会被客户端知道。
中间层仿佛一道防火墙,建议用TSocketConnection 来连接应用服务器
 
yaya8163:
如果用 TSocketConnection,启动了scktsrvr,可是不知道在哪里设置用户权限啊?
请帮帮忙。
我的应用服务器程序如何取得连接的用户信息呢?
 
我们现在的作法是这样的,可能笨了点。。。
给每一个FORM上的控件对每一个用户设置权限。这些信息保存在数据库中,用户一登陆,
就从数据库取回这个用户的所有的权限,然后设置这个用户是否能操作FORM上的控件。

还有一种方案是我们以前用的,就是还是在SQL SERVER 上设置权限和用户。
在用户登陆是默认是SA。根据用户登陆的用户名在SQL SERVER中找到是否有这个用户。
然后在中间层再作一遍用户转换。
 
to WUMENG:
请教:怎样取得用户登录信息?我第一次搞三层,谢谢了先
 
大家帮帮忙啊
 
用户的验证和权限全权自己设计,把所有用户的权限信息放到数据库中,
模拟NT的用户和权限管理,我曾经用过,可以控制到功能,过程,控件,
如果数据库设计合理,可以控制所有数据的权限(这个到目前还没有试过),
理论上应该可以实现的
 
可是我的客户程序连接我的 RemoteDataModule 时,服务端程序没有什么事件产生啊,
我怎么取得客户信息呢?
 
书上说:
通过 TDispatchConnection 的 AppServer 属性,可以调用服务器上的 自定义 的方法。

如果这样就好办了,只要在服务器上自定义一个 Login 方法就行了。

不过见笑了,我不知如何在服务器上自定义这个方法,高手指教啊! 谢谢
 
你不可以在中间件加上一个协调验证模块吗?
 
真是好帖子....
收藏
 
自己摸索了半天,终于在服务器端加上了 Login 方法。
高手们为何不肯赐教啊?!

不过原先我想所有客户只用一个连接的,现在似乎只能为每个用户开一个连接了,
只有Login检查通过的用户才能连接。

再请教:
共用一个连接是否可行呢?
 
问得好,关注!
 
这几天没上大富翁,所以这个问题今天才看到。
To huawdg
看来你是用数据库来控制权限的,是吗???
我取得用户是在APP SERVER中写LOGIN函数,下面的是我的一个测试的
procedure TTestServer.Login(const username, progname: WideString);
begin
nameList := username+' / '+progname;
Form1.ListBox1.Items.Add(nameList);
end;

在RemoteDataModule 的OnCreate中调用就可以知道有多少用户登陆了。
但还要在它的Destroy事件中删除退出登录的用户。
 
无法保存数据: 7。

>>共用一个连接是否可行呢?
我觉得只要共用一个APP SERVER就可以,因为不知道您的LOGIN是怎么写的,所以,您自己
只有多测试了。。。

我的这个答案贴了N次。。。。
 
该说的都说了,就是一个连接!sa!登陆上,再在数据库中取出权限分配情况和前端的用户
id比较就可以了!,若增加一个人,就在数据库上增加一个登陆用户,1000个用户,你累不累?
 
To huawdg:
共用一个链接我没有听说过。也没有见过。不过我好像有点明白你的意思。“共用一个
链接”的目的是为了增加效率。如果是这个目的,我倒知道一些。就是尽可以使用线
程Pooling,对象Pooling,和数据库链接Pooling。数据库Pooling还要看你的数据库
厂商有没有提供支持,前些两个如果在Win平台则可利用Com+获得支持。
 
后退
顶部