ここでは、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_expanded
、audit_log_supported_ops
、audit_log_rules
、cloudsql_replica_index
、db
、event
、func
、heartbeat
、plugin
、proc
、user
、tables_priv
です。
MySQL 5.7 の場合は、audit_log_rules_expanded
、audit_log_supported_ops
、audit_log_rules
、cloudsql_replica_index
、db
、event
、func
、gtid_executed
、heartbeat
、plugin
、proc
、user
、tables_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'@'%
ユーザーを構成するか、このユーザーを削除することをおすすめします。デフォルト ユーザー アカウントの構成については、デフォルト ユーザー アカウントの構成をご覧ください。
システム ユーザー
システム ユーザーは 7 名です。
root@localhost
、[email protected]
、root@::1
マネージド データベース サービスの提供に使用されます。
cloudsqlreplica@%
レプリカのレプリケーション ユーザーとして使用されます。
cloudsqlimport@localhost
、[email protected]
データのインポートに使用されます。
cloudsqlexport@localhost
、[email protected]
データのエクスポートに使用されます。
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 ロールです。このロールは、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_ADMIN
CONNECTION_ADMIN
ROLE_ADMIN
SET_USER_ID
XA_RECOVER_ADMIN
CLOUDSQL_SPECIAL_VARIABLES_ADMIN
FLUSH_OPTIMIZER_COSTS
FLUSH_STATUS
FLUSH_TABLES
FLUSH_USER_RESOURCES
INNODB_REDO_LOG_ENABLE
SHOW_ROUTINE
AUTHENTICATION_POLICY_ADMIN
GROUP_REPLICATION_STREAM
PASSWORDLESS_USER_ADMIN
AUDIT_ABORT_EXEMPT
MySQL 8.0.29(非推奨)
APPLICATION_PASSWORD_ADMIN
CONNECTION_ADMIN
ROLE_ADMIN
SET_USER_ID
XA_RECOVER_ADMIN
CLOUDSQL_SPECIAL_VARIABLES_ADMIN
FLUSH_OPTIMIZER_COSTS
FLUSH_STATUS
FLUSH_TABLES
FLUSH_USER_RESOURCES
INNODB_REDO_LOG_ENABLE
SHOW_ROUTINE
AUTHENTICATION_POLICY_ADMIN
GROUP_REPLICATION_STREAM
PASSWORDLESS_USER_ADMIN
AUDIT_ABORT_EXEMPT
SENSITIVE_VARIABLES_OBSERVER
MySQL 8.0.30 以降
APPLICATION_PASSWORD_ADMIN
CONNECTION_ADMIN
ROLE_ADMIN
SET_USER_ID
XA_RECOVER_ADMIN
CLOUDSQL_SPECIAL_VARIABLES_ADMIN
FLUSH_OPTIMIZER_COSTS
FLUSH_STATUS
FLUSH_TABLES
FLUSH_USER_RESOURCES
INNODB_REDO_LOG_ENABLE
SHOW_ROUTINE
AUTHENTICATION_POLICY_ADMIN
GROUP_REPLICATION_STREAM
PASSWORDLESS_USER_ADMIN
AUDIT_ABORT_EXEMPT
SENSITIVE_VARIABLES_OBSERVER
FIREWALL_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 ドキュメントを参照する。
- インスタンスへの接続オプションについて学習する。