- 8.2.1 帳號使用者名稱與密碼
- 8.2.2 MySQL 提供的權限
- 8.2.3 授權表格
- 8.2.4 指定帳號名稱
- 8.2.5 指定角色名稱
- 8.2.6 存取控制,第一階段:連線驗證
- 8.2.7 存取控制,第二階段:請求驗證
- 8.2.8 新增帳號、指派權限和刪除帳號
- 8.2.9 保留帳號
- 8.2.10 使用角色
- 8.2.11 帳號類別
- 8.2.12 使用部分撤銷來限制權限
- 8.2.13 權限變更生效時機
- 8.2.14 指派帳號密碼
- 8.2.15 密碼管理
- 8.2.16 伺服器處理過期密碼
- 8.2.17 可插拔驗證
- 8.2.18 多因素驗證
- 8.2.19 代理使用者
- 8.2.20 帳號鎖定
- 8.2.21 設定帳號資源限制
- 8.2.22 疑難排解連線至 MySQL 的問題
- 8.2.23 基於 SQL 的帳號活動稽核
MySQL 允許建立帳號,讓客戶端使用者連線至伺服器並存取伺服器管理的資料。MySQL 權限系統的主要功能是驗證從給定主機連線的使用者,並將該使用者與資料庫的權限(例如 SELECT
、INSERT
、UPDATE
和 DELETE
)建立關聯。其他功能包括授與管理操作權限的能力。
為了控制哪些使用者可以連線,每個帳戶都可以被指派驗證憑證,例如密碼。MySQL 帳戶的使用者介面包含 SQL 陳述式,例如 CREATE USER
、GRANT
和 REVOKE
。請參閱 第 15.7.1 節,「帳戶管理陳述式」。
MySQL 權限系統確保所有使用者只能執行被允許的操作。身為使用者,當您連線到 MySQL 伺服器時,您的身分是由您連線的主機和您指定的使用者名稱所決定。當您連線後發出請求時,系統會根據您的身分和您想要做的事情來授予權限。
MySQL 會同時考慮您的主機名稱和使用者名稱來識別您,因為沒有理由假設給定的使用者名稱在所有主機上都屬於同一個人。例如,從 office.example.com
連線的使用者 joe
不一定是與從 home.example.com
連線的使用者 joe
是同一個人。MySQL 藉由讓您能夠區分不同主機上恰好具有相同名稱的使用者來處理此問題:您可以為 joe
從 office.example.com
連線授予一組權限,並為 joe
從 home.example.com
連線授予另一組不同的權限。若要查看給定帳戶擁有哪些權限,請使用 SHOW GRANTS
陳述式。例如
SHOW GRANTS FOR 'joe'@'office.example.com';
SHOW GRANTS FOR 'joe'@'home.example.com';
在內部,伺服器將權限資訊儲存在 mysql
系統資料庫的授權表格中。MySQL 伺服器會在啟動時將這些表格的內容讀取到記憶體中,並根據記憶體中的授權表格副本來決定存取控制。
當您執行連線到伺服器的用戶端程式時,MySQL 存取控制會涉及兩個階段
階段 1:伺服器會根據您的身分,以及您是否能夠提供正確的密碼來驗證您的身分,來接受或拒絕連線。
階段 2:假設您可以連線,伺服器會檢查您發出的每個陳述式,以判斷您是否具有足夠的權限來執行它。例如,如果您嘗試從資料庫中的資料表選取列,或從資料庫中刪除資料表,伺服器會驗證您是否具有該資料表的 SELECT
權限或該資料庫的 DROP
權限。
有關每個階段發生情況的更詳細描述,請參閱 第 8.2.6 節,「存取控制,階段 1:連線驗證」,以及 第 8.2.7 節,「存取控制,階段 2:請求驗證」。若要取得診斷權限相關問題的協助,請參閱 第 8.2.22 節,「疑難排解連線到 MySQL 的問題」。
如果您在連線時(無論是自己或其他人)變更了您的權限,這些變更不一定會立即對您發出的下一個陳述式生效。有關伺服器重新載入授權表格之條件的詳細資訊,請參閱 第 8.2.13 節,「權限變更生效的時間」。
有些事情您無法使用 MySQL 權限系統來完成
您無法明確指定應拒絕給定使用者存取。也就是說,您無法明確比對使用者然後拒絕連線。
您無法指定使用者擁有在資料庫中建立或刪除資料表的權限,但沒有建立或刪除資料庫本身的權限。
密碼會全域適用於帳戶。您無法將密碼與特定物件(例如資料庫、資料表或常式)關聯。