序章
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ユーザー:
sudo mysql
注: root MySQLユーザーがパスワードで認証するように構成されている場合、MySQLシェルにアクセスするには別のコマンドを使用する必要があります。 以下は、通常のユーザー権限でMySQLクライアントを実行し、正しいパスワードで認証することによってのみデータベース内の管理者権限を取得します。
mysql -u root -p
MySQLプロンプトにアクセスできるようになったら、CREATE USER
ステートメントを使用して新しいユーザーを作成できます。 これらは、次の一般的な構文に従います。
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
を選択した強力なパスワードに変更してください。
CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
注:PHPの一部のバージョンには、caching_sha2_password
で問題を引き起こす既知の問題があります。 このデータベースをPHPアプリケーション(たとえば、phpMyAdmin)で使用する場合は、代わりに、古いmysql_native_password
プラグインで認証するユーザーを作成することをお勧めします。
CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
よくわからない場合は、次のコマンドを使用して、caching_sha2_plugin
で認証し、後でALTER
で認証するユーザーをいつでも作成できます。
ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
新しいユーザーを作成したら、適切な権限をユーザーに付与できます。
ユーザー権限の付与
ユーザー権限を付与するための一般的な構文は次のとおりです。
GRANT PRIVILEGE ON database.table TO 'username'@'host';
この構文例のPRIVILEGE
値は、指定されたdatabase
およびtable
に対してユーザーが実行できるアクションを定義します。 それぞれをコンマで区切ることにより、1つのコマンドで同じユーザーに複数の特権を付与できます。 データベース名とテーブル名の代わりにアスタリスク(*
)を入力して、ユーザー特権をグローバルに付与することもできます。 SQLでは、アスタリスクは「すべての」データベースまたはテーブルを表すために使用される特殊文字です。
説明のために、次のコマンドは、CREATE
、ALTER
、およびDROP
データベース、テーブル、およびユーザーにグローバル特権を付与し、[に権限を付与します。サーバー上の任意のテーブルからのX166X]、UPDATE
、およびDELETE
データ。 また、SELECT
を使用してデータをクエリし、REFERENCES
キーワードを使用して外部キーを作成し、RELOAD
特権を使用してFLUSH
操作を実行する機能をユーザーに付与します。 ただし、ユーザーに必要な権限のみを付与する必要があるため、必要に応じてユーザーの権限を自由に調整してください。
使用可能な特権の完全なリストは、公式のMySQLドキュメントにあります。
このGRANT
ステートメントを実行し、sammy
を独自のMySQLユーザー名に置き換えて、ユーザーに次の特権を付与します。
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ユーザーの特権に類似した幅広いスーパーユーザー特権が提供されます。
GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
このMySQLユーザーにアクセスできる人は誰でもサーバー上のすべてのデータベースを完全に制御できるため、このような幅広い特権を軽く付与しないでください。
多くのガイドは、CREATE USER
またはGRANT
ステートメントの直後にFLUSH PRIVILEGES
コマンドを実行して、許可テーブルを再ロードし、新しい特権が有効になるようにすることを提案しています。
FLUSH PRIVILEGES;
ただし、の公式MySQLドキュメントによると、GRANT
のようなアカウント管理ステートメントを使用して許可テーブルを間接的に変更すると、データベースは許可テーブルをすぐにメモリに再ロードします。この場合、X246X]コマンドは必要ありません。 一方、実行してもシステムに悪影響はありません。
権限を取り消す必要がある場合、構造は権限を付与するのとほぼ同じです。
REVOKE type_of_permission ON database_name.table_name FROM 'username'@'host';
権限を取り消す場合、構文では、権限を付与するときに使用したTO
ではなく、FROM
を使用する必要があることに注意してください。
SHOW GRANTS
コマンドを実行すると、ユーザーの現在の権限を確認できます。
SHOW GRANTS FOR 'username'@'host';
DROP
でデータベースを削除できるのと同じように、DROP
を使用してユーザーを削除できます。
DROP USER 'username'@'localhost';
MySQLユーザーを作成し、それらに特権を付与した後、MySQLクライアントを終了できます。
exit
将来、新しいMySQLユーザーとしてログインするには、次のようなコマンドを使用します。
mysql -u sammy -p
-p
フラグを使用すると、MySQLクライアントは認証のためにMySQLユーザーのパスワードの入力を求められます。
結論
このチュートリアルに従うことで、新しいユーザーを追加し、MySQLデータベースでさまざまな権限を付与する方法を学びました。 ここから、MySQLユーザーのさまざまな権限設定を引き続き調べて実験することができます。または、より高レベルのMySQL構成について詳しく知りたい場合があります。
MySQLの基本の詳細については、次のチュートリアルを確認してください。