連接的是SQL SERVER2000資料庫, 添加完ADOConnection,ADOQuery,Datasource,DBgrid組件后具體該怎么做?代碼是什么,哪位大神能告訴我,萬分感激
uj5u.com熱心網友回復:
這么高的分數,這么簡單的問題,不科學啊。簡單說:弄一個視窗,用戶可以輸入用戶名和密碼,還有個登錄的按鈕,點擊了登錄按鈕以后,判斷是否輸入了用戶名和密碼,然后嘗試連接資料庫,打開指定的用戶表,先獲取輸入的用戶名相關的資訊,如果不存在指定的用戶,直接回傳失敗,如果存在這個用戶,將密碼欄位取出,和用戶輸入的密碼作匹配,相符則認為登錄成功,否則認為失敗,大概就是這么個流程。
當然,實際應用中,密碼欄位最好是加密或者用哈希值(md5)。
uj5u.com熱心網友回復:
人家送分的,小妖就不要和其他人搶了。。。uj5u.com熱心網友回復:
登陸視窗,就不需要,Datasource,DBgrid這兩個控制元件了吧uj5u.com熱心網友回復:
你只需要ADOConnection,ADOQuery這2個控制元件..其他步驟按照老妖的方法就OK了.uj5u.com熱心網友回復:
好久沒人散分啦.樓主順便散點吧.多謝了.uj5u.com熱心網友回復:
具體代碼怎么寫呢?能寫給我看嗎uj5u.com熱心網友回復:
那建議還是看點基礎的東西 不然一頭霧水
uj5u.com熱心網友回復:
在select陳述句里比較,有些資料庫是不區分大小寫的。如果要嚴格區分登錄名和密碼的大小寫,這點要注意。uj5u.com熱心網友回復:
具體代碼要怎么寫?
uj5u.com熱心網友回復:
別誤導了!
SQL Server 本身就有帳號密碼機制無需另建資料庫表...判斷的與否也由 SQL Server 定奪~
uj5u.com熱心網友回復:
判斷用戶名與密碼是在伺服端(Server) 而非在用戶端(Client)uj5u.com熱心網友回復:
用戶端只提供輸入用戶名稱與密碼後再傳入伺服端由伺服程式判斷...結果在回覆用戶端......uj5u.com熱心網友回復:
接分呵呵呵。
uj5u.com熱心網友回復:
現在竟然還有這么厚道的lz啊。問題簡單分數高uj5u.com熱心網友回復:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ADOConnection1->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\wu\xe2work\temp.mdb;Persist Security Info=False";
ADOConnection1->LoginPrompt = false;
ADOQuery1->Connection = ADOConnection1;
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
//查詢是否有輸入的用戶名
String sql ="select * from temp where Login = ";
sql+= "'"+EdName->Text+"'";
ADOQuery1->SQL->Add(sql);
ADOQuery1->Open();
if(ADOQuery1->RecordCount)
{
if(ADOQuery1->FieldByName("pass")->AsString == EdPass->Text)
{
ShowMessage("登入成功!");
return;
}
else
{
ShowMessage("密碼錯誤!");
return;
}
}
else
{
ShowMessage("用戶名不存在!");
return;
}
}
我想要拿分
uj5u.com熱心網友回復:
樓上的代碼可以作為一個典型的SQL注入案例來授課。
uj5u.com熱心網友回復:
妖哥,典型的SQL注入案例來授課?嘿嘿 啥意思uj5u.com熱心網友回復:
不認為耶~ 應為缺乏資訊防護力!
uj5u.com熱心網友回復:
此國王的新衣作法萬萬不可行啦~
唉~ 感嘆教程書籍誤人子弟何其多~
隨便下個 "select * from temp" 不就所有的用戶名與密碼全部露了餡曝了光嗎?
實際正確的作法應該先在 SQL Server 端建立所需的用戶成員...透過 ADOConnection 隨行的 Database Login 視窗輸入用戶名與密碼後與 SQL Server 連線登錄查核!
重點 : 用戶名與密碼登錄查核一定是在 Server 端...絕對不能放在 Client 端! 切記! 切記!
uj5u.com熱心網友回復:
那在輸入用戶名控制元件添加一個事件不就行了,同用一個用戶名去查找資料庫,不就OK了uj5u.com熱心網友回復:
教學範例與實務運作畢竟不同啦~
老兄您所提的是教程書籍一般的範例作法...在封閉的環境下使用還 Ok...比如公司內部使用的進銷存系統...若是系統外連至廣域網路其 SQL 語法容易被側錄而洩漏了關鍵數據庫...進而數據庫資料被攫取......
在金融銀行乃至於軍事數據庫基於安全保密的防護...通常會在數據庫 Server 預先建立好多組 SQL 命令區塊...用戶端程式只需向 Server 指定命令(此命令指的是編號而非 SQL 命令)加上對應的參數後...Server 端便會依據命令回傳至用戶端結果......
上述的作法在用戶端程式執行檔案與數據庫 Server 間的通訊完全沒有 SQL 的蹤跡...真正的 SQL 數據操作命令封裝在數據庫 Server 裡...這樣一來數據庫所有的操作完全與外界阻隔...駭客也就無從侵入......
在此建議數據庫的系統設計還是嚴謹的好...不能投機取巧採取高級的作法...否則就像美國國防部機密資料被英國駭客所攫取...據說機密資料有關高端飛行器.UFO.外星人檔案等等......
uj5u.com熱心網友回復:
好吧。。。。那就只有力求妖哥了
uj5u.com熱心網友回復:
void __fastcall TLoginFrm::LoginBitBtnClick(TObject *Sender)
{
try
{
String userid,passwd,SqlStr;
int level;
userid=Trim(UserIDEdt->Text);
passwd=Trim(PasswdEdt->Text);
SqlStr="select * from userTable where UserId='"+userid+"'";
SqlStr+="and Password='"+passwd+"'";
DataMod->TempQuery->Close();
DataMod->TempQuery->SQL->Clear();
DataMod->TempQuery->SQL->Add(SqlStr);
DataMod->TempQuery->Open();
if(DataMod->TempQuery->RecordCount>0)
{
level=DataMod->TempQuery->FieldByName("level")->AsInteger;
MainFrm->Login=true;
MainFrm->N9->Enabled=true;
MainFrm->ToolButton_Search->Enabled=true;
if(level>1)
{
MainFrm->N17->Enabled=true;
MainFrm->N18->Enabled=true;
MainFrm->N19->Enabled=true;
}
MainFrm->UserIDLbl->Caption=UserIDEdt->Text;
MainFrm->UserNameLbl->Caption= DataMod->TempQuery->FieldByName("UserName")->AsString;
MainFrm->VehOperator=UserIDEdt->Text;
MainFrm->VehOperator=MainFrm->UserIDLbl->Caption;
Close();
}
else
ShowMessage("沒有該用戶,\n或者密碼錯誤!");
}
catch(...)
{
//
}
}
可以參考
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/145993.html
標籤:數據庫及相關技術
下一篇:關于TreeView的問題
