2010-01-24 83 views
60

我是新來的DBMS的管理方,並建立一個新的數據庫今晚(使用MySQL)時,我注意到這一點。授予用戶特權的第一次後,另一批創建,看起來像爲什麼第一次授予用戶權限時創建了「授予用法」?

GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD password 

的文檔說USAGE特權的意思是「沒有權限」,所以我推斷這就是補助分級,也許一個工作用戶必須對所有數據庫擁有某種特權,所以這可以作爲一個捕獲所有?

我也不明白爲什麼這行有一個IDENTIFIED BY子句,當我創建的授權沒有一個(主要是因爲我不明白IDENTIFIED BY子句的用途)。

編輯:對不起,不說明這個最初,贈款正如你所說,在MySQL USAGE是「沒有特權」的代名詞是

GRANT ALL PRIVILEGES ON database.* TO admin_user 
GRANT SELECT, INSERT, UPDATE, DELETE ON database.* TO user 
+0

可以請你告訴我們你已經運行的授權 – Pentium10 2010-01-24 10:55:42

回答

94

。來自MySQL Reference Manual

USAGE特權說明符代表「沒有特權」。它在GRANT的全局級別用於修改帳戶屬性,如資源限制或SSL特性,而不影響現有帳戶權限。

USAGE是一種告訴MySQL帳戶存在而不授予該帳戶任何實際權限的方式。他們只允許使用MySQL的,因此USAGE。它對應於`mysql`.`user`表中沒有設置特權的行。

IDENTIFIED BY子句表示設置了口令爲該用戶。我們如何知道用戶是他們自稱的用戶?他們通過爲他們的賬戶發送正確的密碼來識別自己。

用戶的密碼是不依賴於特定的數據庫或表的全球帳戶屬性之一。它也住在`mysql`.`user`表中。如果用戶沒有任何其他特權ON *.*,他們被授予USAGE ON *.*並顯示有他們的密碼哈希。這通常是CREATE USER聲明的副作用。當以這種方式創建用戶時,他們最初沒有特權,因此他們僅被授予USAGE

+5

奇怪:爲什麼打電話給他們,當他們的意思是沒有特權... – robsch 2015-01-16 09:00:48

+3

我認爲這是因爲他們被允許進行身份驗證。如果您嘗試使用錯誤的用戶或/和密碼,則無法進行身份驗證。具有USAGE特權的用戶可以運行某些SQL命令,如「select 1 + 1」和「show processlist」。 – 2015-02-26 16:10:12

3

在不使用IDENTIFIED BY子句時另外的MySQL密碼,可以是空白的值,如果非空,它們可以被加密。但是,是USAGE用於通過給予簡單的資源限制器如MAX_QUERIES_PER_HOUR修改帳戶,這同樣可以通過也 使用WITH子句中,一起選擇與GRANT USAGE(不添加權限)或GRANT ALL規定,您還可以在指定GRANT USAGE全球級別,數據庫級別,表級別等...

5

我試圖找到GRANT USAGE on *.* TO的含義,並在此處找到。我可以澄清GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD password將被授予當你創建用戶使用下面的命令(CREATE):

CREATE USER 'user'@'localhost' IDENTIFIED BY 'password'; 

當你補助特權與GRANT,新的特權旨意要在它的上面添加。