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. ナビゲーション メニューから [ユーザー] を選択します。
  4. postgres ユーザーを検索し、その他の操作メニュー その他アイコン から [パスワードを変更] を選択します。
  5. 覚えやすく強力なパスワードを指定し、[OK] をクリックします。

gcloud

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

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

REST v1beta4

次のリクエストでは、users:update メソッドを使用して、root ユーザー アカウント

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

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

HTTP メソッドと URL:

PUT https://www.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://www.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://www.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

ユーザーの作成

ユーザーを作成するには:

Console

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

    [Cloud SQL インスタンス] ページに移動

  2. インスタンスを選択して [概要] ページを開きます。
  3. ナビゲーション メニューから [ユーザー] を選択します。
  4. [ユーザーを追加] をクリックします。
  5. [ユーザー アカウントをインスタンス instance_name に追加] ページで、[PostgreSQL] ラジオボタンをクリックします。
  6. 以下の情報を追加します。
    • ユーザー名
    • パスワード
    • ホスト(オプション)

      デフォルトは '%' です。これは、ホストリストが制限されていないことを意味します。IP アドレスまたは IP アドレスの範囲を指定することもできます。この場合、これらのアドレスから接続しているユーザーだけがデータベースにアクセスできます。

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

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 ロールは例外です。

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

REST v1beta4

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

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

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

HTTP メソッドと URL:

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

JSON 本文のリクエスト:

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

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://www.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://www.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

Cloud SQL を使用して作成されたユーザーには、cloudsqlsuperuser 役割と関連付けられている権限(CREATEROLECREATEDBLOGIN)があります。これらのユーザーによって作成されたユーザーは、データベース接続権限を持つことができます。これにより、ユーザーが削除されるのを防ぐことができます。ユーザーの属性を変更する必要がある場合は、psql クライアントで ALTER ROLE コマンドを使用します。ALTER ROLE で変更できない属性もあります。ただし、NOSUPERUSER ロールと NOREPLICATION ロールは例外です。

ユーザー名の長さの上限は、オンプレミス 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. ナビゲーション メニューから [ユーザー] を選択します。
  4. 更新するユーザーのその他アイコン その他アイコン をクリックします。
  5. [パスワードを変更] を選択し、新しいパスワードを指定して、[OK] をクリックします。

gcloud

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

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

REST v1beta4

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

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

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

HTTP メソッドと URL:

PUT https://www.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://www.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://www.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

psql クライアント

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

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

ユーザーの更新

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

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

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

Console

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

    [Cloud SQL インスタンス] ページに移動

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

gcloud

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

gcloud sql users list --instance=[INSTANCE_NAME]

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

REST v1beta4

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

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

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

HTTP メソッドと URL:

GET https://www.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. ナビゲーション メニューから [ユーザー] を選択します。
  4. 削除するユーザーのその他アイコン その他アイコン をクリックします。
  5. [削除] を選択し、[OK] をクリックします。

gcloud

ユーザーを削除します。

gcloud sql users delete [USER_NAME] --instance=[INSTANCE_NAME]

REST v1beta4

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

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

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

HTTP メソッドと URL:

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

JSON 本文のリクエスト:

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

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://www.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://www.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

psql クライアント

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

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

次のステップ