存取控制:給使用者提供他們所需的存取權,且僅提供他們所需的存取權。
管理存取控制需要建立和管理使用者賬號。
MySQL建立一個名為root的使用者賬號,它對整個MySQL伺服器具有完全的控制。應該嚴肅對待root登入的使用。僅在絕對需要時使用它(或許在你不能登入其他管理賬號時使用)。不應該在日常的MySQL操作中使用root。
MySQL使用者賬號和資訊儲存在名為mysql的MySQL資料庫中。一般不需要直接存取mysql資料庫和表,但有時需要直接存取。需要直接存取它的時機之一是在需要獲得所有使用者賬號列表時,如下:
分析:mysql資料庫有一個名為user的表,它包含所有使用者賬號。user表有一個名為user的列,它儲存使用者登入名。
為了建立一個新使用者賬號,使用create user語句:
分析:在建立使用者賬號時不一定需要口令,不過這個例子用IDENTIFIED BY 'p@$$wOrd’給出了一個口令。
為重新命名一個使用者賬號,使用rename user語句:
為了刪除一個使用者賬號(以及相關的許可權),使用drop user語句:
為看到賦予使用者賬號的許可權,使用show grants for語句:
分析:輸出結果顯示使用者bforta有一個許可權USAGE ON .。USAGE表示根本沒有許可權,所以,此結果表示在任意資料庫和任意表上對任何東西沒有許可權。
為設定許可權,使用grant語句。grant要求你至少給出以下資訊:
分析:此grant允許使用者在crashcourse.*(crashcourse資料庫的所有表)上使用select。通過只授予select存取許可權,使用者bforta對crashcourse資料庫中的所有資料具有唯讀存取許可權。
grant的反操作為revoke,用它來複原特定的許可權。
grant和revoke可在幾個層次上控制存取許可權:
使用grant和revoke可以授予或復原的每個許可權如下表:
可通過列出各許可權並用逗號分隔,將多條grant語句串在一起,如下所示:
為了更改使用者口令,可使用set password語句:
分析:set password更新使用者口令。新口令必須傳遞到password()函數進行加密。
在不指定使用者名稱時,set password更新當前登入使用者的口令。
USE mysql;
SELECT USER FROM USER;
-- 建立一個新使用者賬號
CREATE USER ben IDENTIFIED BY 'p@$$wOrd';
SELECT USER FROM USER;
-- 重新命名一個使用者賬號
RENAME USER ben TO bforta;
-- 刪除一個使用者賬號(以及相關的許可權
DROP USER bforta;
-- 為了看到賦予使用者賬號的許可權
SHOW GRANTS FOR bforta;
-- grant的用法
GRANT SELECT ON crashcourse.* TO bforta;
SHOW GRANTS FOR bforta;
-- revoke用來複原特定的許可權
REVOKE SELECT ON crashcourse.* FROM bforta;
-- 可通過列出各許可權並用逗號分隔,將多條grant語句串在一起:
GRANT SELECT, INSERT ON crashcourse.* TO bforta;
-- 新口令加密
SET PASSWORD FOR bforta = PASSWORD ('n3w p@$$wOrd');
-- 在不指定使用者名稱時,SET PASSWORD更新當前登入使用者的口令
SET PASSWORD = PASSWORD ('n3w p@$$wOrd');