MySQL ユーザーについて

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

MySQL のユーザーについて詳しくは、MySQL ドキュメントでアクセス制御とアカウント管理をご覧ください。Cloud SQL で 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.4 の関連情報については、MySQL 8.0 のユーザー権限(cloudsqlsuperuser)MySQL 8.4 のユーザー権限(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@localhostcloudsqlimport@127.0.0.1

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

  • cloudsqlexport@localhostcloudsqlexport@127.0.0.1

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

  • cloudsqloneshot

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

  • cloudsqlapplier@localhost

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

  • cloudsqlobservabilityadmin

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

  • cloudiamgroup@'%'

    IAM グループ認証に使用されます。

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

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

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

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

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

MySQL 5.6 と 5.7 のユーザー権限

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

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

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

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

MySQL 8.0 のユーザー権限(cloudsqlsuperuser

Cloud SQL for MySQL 8.0 では、新しいユーザーを作成すると、自動的に 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'

MySQL 8.4 のユーザー権限(cloudsqlsuperuser

Cloud SQL for MySQL 8.0 と同様に、Cloud SQL for MySQL 8.4 では、新しいユーザーを作成すると、自動的に cloudsqlsuperuser ロールが付与されます。

MySQL 8.4 では、cloudsqlsuperuser ロールには MySQL 8.0.x と同じ権限があります。ただし、MySQL 8.4 には MySQL 8.0.x との違いがいくつかあります。

また、Cloud SQL for MySQL 8.4 では、MySQL 8.4 で導入された TRANSACTION_GTID_TAG 権限または TELEMETRY_LOG_ADMIN 権限は付与されません。

次のステップ