MySQL8.0(MariaDB10)ユーザ作成・権限付与・パスワード変更

MySQL8.0(MariaDB10)でのユーザ作成、権限付与、パスワード変更について、まとめています。
MySQL8.0でいくつかの構文に変更がありました。
SQL文は、英語の大文字小文字の区別はありませんが、構文の見やすさのために構文箇所を大文字にしています。
ユーザ名やパスワードの’(コンマ)は省略できません。
(ワイルドカードをホストに使うときはシングルクォートでくくります。)

DBにアクセス

$ mysql -u root -p;
rootパスワードを入力します。

ユーザ一覧の確認

SELECT host, user FROM mysql.user;
mysql.userがユーザを管理しているテーブルです。

ユーザの作成&パスワード設定

CREATE USER 'user_name'@'localhost' IDENTIFIED BY 'user_password’;
ユーザ作成とパスワード設定を同時に行います。これはバージョン共通です。

パスワード変更

パスワード変更の構文は、バージョンによって異なります。
MySQL 8.0 以降
ULTER USER 'user_name'@'localhost' IDENTIFIED BY 'user_password';

ちなみに、MySQL 5.7以前だと
SET PASSWORD FOR 'user_name'@'localhost' IDENTIFIED BY 'user_password';

ユーザ削除

DROP USER user_name;

権限の確認

SHOW GRANTS FOR 'user_name'@'localhost';

権限の付与

user_nameに、db_nameの全てのテーブルに対する全ての操作の権限を付与します。
GRANT all ON db_name.* TO 'user_name'@'localhost' ;
一部の操作の権限のみ与える場合は、allをselect、update、insert、deleteの組み合わせに変えます。

既存のユーザに権限を付与することができます。
MySQL 8.0で、ユーザ作成と権限付与を同時に行うことができなくなりました。
データベースにないユーザ名に対してGRANTコマンドを行うと、ERROR 1064 (42000): You have an error in your SQL syntaxとなります。
ユーザを作成後、権限付与を行います。
(上記エラーが出る場合は、再起動後、権限付与を行います。)

権限のレベル

グローバルレベル
全てのデータベースの、全てのテーブルに対する権限を付与
*.*

データベースレベル
データベースdb_nameの、全てのテーブルに対する権限を付与
db_name.*

テーブルレベル
データベースdb_nameの、テーブルtable_nameに対する権限を付与
db_name.table_name

カラムレベル
データベースdb_nameの、テーブルtable_nameの、column1,column2...に対する権限を付与
(column1, column2, ...) ON db_name.table_name

データベース一覧を確認

SHOW DATABASES;

権限の読み込み

FLUSH PRIVILEGES;