![]() |
||
Regular Member
![]() ![]() 加入日期: Feb 2015
文章: 65
|
[請教]mysql可否讓一個user搭配不同密碼存取個別的database
例如下面這樣
三個database(test1/test2/test3)都授權給同一個用戶account在localhost下使用,只是個別授權的認證密碼不同 請問這樣會不會有什麼其他問題? mysql>GRANT ALL PRIVILEGES ON test1.* TO account@localhost IDENTIFIED BY "password1"; mysql>GRANT ALL PRIVILEGES ON test2.* TO account@localhost IDENTIFIED BY "password2"; mysql>GRANT ALL PRIVILEGES ON test3.* TO account@localhost IDENTIFIED BY "password3"; |
|||||||
![]() |
![]() |
Elite Member
![]() ![]() ![]() ![]() ![]() 加入日期: Jan 2002
文章: 4,032
|
當然會出問題,所以一定不行!!
問題出在你對於 MySQL Database的授權給user的機制不清楚所致 , 請自行Google查詢 mysql user privileges on table 或者 mysql user privileges !! 在觀念上,授權的觀念上,可以指定特定account只可以讀取 某個DB裡的某個table ,不可寫入之類的觀念 !! 但是看你的授權command ,根本就一口氣整個完全控制權利都指定給某個account 如果沒事就沒事,程式出bug,你的DB會跟著賠葬喔 !!
__________________
您想買新硬碟嗎? 購買前請務必參考這篇文章,是我的實際經驗 還想讓統一賺你的錢嗎?統一集團成員(能見度高的): 星巴克、家樂福、7-11、無印良品、黑貓宅急便、聖娜多堡、阪急百貨、 康是美、博客來、夢時代、Mister Donut 、Cold Stone 、龜甲萬、 維力33%股權、光泉31%股權、Smile速邁樂、紅心辣椒、台北轉運站(統一企業BOT) 統一LP33膠囊有環保署早已列管的一級管制品: DNOP塑化劑 |
||
![]() |
![]() |
Regular Member
![]() ![]() 加入日期: Feb 2015
文章: 65
|
1. 請問...
你指的問題是"ALL PRIVILEGES"嗎? 因為我的database本身必須授權網頁寫入(綁discuz或是一些http service) http://blog.csdn.net/zhu_hua_jie/ar...details/8690963 這樣我應該該只能給完整的權限吧-ALL PRIVILEGES ? 其實我每天都會異地備份資料庫,應該會比較安全@@ 2. "假設"先不考慮權限的問題 我頂樓這樣使用是否還是不可行?(1用互綁3database with 3password) |
![]() |
![]() |
Elite Member
![]() ![]() ![]() ![]() ![]() 加入日期: Jan 2002
文章: 4,032
|
先把mysql的授權機制先弄清楚,你就會知道該怎麼下command !!
而不是 橫柴入灶 這種暴力做法 !! ALL Privileges 可不是固定不變的command .... ![]() 給你參考 https://dev.mysql.com/doc/refman/5.1/en/grant.html
__________________
您想買新硬碟嗎? 購買前請務必參考這篇文章,是我的實際經驗 還想讓統一賺你的錢嗎?統一集團成員(能見度高的): 星巴克、家樂福、7-11、無印良品、黑貓宅急便、聖娜多堡、阪急百貨、 康是美、博客來、夢時代、Mister Donut 、Cold Stone 、龜甲萬、 維力33%股權、光泉31%股權、Smile速邁樂、紅心辣椒、台北轉運站(統一企業BOT) 統一LP33膠囊有環保署早已列管的一級管制品: DNOP塑化劑 |
![]() |
![]() |
Regular Member
![]() ![]() 加入日期: Feb 2015
文章: 65
|
了解,我先看看吧,到時候有不確定的再來請教大家
|
![]() |
![]() |
Basic Member
加入日期: Jan 2006
文章: 22
|
引用:
用MySQL,不可行。 因為帳號與密碼,是一對一的關係 目前要做到這種一對多的帳密機制只能自己搞 例: 駭客登進某台帳密:admin / admin 結果什麼權限都沒有 又再試了一次:admin / password 結果什麼權限都沒有 又再試了一次:admin / 12345678 還是什麼權限都沒有 最後管理人員:admin / Admin
__________________
開發中的落後地區 |
|
![]() |
![]() |
Regular Member
![]() ![]() 加入日期: Feb 2015
文章: 65
|
引用:
感謝大哥,你的例子有點難理解,好像是不管什麼帳密都能登入只是都沒權限罷了? 我剛剛有認真研究了一下 https://dev.mysql.com/doc/refman/5....how-grants.html 用這上面這種方式去確認 我發現host固定的情況的確是不行的 之後grant的password會直接覆蓋,show下就很清楚 但是如果是相同帳號@不同的host好像就行 舉例 mysql>GRANT ALL PRIVILEGES ON test1.* TO account@domainname1 IDENTIFIED BY "password1"; mysql>GRANT ALL PRIVILEGES ON test2.* TO account@domainname2 IDENTIFIED BY "password2"; 這樣好像就no problem了 ![]() |
|
![]() |
![]() |
Regular Member
![]() ![]() 加入日期: Feb 2015
文章: 56
|
你想要弄假登錄的意思嗎?
也就是輸入帳密後可登錄 但不是原本的權限 |
![]() |
![]() |
Regular Member
![]() ![]() 加入日期: Feb 2015
文章: 65
|
引用:
沒有沒有,假登錄應該是很高深的玩法,這個我完全沒有概念(不過好像和我想的有點契合) 原本只是希望能有一組帳號就能管理每個不同的database(根據不同的password) 只是個想法,沒想到問題還蠻多的,哈哈 |
|
![]() |
![]() |
Junior Member
![]() ![]() ![]() 加入日期: Jan 2003 您的住址: Shattrath City
文章: 948
|
請開多個 mysql user 吧
正常我們的邏輯是 看 user 去判斷 權限 不是用密碼去判斷權限 你有聽過 用相同的 username 輸入不同密碼 登入 window 後給你不同的畫面嗎? 前面 mysql doc 寫的那個他是用 hostname 去區分連線的機器 你當然可以把三個不同的 hostname 都綁在同樣一個 localhost 但是我相信以 mysql account 的邏輯來說, 你應該不可能在相同 account 下, 設定超過一組不同的密碼 當然也或許不是做不到, 我快速能想到的寫法會是 先開一個 root mysql account 然後寫一個類似這樣的先導程式在 user login 或是哪裡 代碼:
if username == account and password == password1 SET PASSWORD FOR account@localhost = PASSWORD('password1'); GRANT ALL PRIVILEGES ON test1.* TO account@localhost IDENTIFIED BY "password1"; if username == account and password == password2 SET PASSWORD FOR account@localhost = PASSWORD('password2'); GRANT ALL PRIVILEGES ON test2.* TO account@localhost IDENTIFIED BY "password2"; if username == account and password == password3 SET PASSWORD FOR account@localhost = PASSWORD('password3'); GRANT ALL PRIVILEGES ON test3.* TO account@localhost IDENTIFIED BY "password3"; 當然啦 這是一個很爛方法, 因為當有 user 去 連接 test1 DB 他就會先把密碼改成 passowrd1, user 去連接 test2 DB 他就會先把密碼改成 passowrd2...etc 但是如果很多人同時間連線 我想密碼一定是來不及改的 然後會出現錯誤訊息類似 account 沒有權限登入某某 database |
![]() |
![]() |