MySQLで新しいユーザーを作成して権限を付与する方法


MySQLは、データを保存および整理し、ユーザーがデータを取得できるようにする、広く使用されている人気のあるデータベース管理システムです。これには、ユーザーにテーブルとデータベースへの特定のアクセス許可を付与するさまざまなオプションが付属しています。

このガイドでは、MySQLデータベースで新しいユーザーを作成して権限を付与する方法を学習します。

MySQLで新しいユーザーを作成する方法

新しいユーザーを作成するには、最初にMySQLシェルにログインします。

$ sudo mysql -u root -p

sudoパスワードに続けて、MySQLデータベースのセットアップ時に提供されたパスワードを入力し、Enterキーを押します。その後、このプロンプトが表示されます。

新しいユーザーを作成するには、以下に示す構文を使用します。

MariaDB [none]> CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

たとえば、データベース内に「tecmint」という新しいユーザーを作成するには、次のコマンドを呼び出します。

MariaDB [none]> CREATE USER 'tecmint'@'localhost' IDENTIFIED BY 'QkYKmw$5tec';

ローカルにユーザーを追加する場合、つまりMySQLをインストールしたシステムでは、ユーザーのホストはIPアドレスではなくlocalhostとして指定されます。キーワード「localhost」は「このコンピュータ」に変換され、MySQLはそれを一意に扱います。基本的に、localhostは、ローカルにインストールされたMySQLデータベースサーバーへの接続を確立するためにmysqlクライアントによって使用されます。

これまでのところ、tecmintユーザーにはデータベースと対話するための権限がありません。実際のところ、ユーザーはMySQLシェルにアクセスすることさえできません。

テーブルを含むすべてのデータベースへのフルアクセスをユーザーに許可するには、を実行します。

MariaDB [none]> GRANT ALL PRIVILEGES ON * . * TO 'tecmint'@'localhost';

上記のコマンドで、アスタリスクは、ユーザーがアクセスできるデータベースとテーブルをそれぞれ指します。データベースに対するすべての権限(読み取り、書き込み、編集、実行)をユーザーに付与します。これには、他のデータベースやテーブル全体でのすべてのタスクの実行も含まれます。

これまでのところ、ユーザーにデータベースへのフルアクセスを許可しています。これはMySQLの概念を説明するのに便利ですが、データベースにセキュリティリスクをもたらす可能性があるため、通常はお勧めしません。ハッカーがユーザーのパスワードを入手した場合にどうなるか考えてみてください。次のセクションでは、さらに進んで特定のアクセス許可を割り当てる方法について説明します。

ユーザーへのアクセス許可の割り当てが完了したら、表示されているようにすべての特権を再ロードして、変更を有効にします。

MariaDB [none]> FLUSH PRIVILEGES

さまざまなユーザー権限を付与する方法

ユーザーに付与できる可能性のある権限の内訳は次のとおりです。

  • ALL PRIVILEGES – As previously seen, this grants a MySQL user full access to a specific database.
  • CREATE – Allows users to create new databases or tables.
  • DROP – Enables users to delete databases or users.
  • INSERT – Allows users to insert rows in tables.
  • DELETE – Allows users to delete rows from tables.
  • SELECT – with ‘SELECT’ permission, users are able to read the contents of a table.
  • UPDATE – Allows users to updates the rows in a table.
  • GRANT OPTION – Users can grant or remove the privileges of other users.

特定のユーザー権限を付与するには、次の構文を使用します。

MariaDB [none]> GRANT permission_type ON database_name.table_name TO 'username'@'localhost';

さらに、次のように、単一のアスタリスク記号を使用して、データベース内のすべてのテーブルにアクセス許可を割り当てることができます。

MariaDB [none]> GRANT permission_type ON database_name.* TO 'username'@'localhost';

たとえば、データベースtestdbのすべてのテーブルで「tecmint」ユーザーにSELECT権限を割り当てるには、コマンドを実行します。

MariaDB [none]> GRANT SELECT ON testdb.* TO 'tecmint'@'localhost';

次に、変更を有効にするための特権をフラッシュします。

MariaDB [none]> FLUSH PRIVILEGES;

さらに、図のようにコンマで区切ることにより、一度に複数の権限を割り当てることができます。

MariaDB [none]> GRANT INSERT, UPDATE ON testdb.* TO 'tecmint'@'localhost';

MySQLパーミッションを取り消す方法

ユーザーから権限を取り消すには、次の構文を使用します。

MariaDB [none]> REVOKE permission_type ON database_name.table_name FROM 'username'@'localhost';

たとえば、ユーザー「tecmint」からINSERT権限を取り消すには、コマンドを実行します。

MariaDB [none]> REVOKE INSERT ON testdb.* FROM tecmint'@'localhost';
MariaDB [none]> FLUSH PRIVILEGES

ユーザーの現在の権限を確認するには、次のコマンドを実行します。

MariaDB [none]> SHOW GRANTS FOR 'username'@'localhost';

以下の出力から、INSERT権限が「tecmint」ユーザーから消去され、testdbデータベースにSELECT権限とUPDATE権限のみが残っていることがわかります。

新しいユーザーを使用してMySQLシェルへのログインをテストするには、最初にログアウトします。

MariaDB [none]> quit;

その後、再度ログインします。

$ sudo mysql -u tecmint -p

ユーザーのパスワードを入力し、Enterキーを押してシェルにアクセスします。

ユーザーを削除するには、データベースを削除するときと同じように、DROPコマンドを使用します。

MariaDB [none]> DROP USER 'username'@'localhost';

次のMySQL関連の記事も読むことをお勧めします。

うまくいけば、これで、MySQLデータベースサーバーにユーザーを作成し、アクセス許可を快適に割り当てたり取り消したりできるようになります。