创建和管理 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. 从导航菜单中选择用户
  4. 找到 postgres 用户,然后从“更多操作”菜单 “更多操作”图标。 中选择更改密码
  5. 输入一个您能记住且安全系数高的密码,然后点击确定

gcloud

为默认用户设置密码:

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

REST

以下请求使用 users:update 方法更新 postgres 用户。

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{"name": "postgres", "password": "[PASSWORD]"}' \
     -X PUT \
     'https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/users?name=postgres&'

创建用户

如需创建用户,请按如下所述操作

控制台

  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 进行修改。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

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

gcloud auth application-default login
ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{"name": "[USER_NAME]", "password": "[PASSWORD]"}' \
     -X POST \
     https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/users

使用 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. 从导航菜单中选择用户
  4. 点击要更新的用户对应的“更多操作”菜单 “更多操作”图标。
  5. 选择更改密码,指定新密码,然后点击确定

gcloud

更新密码:

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

REST

以下请求使用 users:update 方法更新用户帐号“user_name”的密码。

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{"name": "[USER_NAME]", "password": "[PASSWORD]"}' \
     -X PUT \
     'https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/users?name=[USER_NAME]'

psql 客户端

  1. psql 提示符处,运行如下命令来更改密码:
    \password [USER];
    

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

更新用户

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

列出用户

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

控制台

  1. 转到 Google Cloud Console 中的“Cloud SQL 实例”页面。

    转到“Cloud SQL 实例”页面

  2. 选择实例以打开其“概览”页面。
  3. 从导航菜单中选择用户

gcloud

列出此实例的用户:

gcloud sql users list --instance=[INSTANCE_NAME]

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

REST

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

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     -X GET \
     https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/users

psql 客户端

psql 提示符处,运行以下命令以列出 PostgreSQL 用户:

SELECT * FROM pg_roles;

删除用户

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

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

控制台

  1. 转到 Google Cloud Console 中的“Cloud SQL 实例”页面。

    转到“Cloud SQL 实例”页面

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

gcloud

删除用户:

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

REST

以下请求使用 users:delete 方法删除指定的用户帐号。

gcloud auth application-default login
ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{"name": "[USER_NAME]", "host": ""}' \
     -X DELETE \
     'https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/users?host=&name=[USER_NAME]'

psql 客户端

  1. psql 提示符处,运行如下命令来删除用户:
    DROP ROLE [USER_NAME];
    

    如需详细了解 DROP ROLE 语句,请参阅 PostgreSQL 文档

后续步骤