MySQL 在增加 user 時, 可以使用 INSERT mysql db 或 GRANT 的方式來增加 user, 但是為何使用 grant 增加, 於 user table 的 *priv 權限值都是 N, 但是權限又是正常照設定的運作?, 到底 MySQL 連線認證是怎麼樣運作的呢?..
MySQL 連線認證授權步驟:
- MySQL connect -> mysql db -> user table (id, password) -> db table (exec priv) -> user table(priv)
MySQL 有個 mysql 的 db, 記錄 user, db 的 table.
- 一個 connect 要建立, 會先檢查 user table, 看看 帳號、密碼是否正確, 正確的話, connection 正式建立.
- 再來是要檢查是否有執行的權限, 會再去看 db 的 table, ex: 檢查是否有 Select, Update, Insert, Delete... 等權限.
- 而 user table 的 *_priv等 權限, 是 db table 查不到的狀況下或其它更細節的狀況才會用到.(會發現用 grant 授權的, user table 的 *_priv 等 的值, 都會是 N)
MySQL 要特別注意 要設定哪些IP 可以連進來時, 要注意不能重覆設定(除了本機外).
假設本機 IP 是 1.1.1.1, 本機要設定 localhost 和 1.1.1.1 的那個帳號可以連進來, 不然 mysql -u id -p -h hostname 會連不進去. 但是若其它外部連過來的機器(ex: 2.2.2.2), 只能設1組IP設定, ex: 2.2.2.% 或 2.2.2.2, 這兩個只能有一個存在, 若設 domain, 也要注意 domain 反解回來的 IP 有沒有跟這IP 重覆, IP 重覆在平常運作下是不會有問題, 但是在量大的狀況下, 就會發生有些 connect 會 Access denied 的狀況.