ここでは、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 つあります。初回はこのアカウントを使用して、データベース インスタンスに接続、管理します。デフォルト ユーザーには、SUPER と FILE を除くすべてのデータベース権限が付与されます。Cloud SQL では、'root'@'%' の名前を変更できません。
root'@'% のデフォルトはパスワードなしで、MySQL で root'@'% のパスワードの使用は必須ではありません。ただし、root'@'% はインストールされているほとんどの MySQL 上に存在するため、root'@'% ユーザーが不正なアクセスの一般的なターゲットとなります。どのようなユーザーやプログラムでもインスタンスにアクセスしてしまえば、アクセス制限を受けることはほとんどなく、インスタンスとデータを制御することが可能となります。このため、強力なパスワードを使用して root'@'% ユーザーを構成するか、このユーザーを削除することをおすすめします。デフォルト ユーザー アカウントの構成については、デフォルト ユーザー アカウントの構成をご覧ください。
システム ユーザー
Cloud SQL は次のシステム ユーザーをサポートしています。
root@localhost、root@127.0.0.1、root@::1マネージド データベース サービスの提供に使用されます。
cloudsqlreplica@%レプリカのレプリケーション ユーザーとして使用されます。
cloudsqlimport@localhost、cloudsqlimport@127.0.0.1データのインポートに使用されます。
cloudsqlexport@localhost、cloudsqlexport@127.0.0.1データのエクスポートに使用されます。
cloudsqloneshot他のデータベース オペレーションに使用されます。
cloudsqlapplier@localhost外部サーバー レプリカのレプリケーション オペレーション、またはクロス メジャー バージョン レプリケーションに使用されます。
cloudsqlobservabilityadminデータベースのオブザーバビリティに使用されます。
cloudiamgroup@'%'IAM グループ認証に使用されます。
cloudsqlreadonlyシステム テーブルでの読み取り専用オペレーションの実行に使用されます。
これらのユーザーの削除や変更はできません。
他の 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 ロールです。このロールは、SUPER と FILE を除く、すべての MySQL 静的権限をユーザーに付与します。
cloudsqlsuperuser ロールでは、MySQL 8.0 マイナー バージョンに基づいて、次の動的権限のみがサポートされます。
MySQL 8.0.18
MySQL 8.0.26
MySQL 8.0.27
MySQL 8.0.28
APPLICATION_PASSWORD_ADMINCONNECTION_ADMINROLE_ADMINSET_USER_IDXA_RECOVER_ADMINCLOUDSQL_SPECIAL_VARIABLES_ADMINFLUSH_OPTIMIZER_COSTSFLUSH_STATUSFLUSH_TABLESFLUSH_USER_RESOURCESINNODB_REDO_LOG_ENABLESHOW_ROUTINEAUTHENTICATION_POLICY_ADMINGROUP_REPLICATION_STREAMPASSWORDLESS_USER_ADMINAUDIT_ABORT_EXEMPT
MySQL 8.0.29(非推奨)
APPLICATION_PASSWORD_ADMINCONNECTION_ADMINROLE_ADMINSET_USER_IDXA_RECOVER_ADMINCLOUDSQL_SPECIAL_VARIABLES_ADMINFLUSH_OPTIMIZER_COSTSFLUSH_STATUSFLUSH_TABLESFLUSH_USER_RESOURCESINNODB_REDO_LOG_ENABLESHOW_ROUTINEAUTHENTICATION_POLICY_ADMINGROUP_REPLICATION_STREAMPASSWORDLESS_USER_ADMINAUDIT_ABORT_EXEMPTSENSITIVE_VARIABLES_OBSERVER
MySQL 8.0.30 以降
APPLICATION_PASSWORD_ADMINCONNECTION_ADMINROLE_ADMINSET_USER_IDXA_RECOVER_ADMINCLOUDSQL_SPECIAL_VARIABLES_ADMINFLUSH_OPTIMIZER_COSTSFLUSH_STATUSFLUSH_TABLESFLUSH_USER_RESOURCESINNODB_REDO_LOG_ENABLESHOW_ROUTINEAUTHENTICATION_POLICY_ADMINGROUP_REPLICATION_STREAMPASSWORDLESS_USER_ADMINAUDIT_ABORT_EXEMPTSENSITIVE_VARIABLES_OBSERVERFIREWALL_EXEMPT
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 との違いがいくつかあります。
SET_USER_ID権限を削除し、新しく導入されたALLOW_NONEXISTENT_DEFINER権限とSET_ANY_DEFINER権限に置き換えます。RELOAD権限のサブセットとしてFLUSH_PRIVILEGESを付与します。この付与はRELOAD権限に代わるものではありません。下位互換性を確保するために、RELOAD権限は引き続き付与されます。- 新しい
OPTIMIZE_LOCAL_TABLE権限を付与します。
また、Cloud SQL for MySQL 8.4 では、MySQL 8.4 で導入された TRANSACTION_GTID_TAG 権限または TELEMETRY_LOG_ADMIN 権限は付与されません。
次のステップ
- インスタンスの
rootユーザー アカウントを構成する。 - ユーザーを作成して管理する。
- データベースを作成して管理します。
- MySQL のユーザーについて MySQL のドキュメントを参照する。
- MySQL によって提供される権限についての MySQL ドキュメントを参照する。
- インスタンスへの接続オプションについて学習する。