序章

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を実行しているUbuntuシステムの場合 5.7 (およびそれ以降のバージョン)、 root MySQLユーザーは、 auth_socket パスワードではなく、デフォルトでプラグイン。 このプラグインでは、MySQLクライアントを呼び出すオペレーティングシステムユーザーの名前が、コマンドで指定されたMySQLユーザーの名前と一致している必要があります。 これは、あなたが前にする必要があることを意味します mysql でコマンド sudo root MySQLユーザーにアクセスするために、 root Ubuntuユーザーの権限でそれを呼び出すには:

  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. ユーザー名とホストの両方を一重引用符で囲む必要はありませんが、そうすることでエラーを防ぐことができます。

ユーザーの認証プラグインの選択に関しては、いくつかのオプションがあります。 The 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';

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

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

使用可能な特権の完全なリストは、公式の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ユーザーにアクセスできる人は誰でもサーバー上のすべてのデータベースを完全に制御できるため、このような幅広い特権を軽く付与しないでください。

多くのガイドは、 FLUSH PRIVILEGES 直後のコマンド CREATE USER また GRANT 付与テーブルをリロードして、新しい特権が有効になるようにするためのステートメント:

  1. FLUSH PRIVILEGES;

ただし、 MySQLの公式ドキュメントによると、次のようなアカウント管理ステートメントを使用して付与テーブルを間接的に変更する場合 GRANT、データベースは付与テーブルをすぐにメモリにリロードします。つまり、 FLUSH PRIVILEGES この場合、コマンドは必要ありません。 一方、実行してもシステムに悪影響はありません。

権限を取り消す必要がある場合、構造は権限を付与するのとほぼ同じです。

  1. REVOKE type_of_permission ON database_name.table_name FROM 'username'@'host';

権限を取り消す場合、構文では次を使用する必要があることに注意してください FROM、 それ以外の TO 権限を付与するときに使用しました。

を実行して、ユーザーの現在の権限を確認できます SHOW GRANTS 指図:

  1. SHOW GRANTS FOR 'username'@'host';

データベースを削除できるのと同じように DROP、使用できます DROP ユーザーを削除するには:

  1. DROP USER 'username'@'localhost';

MySQLユーザーを作成し、それらに特権を付与した後、MySQLクライアントを終了できます。

  1. exit

将来、新しいMySQLユーザーとしてログインするには、次のようなコマンドを使用します。

  1. mysql -u sammy -p

The -p フラグを設定すると、MySQLクライアントは認証のためにMySQLユーザーのパスワードの入力を求められます。

結論

このチュートリアルに従うことで、新しいユーザーを追加し、MySQLデータベースでさまざまな権限を付与する方法を学びました。 ここから、MySQLユーザーのさまざまな権限設定を引き続き調べて実験することができます。または、より高レベルのMySQL構成について詳しく知りたい場合があります。

MySQLの基本の詳細については、次のチュートリアルを確認してください。