組み込まれた認証を使用してユーザーを管理する

このページでは、Cloud SQL の組み込み認証を有効にして使用する方法について説明します。

概要については、Cloud SQL の組み込みデータベース認証をご覧ください。

ユーザーを作成する前に

  1. Cloud SQL インスタンスを作成する詳細については、インスタンスの作成をご覧ください。
  2. データベースの管理クライアントを使用してユーザーを管理する場合は、次の操作を行います。

    1. クライアントをインスタンスに接続します。外部アプリケーション用の接続オプションをご覧ください。

    2. パスワードを設定して、インスタンスのデフォルト ユーザーを構成します。デフォルト ユーザー アカウントのパスワードを設定するをご覧ください。

デフォルト ユーザー アカウントのパスワードを設定する

新しい Cloud SQL インスタンスを作成する場合、インスタンスに接続するには、デフォルト ユーザー アカウントのパスワードを設定する必要があります。

Cloud SQL for MySQL では、デフォルト ユーザーは root@% です。

Console

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. SQL ナビゲーション メニューから [ユーザー] を選択します。
  4. root ユーザーを検索し、その他の操作メニュー その他アイコン から [パスワードを変更] を選択します。

    パスワードに関する上のリストをご覧ください。これは、インスタンスに対して設定されたパスワード ポリシーから派生したものです。

  5. 覚えやすく強力なパスワードを指定し、[OK] をクリックします。

gcloud

デフォルト ユーザーのパスワードを設定するには、次のように gcloud sql users set-password コマンドを使用します。

コマンドを実行する前に、INSTANCE_NAME をインスタンスの名前に置き換えます。

gcloud sql users set-password root \
--host=% \
--instance=INSTANCE_NAME \
--prompt-for-password

REST v1

デフォルトのユーザー アカウントのパスワードを更新するには、users:update メソッドを指定して PUT リクエストを使用します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID
  • password: ユーザーのパスワード

HTTP メソッドと URL:

PUT https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users?name=root&host=%25

JSON 本文のリクエスト:

{
  "name": "root",
  "password": "password"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:38:41.217Z",
  "startTime": "2020-02-07T22:38:41.217Z",
  "endTime": "2020-02-07T22:38:44.801Z",
  "operationType": "UPDATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

REST v1beta4

デフォルトのユーザー アカウントのパスワードを更新するには、users:update メソッドを指定して PUT リクエストを使用します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID
  • password: ユーザーのパスワード

HTTP メソッドと URL:

PUT https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users?name=root&host=%25

JSON 本文のリクエスト:

{
  "name": "root",
  "password": "password"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:38:41.217Z",
  "startTime": "2020-02-07T22:38:41.217Z",
  "endTime": "2020-02-07T22:38:44.801Z",
  "operationType": "UPDATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

ユーザーを作成する

デフォルトのユーザー アカウントを設定した後、他のユーザーを作成できます。

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. SQL ナビゲーション メニューから [ユーザー] を選択します。
  4. [ユーザー アカウントを追加] をクリックします。

    [ユーザー アカウントをインスタンス instance_name に追加] ページで、ユーザーが組み込みのデータベース メソッド(ユーザー名とパスワード)を使用して認証を行うか、IAM ユーザーとして認証を行うかを選択できます。

  5. [組み込み認証](デフォルト)を選択し、次の情報を追加します。
    • ユーザー名
    • 省略可。パスワード覚えやすく強力なパスワードを指定します。
    • 省略可。ユーザー パスワード ポリシー
    • [ホスト名] セクションのデフォルト値は [すべてのホストを許可] です。つまり、ユーザーは任意の IP アドレスから接続できます。 必要に応じて、[IP アドレスまたはアドレス範囲でホストを制限する] を選択し、[ホスト] セクションに IP アドレスまたはアドレス範囲を入力します。これで、ユーザーは指定した IP アドレスからのみ接続できます。
  6. [Add(追加)] をクリックします。

MySQL 8.0 と Cloud SQL の認証方法を使用するインスタンス上に作成されたユーザーには、cloudsqlsuperuser ロールが自動的に付与されます。このロールに関連付けられている権限は、CREATEROLECREATEDBLOGIN です。

MySQL 5.7 と Cloud SQL の認証方法を使用して作成されたインスタンスには、FILESUPER を除くすべての権限が自動的に付与されます。これらのユーザーの権限を変更する必要がある場合は、mysql クライアントで GRANT コマンドまたは REVOKE コマンドを使用します。

gcloud

ユーザーを作成するには、gcloud sql users create コマンドを使用します。

以下を置き換えます。

  • USER_NAME: ユーザー名。
  • HOST: 特定の IP アドレスまたはアドレス範囲としてのユーザーのホスト名。
  • INSTANCE_NAME: インスタンスの名前。
  • PASSWORD: ユーザーのパスワード。

必要に応じて、ユーザー パスワード ポリシー パラメータを追加します。

gcloud sql users create USER_NAME \
--host=HOST \
--instance=INSTANCE_NAME \
--password=PASSWORD

MySQL 8.0 と Cloud SQL の認証方法を使用するインスタンス上に作成されたユーザーには、cloudsqlsuperuser ロールが自動的に付与されます。このロールに関連付けられている権限は、CREATEROLECREATEDBLOGIN です。

MySQL 5.7 と Cloud SQL の認証方法を使用して作成されたインスタンスには、FILESUPER を除くすべての権限が自動的に付与されます。これらのユーザーの権限を変更する必要がある場合は、mysql クライアントで GRANT コマンドまたは REVOKE コマンドを使用します。

Cloud SQL のユーザー名の長さの上限は、オンプレミス MySQL と同じで、MySQL 8.0 では 32 文字、それ以前のバージョンでは 16 文字です。

Terraform

ユーザーを作成するには、Terraform リソースを使用します。

resource "random_password" "pwd" {
    length = 16
    special = false
}

resource "google_sql_user" "user" {
    name = "user"
    instance = google_sql_database_instance.instance.name
    password = random_password.pwd.result
}

変更を適用する

Google Cloud プロジェクトで Terraform 構成を適用するには、次の手順を行います。

  1. Cloud Shell を起動します。
  2. Terraform 構成を適用する Google Cloud プロジェクトを設定します。
        export GOOGLE_CLOUD_PROJECT=PROJECT_ID
        
  3. ディレクトリを作成し、そのディレクトリ内で新規ファイルを開きます。ファイル名には .tf 拡張子が必要です(例: main.tf)。
        mkdir DIRECTORY && cd DIRECTORY && nano main.tf
        
  4. サンプルを main.tf にコピーします。
  5. 環境に適用するサンプル パラメータを確認し、変更します。
  6. Ctrl-x を押してから、y を押し、変更を保存します。
  7. Terraform を初期化します。
    terraform init
  8. 構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
    terraform plan

    必要に応じて構成を修正します。

  9. 次のコマンドを実行し、プロンプトで「yes」と入力して、Terraform 構成を適用します。
    terraform apply

    Terraform に「Apply complete!」のメッセージが表示されるまで待ちます。

  10. Google Cloud プロジェクトを開いて結果を表示します。Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。

変更を削除する

変更を削除するには、次の手順を行います。

  1. 削除の保護を無効にするには、Terraform 構成ファイルで deletion_protection 引数を false に設定します。
    deletion_protection =  "false"
  2. 次のコマンドを実行し、プロンプトで「yes」と入力して、更新された Terraform 構成を適用します。
    terraform apply
  1. 以前に Terraform 構成で適用されたリソースを削除するには、次のコマンドを実行して、プロンプトに「yes」と入力します。

    terraform destroy

REST v1

ユーザーを作成するには、users:insert メソッドで POST リクエストを使用します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID
  • user-id: ユーザーの ID
  • password: ユーザーのパスワード

必要に応じて、ユーザー パスワード ポリシー パラメータを追加します。

HTTP メソッドと URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users

JSON 本文のリクエスト:

{
  "name": "user-id",
  "password": "password"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:44:16.656Z",
  "startTime": "2020-02-07T22:44:16.686Z",
  "endTime": "2020-02-07T22:44:20.437Z",
  "operationType": "CREATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

MySQL 8.0 と Cloud SQL の認証方法を使用するインスタンス上に作成されたユーザーには、cloudsqlsuperuser ロールが自動的に付与されます。このロールに関連付けられている権限は、CREATEROLECREATEDBLOGIN です。

MySQL 5.7 と Cloud SQL の認証方法を使用して作成されたインスタンスには、FILESUPER を除くすべての権限が自動的に付与されます。これらのユーザーの権限を変更する必要がある場合は、mysql クライアントで GRANT コマンドまたは REVOKE コマンドを使用します。

Cloud SQL のユーザー名の長さの上限は、オンプレミス MySQL と同じで、MySQL 8.0 では 32 文字、それ以前のバージョンでは 16 文字です。

REST v1beta4

ユーザーを作成するには、users:insert メソッドで POST リクエストを使用します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID
  • user-id: ユーザーの ID
  • password: ユーザーのパスワード

必要に応じて、ユーザー パスワード ポリシー パラメータを追加します。

HTTP メソッドと URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users

JSON 本文のリクエスト:

{
  "name": "user-id",
  "password": "password"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:44:16.656Z",
  "startTime": "2020-02-07T22:44:16.686Z",
  "endTime": "2020-02-07T22:44:20.437Z",
  "operationType": "CREATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

MySQL 8.0 と Cloud SQL の認証方法を使用するインスタンス上に作成されたユーザーには、cloudsqlsuperuser ロールが自動的に付与されます。このロールに関連付けられている権限は、CREATEROLECREATEDBLOGIN です。

MySQL 5.7 と Cloud SQL の認証方法を使用して作成されたインスタンスには、FILESUPER を除くすべての権限が自動的に付与されます。これらのユーザーの権限を変更する必要がある場合は、mysql クライアントで GRANT コマンドまたは REVOKE コマンドを使用します。

Cloud SQL のユーザー名の長さの上限は、オンプレミス MySQL と同じで、MySQL 8.0 では 32 文字、それ以前のバージョンでは 16 文字です。

mysql クライアント

  1. ユーザーを作成するには、mysql プロンプトで次の CREATE USER ステートメントを使用します。
      CREATE USER 'USER_NAME'@'%'
         IDENTIFIED BY 'PASSWORD';
      

    必要に応じて、ユーザー パスワード ポリシー パラメータを追加します。

  2. ユーザー テーブルを表示することによって、ユーザーの作成を確認できます。
    SELECT user, host FROM mysql.user;
    
    第 2 世代インスタンスの場合、出力は次の例のようになります。
    +----------+-----------+
    | user     | host      |
    +----------+-----------+
    | root     | %         |
    | newuser  | %         |
    +----------+-----------+
    1 row in set (0.01 sec)
    
  3. GRANT ステートメントでユーザーに権限を付与します。詳細については、MySQL によって提供される権限をご覧ください。
  4. mysql.user テーブルをフラッシュして、変更が反映されていることを確認します。
      FLUSH TABLES mysql.user;
    

ユーザーの一覧表示

Console

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. SQL ナビゲーション メニューから [ユーザー] を選択します。

    このリストには、各ユーザーの User nameHost nameAuthentication のタイプが示されています。

    また、組み込みの認証タイプでは、Password status も示されます。

gcloud

gcloud sql users list コマンドを使用して、このインスタンスのユーザーを一覧表示します。

gcloud sql users list \
--instance=INSTANCE_NAME

このコマンドは、各ユーザーの NameHost、認証 Type を返します。

組み込みの認証タイプの場合、パスワード ポリシーの設定とステータスが返されます。例:

    NAME    HOST    TYPE        PASSWORD_POLICY
    user1           BUILT_IN    {'allowedFailedAttempts': 2,
                                 'enableFailedAttemptsCheck': True,
                                 'passwordExpirationDuration': '7d',
                                 'status': {
                                   'locked': True,
                                   'passwordExpirationTime': '2022-07-01T19:53:45.822742904Z'
                                 }
                                }
   

REST v1

インスタンスに対して定義されているユーザーを一覧表示するには、users:list メソッドで GET リクエストを使用します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID

HTTP メソッドと URL:

GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#usersList",
  "items": [
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "sqlserver",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "user-id-1",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "user-id-2",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      ...
    },
    {
      ...
    }
  ]
}

ユーザー パスワード ポリシーが設定されている場合、レスポンスの items セクションに passwordPolicy セクションが含まれています。以下にサンプルを示します。

  {
  ...
  "passwordValidationUserPolicy" : {
    {
      "enableFailedAttemptsCheck" : true,
      "allowedFailedAttempts" : 8,
      "passwordExpirationDuration" : "7d",
      "enablePasswordVerification" : true
    }
  },
  ...
}
  

REST v1beta4

インスタンスに対して定義されているユーザーを一覧表示するには、users:list メソッドで GET リクエストを使用します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID

HTTP メソッドと URL:

GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#usersList",
  "items": [
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "sqlserver",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "user-id-1",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "user-id-2",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      ...
    },
    {
      ...
    }
  ]
}

ユーザー パスワード ポリシーが設定されている場合、レスポンスの items セクションに passwordPolicy セクションが含まれています。以下にサンプルを示します。

  {
  ...
  "passwordValidationUserPolicy" : {
    {
      "enableFailedAttemptsCheck" : true,
      "allowedFailedAttempts" : 8,
      "passwordExpirationDuration" : "7d",
      "enablePasswordVerification" : true
    }
  },
  ...
}
  

mysql クライアント

MySQL ユーザーを一覧表示するには、mysql プロンプトで次の SELECT ステートメントを使用します。

SELECT user, host FROM mysql.user;

root ユーザー アカウントのみが構成されている第 2 世代インスタンスの場合、出力は次の例のようになります。

+------+-----------+
| user | host      |
+------+-----------+
| root | %         |
+------+-----------+
1 row in set (0.01 sec)

この例では、ユーザー 'root'@'%' を追加したインスタンスのユーザーが示されています。パスワード フィールドには、パスワードのハッシュが表示されています。

ユーザーのパスワードを変更する

ユーザーのパスワードは次のいずれかの方法で変更できます。

Console

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. SQL ナビゲーション メニューから [ユーザー] を選択します。
  4. 更新するユーザーのその他アイコン その他アイコン をクリックします。
  5. [パスワードを変更] を選択します。
  6. 新しいパスワードを指定します。

    古いパスワードを引き続き使用する場合は、[デュアル パスワードを有効にする] ボタンを選択します。

  7. [OK] をクリックします。

gcloud

gcloud sql users set-password コマンドを使用してパスワードを変更します。

以下を置き換えます。

  • USER_NAME: ユーザー名。
  • HOST: 特定の IP アドレスまたはアドレス範囲としてのユーザーのホスト名。
  • INSTANCE_NAME: インスタンスの名前。
  • PASSWORD: パスワード。パスワード ポリシーの要件を満たしている必要があります(設定している場合)。

MySQL 8.0 では、必要に応じて --retain-password オプションを指定して、古いパスワードの使用を引き続きユーザーに許可できます。古いパスワードを破棄するには、--discard-dual-password オプションを使用します。

gcloud sql users set-password USER_NAME \
--host=HOST \
--instance=INSTANCE_NAME \
--password=PASSWORD

REST v1

ユーザー パスワードを変更するには、users:update メソッドで PUT リクエストを使用します。

次のリクエストでは、ユーザー アカウント user_name'@'% のパスワードを更新します。ユーザーに異なるホストがある場合は、呼び出しを正しいホストに変更する必要があります。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID
  • user-id: ユーザーの ID
  • password: ユーザーのパスワード
  • dual-password: 次のいずれかの列挙値。
    • DUAL_PASSWORD: ユーザーは古いパスワードを引き続き使用できます。
    • NO_DUAL_PASSWORD: ユーザーは古いパスワードを使用できません。
    • NO_MODIFY_DUAL_PASSWORD: デュアル パスワードのステータスは変更されません。

HTTP メソッドと URL:

PUT https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users?name=user-id

JSON 本文のリクエスト:

{
  "name": "user-id",
  "password": "password",
  "retainedPassword" : "dual-password"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:38:41.217Z",
  "startTime": "2020-02-07T22:38:41.217Z",
  "endTime": "2020-02-07T22:38:44.801Z",
  "operationType": "UPDATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

REST v1beta4

ユーザー パスワードを変更するには、users:update メソッドで PUT リクエストを使用します。

次のリクエストでは、ユーザー アカウント user_name'@'% のパスワードを更新します。ユーザーに異なるホストがある場合は、呼び出しを正しいホストに変更する必要があります。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID
  • user-id: ユーザーの ID
  • password: ユーザーのパスワード
  • dual-password: 次のいずれかの列挙値。
    • DUAL_PASSWORD: ユーザーは古いパスワードを引き続き使用できます。
    • NO_DUAL_PASSWORD: ユーザーは古いパスワードを使用できません。
    • NO_MODIFY_DUAL_PASSWORD: デュアル パスワードのステータスは変更されません。

HTTP メソッドと URL:

PUT https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users?name=user-id

JSON 本文のリクエスト:

{
  "name": "user-id",
  "password": "password",
  "retainedPassword" : "dual-password"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:38:41.217Z",
  "startTime": "2020-02-07T22:38:41.217Z",
  "endTime": "2020-02-07T22:38:44.801Z",
  "operationType": "UPDATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

mysql クライアント

  1. パスワードを変更するには、mysql プロンプトで、次の SET PASSWORD ステートメントを使用します。
    SET PASSWORD FOR USER_NAME = PASSWORD('auth_string');
    
  2. mysql.user テーブルをフラッシュして、変更が反映されていることを確認します。
    FLUSH TABLES mysql.user;
    

パスワード ポリシー設定が原因でユーザーがロックアウトされた場合は、パスワードを変更してユーザーをロック解除します。パスワードを変更した場合は、パスワード ポリシーを遵守していることを確認してください。

ユーザー パスワード ポリシーを設定する

組み込み認証タイプを使用してユーザーを作成する間に、パスワード ポリシーを設定できます。

ポリシーを変更または設定できます。

Console

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. SQL ナビゲーション メニューから [ユーザー] を選択します。
  4. ポリシーを変更するユーザーのその他アイコン(その他アイコン)をクリックします。
  5. [パスワード ポリシーを編集] を選択します。
  6. [Password policy] セクションで、次のオプションを 1 つ以上選択します。
    • パスワードの有効期限を設定する: パスワードの有効期限が切れてからユーザーが新しいパスワードを作成するまでの日数を指定します。
    • 試行失敗後のロック: アカウントがロックされるまでに、ユーザーがパスワードの入力を誤って試みた回数を指定します。

      Cloud SQL for MySQL 8.0 でのみサポートされています。

    • パスワードが変更されたときに現在のパスワードを要求する: パスワードを変更するときに、既存のパスワードの入力を求められます。

gcloud

ユーザー パスワード ポリシーを設定するには、gcloud sql users set-password-policy コマンドを使用します。

--password-policy-enable-password-verification を使用して、ユーザーがパスワードを変更するときに既存のパスワードの入力を必須にします。このパラメータを無効にするには、--no-password-policy-enable-password-verification を使用します。

以下を置き換えます。

  • USER_NAME: ユーザー名。
  • INSTANCE_NAME: インスタンスの名前。
  • PASSWORD_POLICY_ALLOWED_FAILED_ATTEMPTS:(省略可)アカウントがロックされるまでにユーザーがパスワードの再試行を試みる回数。チェックを有効にするには --password-policy-enable-failed-attempts-check を使用し、無効にするには --no-password-policy-enable-failed-attempts-check を使用します。
  • PASSWORD_POLICY_PASSWORD_EXPIRATION_DURATION:(省略可)パスワードの有効期限が切れた後、ユーザーが新しいパスワードを作成する必要がある日数を指定します。
gcloud sql users set-password-policy USER_NAME \
--instance=INSTANCE_NAME \
--password-policy-enable-failed-attempts-check \
--password-policy-allowed-failed-attempts=PASSWORD_POLICY_ALLOWED_FAILED_ATTEMPTS \
--password-policy-password-expiration-duration=PASSWORD_POLICY_PASSWORD_EXPIRATION_DURATION \
--password-policy-enable-password-verification

ユーザー パスワード ポリシーを消去するには、--clear-password-policy パラメータを使用します。

gcloud sql users set-password-policy USER_NAME \
--instance=INSTANCE_NAME \
--clear-password-policy

ユーザー パスワード ポリシーを表示するには、List users をご覧ください。

REST v1

ユーザー パスワード ポリシーを設定するには、users:update メソッドで PUT リクエストを使用します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: プロジェクト ID
  • instance-id: インスタンス ID
  • user-id: ユーザーの ID
  • password: ユーザーのパスワード
  • failed-attempts-check: true に設定すると、アカウントがロックされた後にログインに失敗した回数を確認できます。
  • no-of-attempts: ログインに失敗すると、アカウントがロックされます。
  • password-expiration-duration: パスワードの有効期限が切れた後、ユーザーが新しいパスワードを作成する必要がある日数。
  • verify-password: ユーザーがパスワードを変更する際に既存のパスワードの入力を必須にするには、true に設定します。

HTTP メソッドと URL:

PUT https://sqladmin.googleapis.com/sql/v1/projects/project-id/instances/instance-id/users?name=user-id

JSON 本文のリクエスト:

{
  "name": "user-id",
  "password": "password",
  "data":
  {
    "passwordValidationUserPolicy" : {
      {
        "enableFailedAttemptsCheck" : "failed-attempts-check",
        "allowedFailedAttempts" : "no-of-attempts",
        "passwordExpirationDuration" : "password-expiration-duration",
        "enablePasswordVerification" : "verify-password"
      }
    },
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

ユーザー パスワード ポリシーを表示するには、List users をご覧ください。

REST v1beta4

ユーザー パスワード ポリシーを設定するには、users:update メソッドで PUT リクエストを使用します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: プロジェクト ID
  • instance-id: インスタンス ID
  • user-id: ユーザーの ID
  • password: ユーザーのパスワード
  • failed-attempts-check: 省略可。アカウントがロックされた後にログインに失敗した回数のチェックを有効にするには、true に設定します。
  • no-of-attempts: ログインに失敗すると、アカウントがロックされます。
  • password-expiration-duration: パスワードの有効期限が切れた後、ユーザーが新しいパスワードを作成する必要がある日数。
  • verify-password: 省略可。パスワードを変更しようとするとき、既存のパスワードの入力を必須にするには、true に設定します。

HTTP メソッドと URL:

PUT https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users?name=user-id

JSON 本文のリクエスト:

{
  "name": "user-id",
  "password": "password",
  "data":
  {
    "passwordValidationUserPolicy" : {
      {
        "enableFailedAttemptsCheck" : "failed-attempts-check",
        "allowedFailedAttempts" : "no-of-attempts",
        "passwordExpirationDuration" : "password-expiration-duration",
        "enablePasswordVerification" : "verify-password"
      }
    },
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

ユーザー パスワード ポリシーを表示するには、List users をご覧ください。

mysql クライアント

ユーザー パスワード ポリシーを設定するには、mysql プロンプトで、次の ALTER USER ステートメントを使用します。

ALTER USER USER_NAME
    FAILED_LOGIN_ATTEMPTS ALLOWED_FAILED_ATTEMPTS
    PASSWORD EXPIRE INTERVAL PASSWORD_EXPIRATION_DURATION DAY
    PASSWORD REQUIRE CURRENT;

以下を置き換えます。

  • USER_NAME: ユーザー名。
  • ALLOWED_FAILED_ATTEMPTS:(省略可)アカウントがロックされるまでにユーザーがパスワードの再試行を試みる回数。
  • PASSWORD_EXPIRATION_DURATION:(省略可)パスワードの有効期限が切れた後、ユーザーが新しいパスワードを作成する必要がある日数を指定します。

PASSWORD REQUIRE CURRENT オプションを使用すると、ユーザーがパスワードを変更するときに既存のパスワードの入力を必須にできます。

ユーザー パスワード ポリシーを表示するには、List users をご覧ください。

ユーザーを削除する

デフォルト ユーザーはユーザーを削除できます。

ユーザーを削除する前に、そのユーザーが所有するすべてのオブジェクトを削除するか、ユーザーの所有権の割り当てを変更して、他のオブジェクトにロールが付与されている権限をすべて取り消す必要があります。

Console

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. SQL ナビゲーション メニューから [ユーザー] を選択します。
  4. 削除するユーザーのその他アイコン(その他アイコン)をクリックします。
  5. [削除] を選択して、もう一度 [削除] を選択します。

gcloud

gcloud sql users delete コマンドを使用して、ユーザーを削除します。

以下を置き換えます。

  • USER_NAME: ユーザー名。
  • HOST: 特定の IP アドレスまたはアドレス範囲としてのユーザーのホスト名。
  • INSTANCE_NAME: インスタンスの名前。
gcloud sql users delete USER_NAME \
--host=HOST \
--instance=INSTANCE_NAME

REST v1

以下のリクエストでは、users:delete メソッドを使用して、指定したユーザー アカウントを削除します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID
  • username: ユーザーまたはサービス アカウントのメールアドレス

HTTP メソッドと URL:

DELETE https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/users?host=&name=username

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:38:41.217Z",
  "startTime": "2020-02-07T22:38:41.217Z",
  "endTime": "2020-02-07T22:38:44.801Z",
  "operationType": "DELETE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

REST v1beta4

以下のリクエストでは、users:delete メソッドを使用して、指定したユーザー アカウントを削除します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID
  • username: ユーザーまたはサービス アカウントのメールアドレス

HTTP メソッドと URL:

DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users?host=&name=username

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:38:41.217Z",
  "startTime": "2020-02-07T22:38:41.217Z",
  "endTime": "2020-02-07T22:38:44.801Z",
  "operationType": "DELETE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

mysql クライアント

  1. ユーザーを削除するには、mysql プロンプトで次の DROP USER ステートメントを使用します。
    DROP USER 'USER_NAME'@'HOST_NAME';
    
  2. mysql.user テーブルをフラッシュして、変更が反映されていることを確認します。
    FLUSH TABLES mysql.user;
    

ユーザー プロパティを更新する

ホストや権限などのユーザー プロパティを更新するには、mysql クライアントを使用する必要があります。詳細については、MySQL のドキュメントの MySQL ユーザー アカウント管理をご覧ください。

次のステップ