目錄
設置用戶與權限
一個MySQL系統可能有許多用戶。為了安全起見,root用戶通常只用管理目的。對於每個需要使用該系統的用戶,應該為他們創建一個賬號和密碼。這些用戶名和密碼不必與MySQL之外的用戶名稱和密碼(例如,Linux或NT用戶名和密碼)相同。同樣的原則也適合於root用戶。對於系統用戶和MySQL用戶最好使用不同的密碼,這一點對root用戶尤其應該這樣。
為用戶設置密碼不是必須的,但是強烈建議為所有創建的用戶設定密碼。要建立一個Web數據庫,最好為每個網站應用程序建立一個用戶。你可能會問,“為什麼要這麼做呢?”—-答案在於權限。
用戶管理
我們的MySQL的用戶,都被記錄在了mysql數據庫的user表中,如下圖:
在MySQL數據庫中,一個完整的用戶賬號應該包含用戶名和登錄主機,也就是說 用戶名@主機名
才是一個完整的用戶賬號。
創建用戶基本語法:
CREATE USER 用戶名@主機名 IDENTIFIED BY '密碼';
刪除用戶基本語法:
DROP USER 用戶名@主機名;
修改用戶密碼:
- 修改自己的密碼
set password = password('新密碼');
- 修改別人的密碼(需要有該權限)
set password for 用戶名@主機名 = password('新密碼');
MySQL權限系統介紹
MySQL的最好特性之一是支持複雜的權限系統。權限
是對特定對象執行特定操作的權力,它與特定用戶相關。其概念非常類似於文件的權限。擋在MySQL中創建一個用戶時,就賦予了該用戶一定的權限,這些權限指定了用戶在本系統中可以做什麼和不可以做什麼。
最少權限原則
最少權限原則可以用來提高任何計算機系統的安全性。它是一個基本的、但又是非常重要的而且容易為我們忽略的原則。該原則包含如下內容:
一個用戶(或一個進程)應該擁有能夠執行分配給他的任務的最低級別的權限。
該原則同樣適用於MySQL,就像它應用於其他地方一樣。例如,要在網站上運行查詢,用戶並不需要root用戶所擁有的所有權限。因此,我們應該創建另一個用戶,這個用戶只有訪問我們剛剛建立的數據庫的必要權限。
創建用戶:GRANT命令
GRANT和REVOKE命令分別用來授予和取消MySQL用戶的權限,這些權限分4個級別。它們分別是:
- 全局
- 數據庫
- 表
- 列
GRANT命令用來創建用戶並賦予他們權限。GRANT命令的常見形式是:
GRANT privileges [columns]
ON item
TO user_name [IDENTIFIED BY 'password']
[REQUIRE ssl_options]
[WITH [GRANT OPTION | limit_options]]
普通寫法可以簡略如下:
GRANT 權限列表 ON 數據庫.表 TO 用戶名@主機名 [IDENTIFIED BY '密碼'];
identified by可以省略,也可以寫出
(1)如果寫了,用戶存在,就是修改用戶的密碼
(2)如果寫了,該用戶不存在,就是創建用戶,同時指定密碼
方括號內的子句是可選的。在本語法中,出現了許多佔位符。第一個佔位符是 privileges
,應該是由逗號分開的一組權限。MySQL已經有一組已定義的權限。它們在下一節詳細介紹。
佔位符 columns
是可選的。可以用它對每一個列指定權限。也可以使用單列的名稱或者逗號分開的一組列的名稱。
佔位符 item
是新權限的所應用於的數據庫或表。可以將項目指定為“.”,而將權限應用於所有數據庫。這叫做賦予全局權限。如果沒有使用在特定的數據庫,也可以通過只指定*完成賦予全局權限。更常見的是,以dbname.*的形式指定數據庫中所有的表,以dbname.tablename的形式指定單個表,或者通過指定tablename來指定特定的列。這些分別表示其他3個可以利用的權限:數據庫、表、列。如果在輸入命令的時候正在使用一個數據庫,tablename本身將被解釋成當前數據庫中的一個表。
user_name
應該是用戶登錄MySQL所使用的用戶名。請注意,它不必與登錄系統時所使用的用戶名相同。MySQL中的user_name也可以包含一個主機名。可以用它來區分如itbsl(解釋成itbsl@localhost)和itbsl@somewhere.com。這是非常有用的一項能力,因為來自不同域的用戶經常可能使用同一個名字。這也提高了安全性能,因為可以指定用戶從什麼地方連接到本機,甚至可以指定它們在特定的地方可以訪問那些表和數據庫。
password
應該是用戶登錄時使用的密碼。常見的密碼選擇規則在這裏都適用。我們後面將更詳細地講述安全問題,但是密碼應該不容易被猜出來。這意味着,密碼不應該是一個字段單詞或與用戶名相同。理想的密碼應該是大、小寫字母和非字母的組合。
REQUIRE
子句允許指定用戶是否必須通過加密套接字連接,或者指定其它的SSL選項,關於SSL到MySQL連接的更多信息,請參閱MySQL手冊。
WITH GRANT OPTION
選項,如果指定,表示允許指定的用戶向別人授予自己所擁有的權限。
我們也可以指定如下所示的WITH子句:
MAX_QUERIES_PER_HOUR n
或者
MAX_UPDATES_PER_HOUR n
或者
MAX_CONNECTIONS_PER_HOUR n
這些子句可以指定每個用戶每小時執行的查詢、更新和鏈接的數量。在共享的系統上限制單個用戶的負載時,這些子句是非常有用的。
權限存儲在名為mysql的數據庫中的5個系統中。這些表分別是mysql.user、mysql.db、mysql.host、mysql.tables_priv和mysql.columns_priv。作為GRANT命令的替代,可以直接修改這些表。
權限的類型和級別
MySQL中存在3個基本類型的權限:適用於賦予一般用戶的權限、適用於賦予管理員的權限和幾個特定的權限。任何用戶都可以被賦予這3類權限,但是根據最少權限原則,最好嚴格限定只將管理員類型的權限賦予管理員。
我們應該只賦予用戶訪問他們必須使用的數據庫和表的權限。而不應該將訪問mysql的權限賦予不是管理員的人。mysql數據庫是所有用戶名、密碼等信息存儲的地方。
常規用戶的權限直接與特定的SQL命令類型以及用戶是否被允許運行它們相關。下錶所示的是基本用戶權限。“應用於”列下面的對象給出了該類型權限可以授予的對象。
用戶的權限
權限 | 應用於 | 描述 |
---|---|---|
SELECT |
表、列 | 允許用戶從表中查詢行(記錄) |
INSERT |
表、列 | 允許用戶在表中插入新行 |
UPDATE |
表、列 | 允許用戶修改現存表裡行中的值 |
DELETE |
表 | 允許用戶刪除現存表的行 |
INDEX |
表 | 允許用戶創建和拖動特定表索引 |
ALTER |
表 | 允許用戶改變現存表的結構,例如,可添加列、重命名列或表、修改列的數據類型 |
CREATE |
數據庫、表 | 允許用戶創建新數據庫或表。如果在GRANT中指定了一個特定的數據庫或表,它們只能夠創建該數據庫或表,即它們必須首先刪除(drop)它 |
DROP |
數據庫、表 | 允許用戶拖動(刪除)數據庫或表 |
從系統的安全性方面考慮,適於常規用戶的權限大多數是相對無害的。ALTER權限通過重命名表可能會影響權限系統,但是大多數用戶需要它。安全性常常是可用性與保險性的折中。遇到ALTER的時候,應當做出自己的選擇,但是通常還是會將這個權限授予用戶。
下面的表給出了適用於管理員用戶使用的權限。
可以將這些權限授予非管理員用戶,這樣做的時候要非常小心。
FILE權限有些不同,它對普通用戶非常有用,因為它可以將數據從文件載入數據庫,從而可以節省許多時間,否則,每次將數據輸入數據庫都需要重新輸入,這很浪費時間。
然而,文件載入可以用來載入MySQL可識別的任何文件,包括屬於其他用戶的數據庫和潛在的密碼文件。授予該權限的時候需要小心,或者自己為用戶載入數據。
管理員權限
權限 | 描述 |
---|---|
CREATE TEMPORARY TABLES |
允許管理員在CREATE TABLE語句中使用TEMPORARY關鍵字 |
FILE |
允許將數據從文件讀入表,或從表讀入文件 |
LOCK TABLES |
允許使用LOCK TABLES語句 |
PROCESS |
允許管理員查看屬於所有用戶的服務器進程 |
RELOAD |
允許管理員重新載入授權表、清空授權、主機、日誌和表 |
REPLICATION CLIENT |
允許管理員重新載入授權表、和從機(Slave)上使用SHOW STATUS |
REPLICATION SLAVE |
允許複製從服務器連接到主服務器 |
SHOW DATABASES |
允許使用SHOW DATABASES語句查看所有數據庫列表。沒有這個權限,用戶只能看到他們能夠看到的數據庫 |
SHUTDOWN |
允許管理員關閉MySQL服務器 |
SUPER |
允許管理員關閉屬於任何用戶的的線程 |
特別的權限
權限 | 描述 |
---|---|
ALL |
授予上面兩個表列表的所有權限。也可以將ALL寫成ALL PRIVILEGES |
USAGE |
不授予權限。這創建一個用戶並允許他登錄,但是不允許進行任何操作。通常會在以後授予該用戶更多的權限 |
REVOKE命令
與GRANT相反的命令是REVOKE。它用來從一個用戶收回權限。在語法上與GRANT非常相似:
REVOKE privileges [(columns)]
ON item
FROM user_name
中文翻譯:
REVOKE 權限列表 ON 數據庫.對象 FROM 用戶名@主機名;
如果已經給出了WITH GRANT OPTION子句,可以按如下方式撤銷它(以及所有其他權限):
REVOKE ALL PRIVILEGES, GRANT
FROM user_name
權限立即生效
當我們修改用戶權限之後,如果想不重啟立即生效,需要執行以下flush privileges
,這樣能快速刷新權限
FULSH PRIVILEGES;
使用GRANT和REVOKE的例子
要創建一個管理員,可以輸入如下所示的命令:
grant all on * to fred identified by 'mnb123' with grant option;
以上命令授予了用戶名為fred、密碼為mnb123的用戶使用所有數據庫的所有權限,並允許他向其他人授予這些權限。
如果不希望用戶在系統中存在,可以按如下方式撤銷:
revoke all privileges, grant from red;
現在,我們可以按如下方式創建一個沒有任何權限的常規用戶:
grant usage on books.* to sally identified by 'magic123';
在與sally交談后,我們對她需要進行的操作有了一定的了解,因此按如下方式可以授予她適當的權限:
grant select, insert, update, delete, index, alter, create, drop on books.* to sally;
請注意,要完成這些,並不需要指定sally密碼。
如果我們認為sally權限過高,可能會決定按如下方式減少一些權限:
revoke alter, create, drop on books.* from sally;
後來,當她不再需要使用數據庫時,可以按如下方式撤銷所有的權限:
revoke all on books.* from sally;
參考資料:
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】
※帶您來了解什麼是 USB CONNECTOR ?
※平板收購,iphone手機收購,二手筆電回收,二手iphone收購-全台皆可收購
※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象
※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!
※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化
※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益