線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3277
推到 Plurk!
推到 Facebook!

MySQL 資料庫若多人(3000人)用同一個帳號上線進行語句查詢,MySQL會出錯嗎?

答題得分者是:cobraliu
adrianblack
一般會員


發表:5
回覆:5
積分:2
註冊:2007-11-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-10-13 00:28:24 IP:123.110.xxx.xxx 訂閱
請教各位前輩,小弟是資料庫新手,有些問題想請教…

小弟想在程式裡加一個網路驗證功能,想法如下,不知可不可行,望請各位前輩指正,或是有更方便、安全、穩定的方法,不吝賜教:
■從程式裡連接到網路的 MySQL 資料庫,並送出比對帳號是否存在的查詢語句,比對成功則程式可繼續執行;反之則關閉程式。

但又想到以下問題…
1.登入 MySQL 資料庫時,是以同一個帳號密碼登入,若線上同時有3000個 USER 登入的話,那麼 USER 端的應用程式還能正常得到查詢結果嗎?
2.同上所述,亦或者 MySQL 資料庫會因此無法運作?
3.小弟的程式送出的語句是明碼,很容易被內行人看出來,若我限制該MySQL帳號的權限後,是否還會被不明人士入侵,造成安全上的疑慮?


cobraliu
中階會員


發表:15
回覆:75
積分:83
註冊:2007-11-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-13 14:06:21 IP:122.117.xxx.xxx 訂閱
一、若用同一帳號,可以Run,也可以拿到資料,印象中沒有差,但你的主機可以接受同時3千人去查資料嗎....它引申的問題還滿多的...
二、跟上述一樣...
三、有設權限,還有有權限可以去使用那些Table不是嗎...即然有權限當然就有顧慮了...

若回答有誤請各位大大指正...
===================引 用 adrianblack 文 章===================
請教各位前輩,小弟是資料庫新手,有些問題想請教…

小弟想在程式裡加一個網路驗證功能,想法如下,不知可不可行,望請各位前輩指正,或是有更方便、安全、穩定的方法,不吝賜教:
■從程式裡連接到網路的 MySQL 資料庫,並送出比對帳號是否存在的查詢語句,比對成功則程式可繼續執行;反之則關閉程式。

但又想到以下問題…
1.登入 MySQL 資料庫時,是以同一個帳號密碼登入,若線上同時有3000個 USER 登入的話,那麼 USER 端的應用程式還能正常得到查詢結果嗎?
2.同上所述,亦或者 MySQL 資料庫會因此無法運作?
3.小弟的程式送出的語句是明碼,很容易被內行人看出來,若我限制該MySQL帳號的權限後,是否還會被不明人士入侵,造成安全上的疑慮?


------
初學、初學、學了很久...還是在初學階段..Orz
adrianblack
一般會員


發表:5
回覆:5
積分:2
註冊:2007-11-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-13 14:28:30 IP:123.110.xxx.xxx 訂閱
1.那麼如果權限只設定給予 select 某個欄位,那該 user 能靠其他方法編修MySQL 資料庫嗎?
2.或者小弟該如何做驗證的功能,才比較沒有安全上的疑慮呢?
3.是否有其他可行的方法來代替小弟的方案呢?

請前輩不吝指教 ^^"


===================引 用 cobraliu 文 章===================
一、若用同一帳號,可以Run,也可以拿到資料,印象中沒有差,但你的主機可以接受同時3千人去查資料嗎....它引申的問題還滿多的...
二、跟上述一樣...
三、有設權限,還有有權限可以去使用那些Table不是嗎...即然有權限當然就有顧慮了...

若回答有誤請各位大大指正...
編輯記錄
adrianblack 重新編輯於 2008-10-13 14:42:15, 註解 無‧
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-10-13 19:30:59 IP:122.118.xxx.xxx 未訂閱
1.理論上沒有.
2.不要經過網路. 不過.不太可能. 除非用的是 WEB
3. 同時 connect 3000 個 connect? 它的問題在你的 os 吧.
因為每個 connect 進來.都是一個 file handle
這個要測喔.我測過其他的東西是能跑到2000.

===================引 用 adrianblack 文 章===================
1.那麼如果權限只設定給予 select 某個欄位,那該 user 能靠其他方法編修MySQL 資料庫嗎?
2.或者小弟該如何做驗證的功能,才比較沒有安全上的疑慮呢?
3.是否有其他可行的方法來代替小弟的方案呢?

請前輩不吝指教 ^^"


===================引 用 cobraliu 文 章===================
一、若用同一帳號,可以Run,也可以拿到資料,印象中沒有差,但你的主機可以接受同時3千人去查資料嗎....它引申的問題還滿多的...
二、跟上述一樣...
三、有設權限,還有有權限可以去使用那些Table不是嗎...即然有權限當然就有顧慮了...

若回答有誤請各位大大指正...
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-10-13 22:02:01 IP:59.126.xxx.xxx 訂閱
如果您的前端 User 這麼大量的話,建議您可以改採 Multi - Tier 的方式,這樣可以用多台 Server 來分擔 Client 的連接數量,而資料庫的那一台 Server 也不會被大量的 Connection 拖垮,只是您要開發的是 ap 還是 web ? 不過,不管是哪種,真的使用者【同時間】的量那麼大的話,多 ServerSide 的分擔處理方式,至少可以解決您的問題
------
價值的展現,來自於你用哪一個角度來看待它!!
cobraliu
中階會員


發表:15
回覆:75
積分:83
註冊:2007-11-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-10-14 00:02:47 IP:220.143.xxx.xxx 訂閱
暗黑大大有回覆問題以下是閒話家常

其實講到最後是$$$$$$的問題很主要...@@
在自已的客戶中有用「深藍」的主機(算算大概是8年前左右買的)加Oracle的Database,同時約3-5百人在使用,主機一樣是Down Down下來....
理論上,User再多是可以吃下來,但主機受不了....這又卡到$$$...
careychen大大談到用Multi - Tier ....$$$跑不了....

So.資金是很大的問題...

上述是閒話...各位大大看看就好,別太認真...@@

------
初學、初學、學了很久...還是在初學階段..Orz
編輯記錄
cobraliu 重新編輯於 2008-10-14 00:03:27, 註解 無‧
cobraliu 重新編輯於 2008-10-14 00:05:22, 註解 無‧
adrianblack
一般會員


發表:5
回覆:5
積分:2
註冊:2007-11-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-10-15 14:00:30 IP:123.110.xxx.xxx 訂閱
在此先感謝各位大大們的回應~

小弟欲在程式裡加入的驗證功能,在連上server回傳驗證碼至Cilent端的應用程式後,馬上會與該server斷線,可能不會造成server負載過重,但仍會擔心那~~麼的剛好所有user一同上網驗證(ps:希望別發生才好),會造成server負載過重,不曉得這麼推斷是否正確 @@!?

cobraliu大大所云,小弟的資金可能無法因應高價位的server @@,目前屬意選擇網路上的付費 MySQL 用用(一年500元;x度數位科技網:不曉得穩不穩定,或者大大們有更好的建議 @@)。

另外,小弟在網路上也找到完全符合小弟想法的範例程式(ps:應用程式連上網路驗證,並回傳註冊碼的功能),在此貼上該連結網址,供有需要的大大們參考 ^^" (感謝偉大的Google 以及Delphi.ktop 大大們~)

http://download.csdn.net/source/141964
(ps:上述連結引述自 http://www.csdn.net/, 需註冊才能下載該網站的程式,註冊不需要$$!)
編輯記錄
adrianblack 重新編輯於 2008-10-15 14:03:24, 註解 無‧
adrianblack 重新編輯於 2008-10-15 14:22:55, 註解 無‧
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-10-15 23:05:28 IP:219.86.xxx.xxx 訂閱
  小心 sql rejection !!
就是當你的程式 寫的時候是用輸入欄的 [帳號]&[密碼]
來組成select 語法的時候~
如果是直接組:
select user from user_table where id="edit1.text" and pass="edit2.text"
這樣是會出現大問題的
因為只要我在edit1.text裡面輸入 0 or 1=1 --
或者edit2.text裡面輸入 0 or 1=1 --
這樣組成的SQL變成
select user from user_table where id=0 or 1=1 -- and pass="edit2.text"
這樣就會被破功了
------
======================
昏睡~
不昏睡~
不由昏睡~
adrianblack
一般會員


發表:5
回覆:5
積分:2
註冊:2007-11-03

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-10-16 13:54:10 IP:123.110.xxx.xxx 訂閱
感謝大大的提醒 ^^~
小弟在 php 裡有加入這一小段驗證…
因為用戶的帳號格式裡只能有 0~9 a~z A~Z ,這樣應該可以擋掉 sql rejection 攻擊吧 @@。
另外,小弟也在 .htaccess 檔裡加入 Options -Indexes ,以防止 user 跑到小弟的網站讀取目錄裡的檔案 ^^"

[code php]
// 若非 0~9 a~z A~Z,就傳回 false
function checktype($checknametype){
if (eregi("[^0-9a-zA-Z] ",$checknametype)){
return false;
}
else {
return true;
}
}

[/code]

===================引 用 ko 文 章===================
小心 sql rejection !!
就是當你的程式 寫的時候是用輸入欄的 [帳號]&[密碼]
來組成select 語法的時候~
如果是直接組:
select user from user_table where id="edit1.text" and pass="edit2.text"
這樣是會出現大問題的
因為只要我在edit1.text裡面輸入 0 or 1=1 --
或者edit2.text裡面輸入 0 or 1=1 --
這樣組成的SQL變成
select user from user_table where id=0 or 1=1 -- and pass="edit2.text"
這樣就會被破功了
系統時間:2024-11-24 19:27:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!