首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

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

2012-03-04 
数据库应用程序三层结构中,客户端登录密码问题数据库应用程序三层结构中,客户端登录密码问题应用程序服务

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


应用程序服务端如下:

在工程中加入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;
}


热点排行