MySQL ユーザーについて

ここでは、Cloud SQL による MySQL ユーザーの処理方法について説明します。MySQL ユーザー アカウントは、セキュリティを確保できるように MySQL データベースへのアクセスを制御することを目的としたものです。

MySQL ユーザーについて詳しくは、MySQL のドキュメントをご覧ください。Cloud SQL ユーザーの作成と管理について詳しくは、ユーザーを作成して管理するをご覧ください。

MySQL ユーザー アカウントが必要な理由

MySQL ユーザー アカウントを使用することで、Cloud SQL インスタンスにログインして管理できます。ユーザー アカウントは、アプリケーションがインスタンスにアクセスするためにも必要です。

スーパーユーザーの制限

Cloud SQL では、スーパーユーザー属性を持つユーザーの作成や、そのようなユーザーへのアクセスはできません。

Cloud SQL for MySQL はマネージド サービスであるため、特定のシステム プロシージャやテーブルへのアクセスを制限します。

データ操作言語(DML)とデータ定義言語(DDL)の権限は、一部のスキーマ テーブルで制限されています。

書き込み権限を必要とする mysql スキーマの MySQL 5.6 システム テーブルは、audit_log_rules_expandedaudit_log_supported_opsaudit_log_rulescloudsql_replica_indexdbeventfuncheartbeatpluginprocusertables_priv です。

MySQL 5.7 の場合は、audit_log_rules_expandedaudit_log_supported_opsaudit_log_rulescloudsql_replica_indexdbeventfuncgtid_executedheartbeatpluginprocusertables_priv です。

MySQL 8.0 についての関連情報は、MySQL 8.0 のユーザー権限(cloudsqlsuperuser)をご覧ください。

MySQL ユーザー アカウントの形式

MySQL ユーザー アカウントは、ユーザー名とホスト名という 2 つのコンポーネントで構成されます。ユーザー名はユーザーを示し、ホスト名はユーザーが接続に使用できるホストを示します。ユーザー名とホスト名の組み合わせによってユーザー アカウントが作成されます。

'<user_name>'@'<host_name>'

ホスト名には特定の IP アドレスやアドレス範囲を指定できるほか、パーセント文字(%)を使用することによりホスト名が限定されないようにすることも可能です。ただし、ユーザーのホスト名が限定されていなくても、IP アドレスを使用してインスタンスに接続する場合は、クライアントの IP アドレスを承認済みアドレスとして追加する必要があります。

ユーザー アカウントはユーザー名とホスト名との組み合わせによって定義されることに注意してください。たとえば、'user'@'%''user'@'localhost' とは異なるユーザー アカウントです。

デフォルトの MySQL ユーザー

作成時に、MySQL インスタンスにはデフォルトのユーザー アカウント 'root'@'%' が 1 つあります。このアカウントを使用して、初めてデータベース インスタンスに接続し、管理します。デフォルト ユーザーには、SUPERFILE を除くすべてのデータベース権限が付与されます。Cloud SQL では、'root'@'%' の名前を変更できません。

root'@'% のデフォルトはパスワードではありません。MySQL で root'@'% のパスワードを使用する必要はありません。ただし、root'@'% はインストールされているほとんどの MySQL 上に存在するため、root'@'% ユーザーが不正なアクセスの一般的なターゲットとなります。どのようなユーザーやプログラムでもインスタンスにアクセスしてしまえば、アクセス制限を受けることはほとんどなく、インスタンスとデータを制御することが可能となります。このため、強力なパスワードを使用して root'@'% ユーザーを構成するか、このユーザーを削除することをおすすめします。デフォルト ユーザー アカウントの構成については、デフォルト ユーザー アカウントの構成をご覧ください。

システム ユーザー

システム ユーザーは 7 名です。

  • root@localhostroot@127.0.0.1root@::1

    マネージド データベース サービスの提供に使用されます。

  • cloudsqlreplica@%

    レプリカのレプリケーション ユーザーとして使用されます。

  • cloudsqlimport@localhost

    データのインポートに使用されます。

  • cloudsqlexport@localhost

    データのエクスポートに使用されます。

  • cloudsqloneshot

    他のデータベース オペレーションに使用されます。

  • cloudsqlapplier@localhost

    外部サーバー レプリカのレプリケーション オペレーション、またはクロス メジャー バージョン レプリケーションに使用されます。

  • cloudsqlobservabilityadmin

    データベースのオブザーバビリティに使用されます。

これらのユーザーの削除や変更はできません。

他の MySQL ユーザー アカウント

他の MySQL ユーザー アカウントを作成することもできます。目的によって MySQL ユーザー アカウントを使い分けることができるため、おすすめの方法です。

また、制限されたホスト名でユーザー アカウントを作成するか、SQL コマンドを使用してユーザー アカウントの権限を制限することもできます。

ユーザー アカウント名の詳細については、MySQL のドキュメントをご覧ください。 新しい MySQL ユーザーを作成するには、ユーザーを作成するをご覧ください。

MySQL 5.6 と 5.7 のユーザー権限

MySQL にはきめ細かい権限が用意されており、ユーザーに付与またはユーザーから削除できます。これにより、ユーザーがインスタンスで実行できる操作を制御できます。

Cloud SQL を使用して作成されたユーザーは、デフォルトの MySQL ユーザーと同じ権限を持ちます。これらのユーザーの権限は、GRANT または REVOKE ステートメントを使用して変更できます。

mysql クライアントを使用してユーザーを作成する場合は、GRANT ステートメントを使用して、権限を明示的にそのユーザーに付与する必要があります。

MySQL によってサポートされる権限の詳細については、MySQL によって提供される権限をご覧ください。

MySQL 8.0 のユーザー権限(cloudsqlsuperuser

MySQL 8.0 をサポートする Cloud SQL では、新しいユーザーを作成すると、自動的に cloudsqlsuperuser ロールが付与されます。cloudsqlsuperuser ロールは、数多くの MySQL 権限が含まれる Cloud SQL ロールです。このロールは、SUPERFILE を除く、すべての MySQL 静的権限をユーザーに付与します。

cloudsqlsuperuser ロールでは、MySQL 8.0 マイナー バージョンに基づいて、次の動的権限のみがサポートされます。

MySQL 8.0.18

MySQL 8.0.26

MySQL 8.0.27

MySQL 8.0.28

MySQL 8.0.29(非推奨)

MySQL 8.0.30 以降

cloudsqlsuperuser ロールでは、mysql システム データベースでのデータ定義言語(DDL)オペレーションはサポートされません。

cloudsqlsuperuser ロールに付与されている権限の完全なリストを表示するには、mysql クライアントで SHOW GRANTS ステートメントを実行します。

SHOW GRANTS FOR 'cloudsqlsuperuser'

次のステップ