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;