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

  • 主题发起人 主题发起人 huawdg
  • 开始时间 开始时间
在中间层分配权限
 
谢谢各位的教诲。

我是这样连接的:
客户端:
MyDCOMConnection.Connected:=True;//连接应用服务器
if not Boolean(MyDCOMConnectin.AppServer.Login(UserName,Password)) then
begin
showmessage('Login Fail');
MyDCOMConnection.Connected:=False;
end;
应用服务器端:
function TTestRemoteDataModule.Login(const UserName,
Password: WideString): Integer;
begin
Result:=Integer(False);
if (UserName='XX') and (password='XXXXXX') then //实际使用时,用户名和口令将从数据库取出
begin
Result:=Integer(True);
MyDatabase.Connected:=True; //登录通过,连接数据库服务器
end;
end;

to wumemg: 我的这种写法是否合理呢?
你的 Login 是在 RemoteDataModule 的 OnCreate 中调用吗?这时候,UserName 从
哪里得到呢?

to 一生中最爱:
每个用户连接应用服务器后,都要调用Login 来身份验证,验证通过后,进行数据库
连接,数据库连接时都用sa。但这样后,到数据库的连接并不是一个啊!
 
应用服务器是线程模式,若使用bde,一定要使用session,若使用ado,则不用管
根本不可能后台只用一个连接就解决问题的。
多个连接,同一个登陆身份sa!不会出现问题的。若作过多线程数据库,你
就明白了
 
我想到一个方法,可以让每个用户共享同一个数据库连接。
请大家评论!
1。应用服务器程序启动时,建立数据库连接。
2。在RemoteDataModule中增加一个属性 EnableAccess:Boolean,
当Login正确时,使EnableAccess:=True;
3。在DatasetProvider的各个事件中,先检查EnableAccess是否为True,
 为True时,才将数据返回客户端/将提交的数据更新数据库。

 
To huawdg
看来你是用数据库来控制权限的,是吗???
这个你还没回答呢?!我们用的是在用户端控制界面上元件的Enable。我觉得你是用数据
库来控制权限,所以才有上面的回答。现在还是以这个前题来回答。
to wumemg: 我的这种写法是否合理呢?
可以,你是不是要把密码加密呢?
你的 Login 是在 RemoteDataModule 的 OnCreate 中调用吗?
是的。
这时候,UserName 从哪里得到呢? 就是客户端传过来的。

还有,如果你的程序用一个TSocketConnection或者TDCOMConnection就行(多个也行)。
这样,就是你说的--共用一个连接。
 
to wumeng:
我在数据库中是有一张用户权限表。
  我的 Login 是在客户端调用的
客户端:
MyDCOMConnection.Connected:=True;//连接应用服务器
  //下面调用服务器的 Login
if not Boolean(MyDCOMConnectin.AppServer.Login(UserName,Password)) then
begin
showmessage('Login Fail');
MyDCOMConnection.Connected:=False;
end;

我也希望在服务器的RemoteDataModule的OnCreate中调用Login,
可是 OnCreate只带一个Sender参数,客户端传过来的 UserName,服务器端怎么得到呢?

我的意思是共享数据库的连接。
通常情况下,有一个客户连接到应用服务器,应用服务器就会给建立一个数据库的连接,
有许多客户,应用服务器不就有许多到数据库的连接了吗?
我用的BDE,DATABASE 组件放在RemoteDataModule上。
 
后退
顶部