序章

MySQL は、オープンソースのリレーショナルデータベース管理システムです。 通常、 LAMPスタック L inux、 A pache、 M ySQL、およびの略)の一部としてデプロイされます。 ] P HP)であり、この記事の執筆時点では、世界で最も人気のあるオープンソースデータベースです。

このガイドでは、新しいMySQLユーザーを作成し、さまざまなアクションを実行するために必要な権限をユーザーに付与する方法の概要を説明します。

前提条件

このガイドに従うには、MySQLデータベースにアクセスする必要があります。 このガイドでは、このデータベースがUbuntu 20.04を実行している仮想プライベートサーバーにインストールされていることを前提としていますが、データベースへのアクセス方法に関係なく、このデータベースで概説されている原則を適用できます。

MySQLデータベースにアクセスできず、自分でデータベースを設定したい場合は、MySQLのインストール方法に関するガイドのいずれかに従うことができます。 繰り返しになりますが、サーバーの基盤となるオペレーティングシステムに関係なく、新しいMySQLユーザーを作成し、それらにアクセス許可を付与する方法は、通常同じです。

または、クラウドプロバイダーが管理するMySQLデータベースを起動することもできます。 DigitalOceanマネージドデータベースを起動する方法の詳細については、製品ドキュメントを参照してください。

このガイドでは、変更またはカスタマイズする必要のあるサンプルコマンドの部分が強調表示されていることに注意してくださいlike this

新しいユーザーの作成

インストール時に、MySQLはデータベースの管理に使用できるrootユーザーアカウントを作成します。 このユーザーは、MySQLサーバーに対する完全な特権を持っています。つまり、すべてのデータベース、テーブル、ユーザーなどを完全に制御できます。 このため、管理機能以外でこのアカウントを使用することは避けてください。 このステップでは、 root MySQLユーザーを使用して新しいユーザーアカウントを作成し、それに特権を付与する方法の概要を説明します。

MySQL 5.7(およびそれ以降のバージョン)を実行しているUbuntuシステムでは、 root MySQLユーザーは、パスワードではなくデフォルトでauth_socketプラグインを使用して認証するように設定されています。 このプラグインでは、MySQLクライアントを呼び出すオペレーティングシステムユーザーの名前が、コマンドで指定されたMySQLユーザーの名前と一致している必要があります。 つまり、 rootにアクセスするには、mysqlコマンドの前にsudoを付けて、 rootUbuntuユーザーの権限で呼び出す必要があります。 MySQLユーザー:

  1. sudo mysql

注: root MySQLユーザーがパスワードで認証するように構成されている場合、MySQLシェルにアクセスするには別のコマンドを使用する必要があります。 以下は、通常のユーザー権限でMySQLクライアントを実行し、正しいパスワードで認証することによってのみデータベース内の管理者権限を取得します。

  1. mysql -u root -p

MySQLプロンプトにアクセスできるようになったら、CREATE USERステートメントを使用して新しいユーザーを作成できます。 これらは、次の一般的な構文に従います。

  1. CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';

CREATE USERの後に、ユーザー名を指定します。 この直後に@記号が続き、次にこのユーザーが接続するホスト名が続きます。 Ubuntuサーバーからローカルでこのユーザーにアクセスすることのみを計画している場合は、localhostを指定できます。 ユーザー名とホストの両方を一重引用符で囲む必要はありませんが、そうすることでエラーを防ぐことができます。

ユーザーの認証プラグインの選択に関しては、いくつかのオプションがあります。 前述のauth_socketプラグインは、有効なユーザーがデータベースにアクセスするためにパスワードを入力しなくても強力なセキュリティを提供するため、便利です。 ただし、外部プログラムがMySQLと対話する必要がある場合に、事態を複雑にする可能性のあるリモート接続も防止します。

別の方法として、構文のWITH authentication_plugin部分を完全に省略して、ユーザーにMySQLのデフォルトプラグインcaching_sha2_passwordで認証させることができます。 MySQLのドキュメントでは、強力なセキュリティ機能により、パスワードを使用してログインするユーザーにこのプラグインを推奨しています。

次のコマンドを実行して、caching_sha2_passwordで認証するユーザーを作成します。 sammyをお好みのユーザー名に変更し、passwordを選択した強力なパスワードに変更してください。

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

:PHPの一部のバージョンには、caching_sha2_passwordで問題を引き起こす既知の問題があります。 このデータベースをPHPアプリケーション(たとえば、phpMyAdmin)で使用する場合は、代わりに、古いmysql_native_passwordプラグインで認証するユーザーを作成することをお勧めします。

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

よくわからない場合は、次のコマンドを使用して、caching_sha2_pluginで認証し、後でALTERで認証するユーザーをいつでも作成できます。

  1. ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

新しいユーザーを作成したら、適切な権限をユーザーに付与できます。

ユーザー権限の付与

ユーザー権限を付与するための一般的な構文は次のとおりです。

  1. GRANT PRIVILEGE ON database.table TO 'username'@'host';

この構文例のPRIVILEGE値は、指定されたdatabaseおよびtableに対してユーザーが実行できるアクションを定義します。 それぞれをコンマで区切ることにより、1つのコマンドで同じユーザーに複数の特権を付与できます。 データベース名とテーブル名の代わりにアスタリスク(*)を入力して、ユーザー特権をグローバルに付与することもできます。 SQLでは、アスタリスクは「すべての」データベースまたはテーブルを表すために使用される特殊文字です。

説明のために、次のコマンドは、CREATEALTER、およびDROPデータベース、テーブル、およびユーザーにグローバル特権を付与し、[に権限を付与します。サーバー上の任意のテーブルからのX166X]、UPDATE、およびDELETEデータ。 また、SELECTを使用してデータをクエリし、REFERENCESキーワードを使用して外部キーを作成し、RELOAD特権を使用してFLUSH操作を実行する機能をユーザーに付与します。 ただし、ユーザーに必要な権限のみを付与する必要があるため、必要に応じてユーザーの権限を自由に調整してください。

使用可能な特権の完全なリストは、公式のMySQLドキュメントにあります。

このGRANTステートメントを実行し、sammyを独自のMySQLユーザー名に置き換えて、ユーザーに次の特権を付与します。

  1. GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

このステートメントにはWITH GRANT OPTIONも含まれていることに注意してください。 これにより、MySQLユーザーは、システム上の他のユーザーに自分が持っているすべての権限を付与できます。

警告:一部のユーザーは、MySQLユーザーにALL PRIVILEGES特権を付与したい場合があります。これにより、rootユーザーの特権に類似した幅広いスーパーユーザー特権が提供されます。

  1. GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

このMySQLユーザーにアクセスできる人は誰でもサーバー上のすべてのデータベースを完全に制御できるため、このような幅広い特権を軽く付与しないでください。

多くのガイドは、CREATE USERまたはGRANTステートメントの直後にFLUSH PRIVILEGESコマンドを実行して、許可テーブルを再ロードし、新しい特権が有効になるようにすることを提案しています。

  1. FLUSH PRIVILEGES;

ただし、の公式MySQLドキュメントによると、GRANTのようなアカウント管理ステートメントを使用して付与テーブルを間接的に変更すると、データベースは付与テーブルをすぐにメモリに再ロードします。つまり、[この場合、X246X]