PostgreSQL ユーザーの作成、管理

このページでは、Cloud SQL インスタンスに対して次の操作を行う方法について説明します。

  • デフォルトのユーザー アカウントを構成します。
  • 他のユーザー アカウントを作成、削除、更新します。

Cloud SQL でのユーザーの詳細については、PostgreSQL ユーザーをご覧ください。

始める前に

以下のタスクを完了する前に、Cloud SQL インスタンスを作成します。詳細については、インスタンスの作成をご覧ください。

データベースの管理クライアントを使用してユーザーを管理する場合は、インスタンスでデフォルト ユーザーを構成しておく必要があります。詳細については、デフォルトのアカウントの構成をご覧ください。

また、インスタンスに接続された管理クライアントを構成しておく必要があります。詳細については、外部アプリケーションのための接続オプションをご覧ください。

デフォルト ユーザー アカウントの構成

新しい Cloud SQL インスタンスを作成する場合、インスタンスに接続するには、デフォルト ユーザー アカウントを構成しておく必要があります。

Cloud SQL for PostgreSQL の場合、デフォルトのユーザーは postgres です。

デフォルト ユーザーを構成するには:

Console

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

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

  2. インスタンス名をクリックして [概要] ページを開きます。
  3. SQL ナビゲーション メニューから [ユーザー] を選択します。
  4. postgres ユーザーを検索し、その他の操作メニュー その他アイコン から [パスワードを変更] を選択します。
  5. 覚えやすく強力なパスワードを指定し、[OK] をクリックします。

gcloud

デフォルト ユーザーのパスワードを設定します。

gcloud sql users set-password postgres \
--instance=INSTANCE_NAME \
--prompt-for-password

REST v1

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

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID
  • user-id: ユーザーの ID
  • 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"
}

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

次のような 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 メソッドを使用して、root ユーザー アカウントを更新します。

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

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID
  • user-id: ユーザーの ID
  • 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"
}

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

次のような 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"
}

ユーザーの作成

Console

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

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

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

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

    • [組み込み認証](デフォルト)を選択した場合は、次の情報を追加します。
      • ユーザー名
      • パスワード(省略可)
      • [Cloud IAM] を選択した場合は、[メンバー] フィールドに、ユーザーと関連付ける Google Cloud プロジェクトの既存の IAM メンバーのメールアドレスを入力する必要があります。
    • [追加] をクリックします。

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

これらのユーザーの属性を変更する必要がある場合は、psql クライアントで ALTER ROLE コマンドを使用します。ALTER ROLE で変更できない属性もあります。ただし、NOSUPERUSER ロールと NOREPLICATION ロールは例外です。

gcloud

ユーザーを作成します。

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

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

これらのユーザーの属性を変更する必要がある場合は、psql クライアントで ALTER ROLE コマンドを使用します。ALTER ROLE で変更できない属性もあります。ただし、NOSUPERUSER ロールと NOREPLICATION ロールは例外です。

Cloud SQL のユーザー名の長さの上限は、オンプレミス PostgreSQL の場合と同じです。

REST v1

以下のリクエストでは、users:insert メソッドを使用してユーザー アカウント「user_name」を作成します。

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

  • 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"
}

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

これらのユーザーの属性を変更する必要がある場合は、psql クライアントで ALTER ROLE コマンドを使用します。ALTER ROLE で変更できない属性もあります。ただし、NOSUPERUSER ロールと NOREPLICATION ロールは例外です。

Cloud SQL のユーザー名の長さの上限は、オンプレミス PostgreSQL の場合と同じです。

REST v1beta4

以下のリクエストでは、users:insert メソッドを使用してユーザー アカウント「user_name」を作成します。

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

  • 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"
}

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

これらのユーザーの属性を変更する必要がある場合は、psql クライアントで ALTER ROLE コマンドを使用します。ALTER ROLE で変更できない属性もあります。ただし、NOSUPERUSER ロールと NOREPLICATION ロールは例外です。

Cloud SQL のユーザー名の長さの上限は、オンプレミス PostgreSQL の場合と同じです。

psql クライアント

  1. psql プロンプトで、ユーザーを作成します。
      CREATE USER USER_NAME
          WITH ATTRIBUTE1 ATTRIBUTE2...;
          \password USER_NAME;
      

    プロンプトが表示されたら、パスワードを入力します。

    ロールの属性に関する詳細については、PostgreSQL のドキュメントをご覧ください。

  2. ユーザー テーブルを表示することによって、ユーザーの作成を確認できます。
      SELECT * FROM pg_roles;
      

ユーザーのパスワードの変更

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

Console

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

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

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

gcloud

パスワードを更新します。

gcloud sql users set-password USER_NAME \
--instance=INSTANCE_NAME \
--prompt-for-password

REST v1

以下のリクエストでは、users:update メソッドを使用して、ユーザー アカウント(user_name)のパスワードを更新します。

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

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID
  • user-id: ユーザーの ID
  • 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"
}

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

次のような 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 メソッドを使用して、ユーザー アカウント(user_name)のパスワードを更新します。

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

  • project-id: 実際のプロジェクト ID
  • instance-id: 目的のインスタンス ID
  • user-id: ユーザーの ID
  • 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"
}

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

次のような 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"
}

psql クライアント

  1. psql プロンプトで、パスワードを変更します。
    \password USER_NAME;
    

    プロンプトが表示されたら、パスワードを入力します。

ユーザーの更新

属性などのユーザー プロパティを更新するには、psql クライアントを使用する必要があります。詳細については、PostgreSQL ドキュメントのデータベース ロールをご覧ください。

ユーザーの一覧を表示する

ユーザーを一覧表示するには:

Console

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

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

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

    [Authentication] 列には、ユーザーが IAM user であるか、または組み込みの認証を使用しているかが表示されます。

gcloud

このインスタンスのユーザーを一覧表示します。

gcloud sql users list \
--instance=INSTANCE_NAME

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

このコマンドのパラメータの完全なリストについては、gcloud sql users list のリファレンス ページをご覧ください。

REST v1

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

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

  • 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"
        ]
      }
    },
    {
      ...
    },
    {
      ...
    }
  ]
}

REST v1beta4

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

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

  • 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"
        ]
      }
    },
    {
      ...
    },
    {
      ...
    }
  ]
}

psql クライアント

psql プロンプトで、PostgreSQL ユーザーの一覧を表示します。

SELECT * FROM pg_roles;

ユーザーの削除

ユーザーを削除するには:

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

Console

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

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

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

gcloud

ユーザーを削除します。

gcloud sql users delete USER_NAME \
--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"
}

psql クライアント

  1. psql プロンプトで、ユーザーを削除します。
    DROP ROLE USER_NAME;
    

    DROP ROLE ステートメントの詳細については、PostgreSQL のドキュメントをご覧ください。

次のステップ