创建和管理 PostgreSQL 用户

本页面介绍了如何对 Cloud SQL 实例执行以下操作:

  • 配置默认用户帐号。
  • 创建、删除和更新其他用户帐号。

如需了解用户如何使用 Cloud SQL,请参阅 PostgreSQL 用户

准备工作

在完成以下任务之前,请先创建一个 Cloud SQL 实例。如需了解详情,请参阅创建实例

如果您计划使用数据库的管理客户端来管理用户,必须已在实例上配置默认用户。如需了解详情,请参阅配置默认帐号

此外,您必须已配置一个与您的实例相连的管理客户端。如需了解详情,请参阅外部应用连接方案

配置默认用户帐号

创建新的 Cloud SQL 实例时,您必须首先配置默认用户帐号,之后才能连接到该实例。

对于 Cloud SQL for PostgreSQL,默认用户为 postgres

配置默认用户的方法如下:

控制台

  1. 在 Google Cloud Console 中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 点击实例名称,打开其概览页面。
  3. 从 SQL 导航菜单中选择用户
  4. 找到 postgres 用户,然后从“更多操作”菜单 “更多操作”图标。 中选择更改密码
  5. 输入一个您能记住且安全系数高的密码,然后点击确定

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 方法和网址:

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 方法更新根用户帐号

在使用任何请求数据之前,请先进行以下替换:

  • project-id:您的项目 ID
  • instance-id:所需的实例 ID
  • user-id:用户的 ID
  • password:用户的密码

HTTP 方法和网址:

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

创建用户

控制台

  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 进行修改。NOSUPERUSERNOREPLICATION 角色属于例外情况。

gcloud

创建用户:

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

在使用 Cloud SQL 的身份验证方法的实例上创建的用户会自动获得 cloudsqlsuperuser 角色,并具有与此角色关联的以下权限:CREATEROLECREATEDBLOGIN

如果您需要更改这些用户的属性,请在 psql 客户端中使用 ALTER ROLE 命令。并非所有属性都可以使用 ALTER ROLE 进行修改。NOSUPERUSERNOREPLICATION 角色属于例外情况。

Cloud SQL 和本地 PostgreSQL 的用户名长度限制一样。

REST v1

以下请求使用 users:insert 方法创建用户帐号“user_name”。

在使用任何请求数据之前,请先进行以下替换:

  • project-id:您的项目 ID
  • instance-id:所需的实例 ID
  • user-id:用户的 ID
  • password:用户的密码

HTTP 方法和网址:

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 进行修改。NOSUPERUSERNOREPLICATION 角色属于例外情况。

Cloud SQL 和本地 PostgreSQL 的用户名长度限制一样。

REST v1beta4

以下请求使用 users:insert 方法创建用户帐号“user_name”。

在使用任何请求数据之前,请先进行以下替换:

  • project-id:您的项目 ID
  • instance-id:所需的实例 ID
  • user-id:用户的 ID
  • password:用户的密码

HTTP 方法和网址:

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 进行修改。NOSUPERUSERNOREPLICATION 角色属于例外情况。

Cloud SQL 和本地 PostgreSQL 的用户名长度限制一样。

psql 客户端

  1. psql 提示符处,运行如下命令来创建用户:
      CREATE USER USER_NAME
          WITH ATTRIBUTE1 ATTRIBUTE2...;
          \password USER_NAME;
      

    出现提示时,请输入密码。

    如需详细了解角色属性,请参阅 PostgreSQL 文档

  2. 您可以通过显示用户表来确认创建用户:
      SELECT * FROM pg_roles;
      

更改用户密码

如需更改用户密码,请按如下所述操作

控制台

  1. 在 Google Cloud Console 中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 点击实例名称,打开其概览页面。
  3. 从 SQL 导航菜单中选择用户
  4. 点击要更新的用户对应的“更多操作”菜单 “更多操作”图标。
  5. 选择更改密码,指定新密码,然后点击确定

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 方法和网址:

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 方法和网址:

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;
    

    出现提示时,请输入密码。

更新用户

如需更新特性 (attribute) 等用户属性 (property),您必须使用 psql 客户端。 如需了解详情,请参阅 PostgreSQL 文档中的数据库角色

列出用户

如需列出用户,请按如下所述操作

控制台

  1. 在 Google Cloud Console 中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 点击实例名称,打开其概览页面。
  3. 从 SQL 导航菜单中选择用户

    Authentication 列会显示用户是 IAM user 还是使用内置身份验证。

gcloud

列出此实例的用户:

gcloud sql users list \
--instance=INSTANCE_NAME

该命令会针对每位用户返回 NameHost 和身份验证 Type(作为 BUILT_INCLOUD_IAM_USER)。

如需查看此命令的完整参数列表,请参阅 gcloud sql users list 参考页面

REST v1

以下请求使用 users:list 方法列出为实例定义的用户。

在使用任何请求数据之前,请先进行以下替换:

  • project-id:您的项目 ID
  • instance-id:所需的实例 ID

HTTP 方法和网址:

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 方法和网址:

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;

删除用户

如需删除用户,请按如下所述操作

在删除用户之前,您必须先放弃该用户拥有的所有对象或重新分配其所有权,并撤消该角色对其他对象拥有的任何特权。

控制台

  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
  • user-id:用户的 ID

HTTP 方法和网址:

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

请求 JSON 正文:

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

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 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
  • user-id:用户的 ID

HTTP 方法和网址:

DELETE https://sqladmin.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://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 文档

后续步骤