PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   七嘴八舌異言堂 (https://www.pcdvd.com.tw/forumdisplay.php?f=12)
-   -   [請教]mysql可否讓一個user搭配不同密碼存取個別的database (https://www.pcdvd.com.tw/showthread.php?t=1083245)

isnowcloud 2015-07-19 05:27 PM

[請教]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";

anderson1127 2015-07-19 05:47 PM

當然會出問題,所以一定不行!!

問題出在你對於 MySQL Database的授權給user的機制不清楚所致 , 請自行Google查詢
mysql user privileges on table 或者 mysql user privileges !!

在觀念上,授權的觀念上,可以指定特定account只可以讀取 某個DB裡的某個table ,不可寫入之類的觀念 !!

但是看你的授權command ,根本就一口氣整個完全控制權利都指定給某個account
如果沒事就沒事,程式出bug,你的DB會跟著賠葬喔 !!

isnowcloud 2015-07-19 06:02 PM

1. 請問...
你指的問題是"ALL PRIVILEGES"嗎?

因為我的database本身必須授權網頁寫入(綁discuz或是一些http service)
http://blog.csdn.net/zhu_hua_jie/ar...details/8690963

這樣我應該該只能給完整的權限吧-ALL PRIVILEGES ?

其實我每天都會異地備份資料庫,應該會比較安全@@

2. "假設"先不考慮權限的問題
我頂樓這樣使用是否還是不可行?(1用互綁3database with 3password)

anderson1127 2015-07-19 06:14 PM

先把mysql的授權機制先弄清楚,你就會知道該怎麼下command !!

而不是 橫柴入灶 這種暴力做法 !!

ALL Privileges 可不是固定不變的command .... :think:

給你參考 https://dev.mysql.com/doc/refman/5.1/en/grant.html

isnowcloud 2015-07-19 06:30 PM

了解,我先看看吧,到時候有不確定的再來請教大家

erai 2015-07-19 06:56 PM

引用:
作者isnowcloud
2. "假設"先不考慮權限的問題
我頂樓這樣使用是否還是不可行?(1用互綁3database with 3password)

用MySQL,不可行。
因為帳號與密碼,是一對一的關係

目前要做到這種一對多的帳密機制只能自己搞
例:
駭客登進某台帳密:admin / admin
結果什麼權限都沒有

又再試了一次:admin / password
結果什麼權限都沒有

又再試了一次:admin / 12345678
還是什麼權限都沒有

最後管理人員:admin / Admin

isnowcloud 2015-07-19 07:05 PM

引用:
作者erai
用MySQL,不可行。
因為帳號與密碼,是一對一的關係

目前要做到這種一對多的帳密機制只能自己搞
例:
駭客登進某台帳密:admin / admin
結果什麼權限都沒有

又再試了一次:admin / password
結果什麼權限都沒有

又再試了一次:admin / 12345678
還是什麼權限都沒有

最後管理人員:admin / Admin


感謝大哥,你的例子有點難理解,好像是不管什麼帳密都能登入只是都沒權限罷了?

我剛剛有認真研究了一下
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了:like:

wcpse 2015-07-19 07:05 PM

你想要弄假登錄的意思嗎?
也就是輸入帳密後可登錄
但不是原本的權限

isnowcloud 2015-07-19 07:10 PM

引用:
作者wcpse
你想要弄假登錄的意思嗎?
也就是輸入帳密後可登錄
但不是原本的權限


沒有沒有,假登錄應該是很高深的玩法,這個我完全沒有概念(不過好像和我想的有點契合)
原本只是希望能有一組帳號就能管理每個不同的database(根據不同的password)
只是個想法,沒想到問題還蠻多的,哈哈

PAN_PAN 2015-07-20 12:09 AM

請開多個 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


所有的時間均為GMT +8。 現在的時間是07:13 PM.

vBulletin Version 3.0.1
powered_by_vbulletin 2025。