2012-03-29 170 views
10

除root以外的用戶是否可以創建數據庫?MySQL用戶創建數據庫需要什麼權限?

GRANT SELECT, CREATE ON *.* TO 'myguy'@'thatmachine' IDENTIFIED BY PASSWORD '*12057DFA2BFBD8760D4788735B1C3E26889D7ECE' | 
GRANT ALL PRIVILEGES ON `db1`.* TO 'myguy'@'thatmachine' 
GRANT ALL PRIVILEGES ON `db2`.* TO 'myguy'@'thatmachine' 

我想知道這裏缺少什麼特權?另外,爲什麼第一行有附加密碼?

UPDATE

讓我進一步澄清我的問題的重點是什麼。我有兩個數據庫機器,源和目標。源計算機上有許多客戶數據庫。我需要將這些源數據庫移到其他目標機器上。

數據庫的形式爲mysqldump'ed .sql文件,從源文件到目標文件都是sftp。目標用戶(不是root用戶)必須從每個.sql文件本地重新創建數據庫,執行一些操作,然後刪除數據庫。

我找不到給予目標用戶這些權限而不給予他的全局權限*.*的方法,該權限有效地使該用戶像root一樣危險。

+1

有趣。好的,這是一個想法。而不是在目標機器上使用mysql,請專門爲此事務使用備用數據庫。 SQLite或者其他的東西。這樣,他的權限與任何完全可操作的數據庫無關,它們只能用於臨時數據庫和操作。你可能不得不改變一些腳本,或者不要,但是這樣你會更安全。爲這個特定的專長製造一小口控制權,然後在他完成時將其取消。可能是一些額外的工作 - 但它會解決這個問題。 – 2012-03-30 15:14:16

回答

7
+4

在一個非常不幸的事件鏈中,用戶'myguy'確實被允許創建數據庫。他不能摧毀他們。 但是,我不希望該用戶能夠銷燬他沒有創建的數據庫,那麼我有什麼特權給他?爲什麼這麼難? – AKWF 2012-03-29 22:35:24

+0

@AKWF:Hmph。這確實是......不幸的。您可能希望在創建數據庫之後特別授予他「DROP」權限, AFAIK這是不可能在MySQL中自動執行的。他是通過腳本創建數據庫嗎,還是你無法控制他的行爲? – Piskvor 2012-03-29 22:39:50

+0

你需要做的是決定你想要這個特定的用戶能夠做什麼,然後授予他們這些權限。例如,據此,他擁有db1和db2的所有權限,他可以在所有數據庫上進行選擇和創建,但顯然無法更新或插入......奇怪的設置我會說。但是,如果你只是想讓他只有閱讀和更新,那麼你會做這樣的事情: GRANT SELECT,更新*。* TO'myguy'@'thatmachine'IDENTIFIED BY PASSWORD'* 12057DFA2BFBD8760D4788735B1C3E26889D7ECE' – 2012-03-29 22:44:50

0

密碼字段是登錄到MySQL本身時特定用戶的密碼是什麼。當你說你想知道缺少什麼特權時,我不確定你的意思。你究竟想要做什麼?

+0

我有一個用戶必須下載.sql數據庫轉儲並恢復它們在本地系統上。我不知道這些數據庫的名字是什麼,所以我必須給用戶「創建*。*」。我認爲創建數據庫的用戶能夠放棄它是常識,但沒有這樣的運氣。我不敢給用戶「放在*。*」上,這是一個用於皮特的Web應用程序。我只想保護這個數據庫用戶並使他們能夠做一些事情,但是如果用戶遭到劫持則限制任何潛在的損害。 – AKWF 2012-03-29 22:39:12

+0

對於網絡應用程序,最好不要創建或刪除任何東西,除非您知道該人確切知道他們在做什麼 - 例如,使用PHPMyAdmin。 另外,您可能需要考慮一個數據庫方案,其中不需要創建整個數據庫。我看到很少的例子,最終用戶需要能夠創建整個數據庫。 – 2012-03-29 22:51:59

+0

即使在那 - 真的......你永遠不應該刪除/刪除任何東西,只要使用一個布爾'刪除'字段。 – 2012-03-29 22:53:08

相關問題