数据库应用程序三层结构中,客户端登录密码问题
数据库应用程序三层结构中,客户端登录密码问题
应用程序服务端如下:
在工程中加入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;
}