读书人

数据库应用程序三层结构中客户端登录

发布时间: 2012-03-04 11:13:34 作者: rapoo

数据库应用程序三层结构中,客户端登录密码问题
数据库应用程序三层结构中,客户端登录密码问题


应用程序服务端如下:

在工程中加入Remote Data Module,

在Remote Data Module中加入以下控件:

1. ADOConnection1

LoginPrompt属性为false //不显示登录窗口

ConnectionString属性编辑为

Provider=MSDASQL.1;Password=masterkey;Persist Security Info=True;User ID=SYSDBA;
Data Source=NetworkManageDB_Link;Extended Properties= "DSN=NetworkManageDB_Link;
UID=SYSDBA;PWD=masterkey;DB=D:\temp\TEST_DB.IB "


2. ADODataSet1

3. DataSetProvider1


客户端如下:

在工程中加入Data Module中的Customer Data,

在Customer Data中加入以下控件:

1. SocketConnection1 LoginPrompt属性为true //显示登录窗口

2. ClientDataSet1

3. DataSource1

4. DBGrid1

经以上设置后,登录窗口的用户名与密码无论正确与否,客户端都能正常获取到数据库中的数据,

说明ADOConnection1的ConnectionString属性中“UID=SYSDBA;PWD=masterkey;”部分直接生效了。

如果将ConnectionString属性中作如下改动:

“UID=SYSDBA;PWD=masterkey;”---更改为---> “UID=;PWD=;”

则客户端启动时有登录窗口,也能自动唤起服务端,但服务端会出错,而客户端也就得不到数据。


我要实现的功能是:

所有用户都是数据库管理系统中添加并指定权限,验证都由数据库管理系统来完成。

原设想是在客户端的登录窗口中将用户名与密码传递到服务应用端,再由服务应用端传递到数据库管理系

统,最终由数据库管理系统完成验证。

请教各位高手,如何才能实现以上功能?

顺便问下各位,为什么提问结贴按先前承诺给分时,也会扣信誉分?

[解决办法]
权限可以由数据库来处理,比如在数据库端创建多个帐号,权限不同
或者帐号登录后,提起数据表中的权限,再根据权限对照表是否给与开启相应的表,或者允许相应的菜单

置于信誉分是被删了贴才会被扣
[解决办法]
我也遇到了类似的问题,但就是找不到解决方法,高手都到哪去了?
[解决办法]
给你参考一下,我以前的代码:
__fastcall TDataExchangeServer::TDataExchangeServer(TComponent* Owner) : TCRemoteDataModule(Owner)
{
try {
FInitialized=false;

DBConn=new TDBConn(this);

if (!DBConn-> Connect())
throw Exception( "建立数据连接失败 ");

m_DealExData=new TDealExData(DBConn);

FInitialized=true;
}
catch(Exception& e) {
DataExchangeServerForm-> WriteLog( "错误: "+e.Message);
}
}


STDMETHODIMP TDataExchangeServerImpl::Login(BSTR inUser, BSTR inPass,
short* Result)
{
try {
*Result=-1;

if (!m_DataModule-> Initialized)
throw Exception( "对象未成功初始化 ");

if (m_DataModule-> DealExData-> Login(inUser,inPass)) {
*Result=0;
DataExchangeServerForm-> AddSiteInfo(
m_DataModule-> DealExData-> SiteCode,
m_DataModule-> DealExData-> SiteName,
m_DataModule-> DealExData-> Address);

DataExchangeServerForm-> AddLogInfo(AnsiString(inUser)+ "登录成功 ");
}
}
catch(Exception& e) {
DataExchangeServerForm-> AddLogInfo(AnsiString(inUser)+ "登录错误( "+e.Message+ ") ");
}

return S_OK;
}


读书人网 >C++ Builder

热点推荐