MySQL 8.0 要新增 DB User 的方法跟以前不太一樣,以前只要 grant 就會自動建立,現在需要另外 CREATE。
現在會需要下述步驟:
- 建立使用者
- 給使用者授權權限
MySQL 8.0 新增資料庫帳號(User)
建立使用者
- CREATE USER 'username'@'localhost' IDENTIFIED BY 'password'; # 採用 default
- CREATE USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
- 註:現在建議先使用 WITH mysql_native_password
授權使用者權限
- GRANT SELECT,INSERT,UPDATE,DELETE,CREATE ON db_name.* TO 'username'@'localhost';
- GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';
- GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'127.0.0.%';
問題排解
若上面建立使用者沒有使用 WITH mysql_native_password,PHP 7.3 PDO 連線遇到下述錯誤:
- connection failed: SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
- PHP 測試:$dbh = new PDO('mysql:host=localhost;dbname=db_name', 'username', 'password');
解法
- ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
5.7 之後的預設 SQL_MODE 就改囉,關鍵字是「NO_AUTO_CREATE_USER」
感謝指點~ 🙂