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 的状况.