管理用户、角色和权限
PostgreSQL 使用角色系统来管理数据库许可权。 角色用于为单个用户或一组用户提供一组特权。 使用 psql
命令 \du
确定部署中的角色,组和特权。
在 IBM Cloud中供应新部署时,系统会自动为您提供 admin
用户以访问和管理 PostgreSQL。
admin
用户
在 IBM Cloud中供应新部署时,系统会自动为您提供 admin
用户以访问和管理 PostgreSQL。 设置管理密码 后,请使用该密码来连接到部署。
当 admin
在数据库中创建资源 (如表) 时,admin
拥有该对象。 admin
创建的资源不可供其他用户访问,除非您明确授予这些用户许可权。
admin
用户与添加到部署的任何其他用户之间的最大差异是 pg_monitor
和 pg_signal_backend
角色。 pg_monitor
角色提供了一组许可权,这些许可权使管理用户适合于监视数据库服务器。 pg_signal_backend
角色使管理用户能够发送信号以取消由其他用户启动的查询和连接。 它无法向超级用户拥有的进程发送信号。
您还可以使用 admin
用户将这两个角色授予部署上的其他用户。
要向其他数据库用户公开取消查询的功能,请向 admin
用户授予 pg_signal_backend
角色。 使用类似如下的命令:
GRANT pg_signal_backend TO joe;
要允许用户 joe
取消后端,请使用如下命令将 pg_signal_backend
授予具有 ibm-cloud-base-user
角色的所有用户:
GRANT pg_signal_backend TO "ibm-cloud-base-user";
此特权允许用户终止与数据库的任何连接。
要设置特定监视用户 mary
,请使用类似如下的命令:
GRANT pg_monitor TO mary;
使用如下命令将 pg_signal_backend
授予具有 ibm-cloud-base-user
角色的所有用户:
GRANT pg_monitor TO "ibm-cloud-base-user";
在用户界面中设置管理员密码
IBM Cloud控制面板的资源列表中选择您的实例,通过用户界面设置管理员密码。 然后,选择 设置。 接下来,在更改数据库管理员密码部分键入一个新密码,然后单击更改密码。
在 CLI 中设置管理员密码
使用 Cloud Databases CLI 插件 中的 cdb user-password
命令来设置 admin
密码。
例如,要设置名为 example-deployment
的部署的管理密码,请使用以下命令:
ibmcloud cdb user-password example-deployment admin <NEW_PASSWORD>
在应用程序接口中设置管理员密码
在服务的“概览”面板部署详细信息部分显示的基础端点提供了通过 API 访问此部署的基础 URL。 将其与 Set specified user 's password 端点配合使用以设置管理密码。
curl -X PATCH `https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/users/admin` \
-H `Authorization: Bearer <>` \
-H `Content-Type: application/json` \
-d `{"password":"newrootpasswordsupersecure21"}` \
服务证书 用户
通过 _服务证书_面板 创建的用户是 ibm-cloud-base-user
的成员。 他们能够登录,创建用户和创建数据库。
当组中的用户在数据库 (如表) 中创建资源时,同一组中的所有用户都有权访问该资源。 ibm-cloud-base-user
中的任何用户创建的资源可供 ibm-cloud-base-user
中的其他用户 (包括管理用户) 访问。
通过 CLI 创建的用户
通过 Cloud Databases CLI 插件 创建的用户也是 ibm-cloud-base-user
的成员。 他们能够登录,创建用户和创建数据库。
当用户在数据库 (如表) 中创建资源时,同一组中的所有用户都有权访问该资源。 由 ibm-cloud-base-user
中的任何用户创建的资源可供 ibm-cloud-base-user
中的其他用户 (包括 admin
用户) 访问。
直接从 API 和 CLI 创建的用户不会显示在 _服务凭证_中,但您可以 添加 (如果选择)。
通过 API 创建的用户
您通过 Cloud Databases API 创建的用户也是 ibm-cloud-base-user
的成员。 他们能够登录,创建用户和创建数据库。
当用户在数据库 (如表) 中创建资源时,同一组中的所有用户都有权访问该资源。 ibm-cloud-base-user
中的任何用户创建的资源可供 ibm-cloud-base-user
中的其他用户 (包括管理用户) 访问。
直接从 API 和 CLI 创建的用户不会显示在 _服务凭证_中,但您可以 添加 (如果选择)。
只读用户
ibm-cloud-base-user-ro
管理为访问只读副本而创建的用户的特权。 有关详细信息,请参阅 配置只读副本。
repl
用户
repl
用户具有“复制”特权,如果您在部署上启用 wal2json
插件,那么将使用该用户。 启用 wal2json
时,请设置 repl
用户的密码,这将允许 wal2json
插件使用该密码。
其他 ibm
用户
如果使用 admin
帐户运行 \du
命令,那么可能会注意到名为 ibm
,ibm-cloud-base-user
,ibm-replication
和 ibm-rewind
的用户。
ibm-cloud-base-user
用作模板,用于管理其他用户的组角色。 它用于管理通过 CLI 和 API 创建的用户,以及启用与 IBM Cloud上的 服务凭证 用户创建的集成。 作为 ibm-cloud-base-user
成员的用户从 ibm-cloud-base-user
继承创建角色并创建数据库属性。 ibm-cloud-base-user
无法登录。
ibm
帐户是部署上的唯一超级用户。 超级用户帐户不可供您使用。 此用户是用于管理部署稳定性的内部管理帐户。
使用 psql
创建的用户
您可以完全绕过通过 IBM Cloud 创建用户,并使用 psql
直接在 PostgreSQL 中创建用户。 这样,您就可以使用 PostgreSQL's本地 角色和用户管理。 在 psql
中创建的用户/角色必须手动设置其所有特权以及对其创建的对象的特权。
直接在 PostgreSQL 中创建的用户不会出现在 _ 服务凭据_中,但您可以选择 添加这些用户。
请注意,即使添加到 服务凭证,这些用户也不会与 IAM 控制集成。
附加用户和连接字符串
对 Databases for PostgreSQL 部署的访问权不限于 admin
用户。 通过 Cloud Databases CLI 插件 或 Cloud Databases API 在用户界面的 Service credentials 中添加用户。
部署上的所有用户都可以使用连接字符串,包括公共或专用端点的连接字符串。
创建用户时,将为其分配某些数据库角色和特权。 这些特权包括登录,创建数据库和创建其他用户的能力。
在用户界面中创建用户
- 转到您服务的服务仪表板。
- 单击 Service credentials 打开 Service credentials。
- 单击新建凭证。
- 为新证书选择一个描述性名称。
- 可选指定新凭据应使用公共端点还是专用端点。 在添加内联配置参数字段中使用
{ "service-endpoints": "public" }
/{ "service-endpoints": "private" }
,即可使用指定的端点生成连接字符串。 不强制使用端点,它仅控制连接字符串中的主机名。 默认情况下会生成专用端点。 - 单击“**添加 **”提供新凭证。 PostgreSQL 数据库中的用户名、密码和相关数据库用户会自动生成。
新凭据将显示在表中,连接字符串将以 JSON 格式出现在 _ 查看凭据_下的点击复制字段中。
通过 CLI 创建用户
如果通过 IBM Cloud CLI 和 云数据库插件 管理服务,那么可以使用 cdb user-create
创建新用户。 例如,要为 "example-deployment" 创建新用户,请使用以下命令:
ibmcloud cdb user-create example-deployment <NEW_USER_NAME> <NEW_PASSWORD>
完成该任务后,您可以使用 ibmcloud cdb deployment-connections
命令检索新用户的连接字符串。
从应用程序接口创建用户
在“概览”面板上显示的服务_部署详细信息_中的基础_端点_提供了通过 API 访问此部署的基础 URL。 要创建和管理用户,请使用 /users
端点的基本 URL。
curl -X POST 'https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/users' \
-H "Authorization: Bearer $APIKEY" \
-H "Content-Type: application/json" \
-d '{"username":"jane_smith", "password":"newsupersecurepassword"}'
任务完成后,从 /users/{userid}/connections
端点检索新用户的连接字符串。
将用户添加到 _服务证书_中
从 CLI 或 API 创建新用户不会自动将该用户的连接字符串填充到 _ 服务凭据_中。 要添加这些用户,请使用现有用户信息创建新凭证。
在 JSON 字段 _ 添加内联配置参数_ 中输入用户名和密码,或指定一个存储 JSON 信息的文件。 例如,在字段中输入 {"existing_credentials":{"username":"Robert","password":"supersecure"}}
会生成 服务凭据,并在连接字符串中填写用户名 "Robert
"和密码 "supersecure"。
从现有用户生成凭证不会检查或创建该用户。