ここでは、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_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.0 のユーザー権限(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
、root@127.0.0.1
、root@::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 ロールです。このロールは、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'
次のステップ
- インスタンスの
root
ユーザー アカウントを構成する。 - ユーザーを作成して管理する。
- データベースを作成して管理します。
- MySQL のユーザーについて MySQL のドキュメントを参照する。
- MySQL によって提供される権限についての MySQL ドキュメントを参照する。
- インスタンスへの接続オプションについて学習する。