You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于GCP Cloud SQL PostgreSQL中SCRAM-SHA-256命令及登录的疑问

Cloud SQL PostgreSQL CREATE ROLE命令解析及登录问题解答

我在GCP的Cloud SQL上运行着一个PostgreSQL实例,通过另一台机器的psql客户端连接正常。但想了解以下命令的作用:

CREATE ROLE temprole NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN
NOREPLICATION NOBYPASSRLS PASSWORD
'SCRAM-SHA-256$4096:H45+UIZiJUcEXrB9SHlv5Q==$I0mc87UotsrnezRKv9Ijqn/zjWMGPVdy1zHPARAGfVs=:nSjwT9LGDmAsMo+GqbmC2X/9LMgowTQBjUQsl45gZzA=';

已知Cloud SQL默认使用SCRAM-SHA-256作为密码加密机制,因此不清楚该命令的作用,有两个疑问:

  1. 单引号内的字符串是否被设置为密码?若不是,它是什么?
  2. 如何以temprole用户登录?是否需要重新设置密码?

命令整体作用

这条命令用于创建名为temprole的PostgreSQL登录角色(即数据库用户),同时配置了一系列权限限制:

  • NOSUPERUSER:无超级用户权限
  • INHERIT:继承所属组角色的权限
  • NOCREATEROLE:不能创建其他角色
  • NOCREATEDB:不能创建新数据库
  • LOGIN:允许通过客户端工具登录数据库
  • NOREPLICATION:无复制操作权限
  • NOBYPASSRLS:无法绕过行级安全策略
  • PASSWORD:指定该角色的认证凭据

疑问1:单引号内的字符串是什么?

这不是明文密码,而是SCRAM-SHA-256算法加密后的密码哈希值。

由于你的Cloud SQL实例默认用SCRAM-SHA-256做密码加密,正常执行CREATE ROLE ... PASSWORD '明文密码'时,PostgreSQL会自动把明文加密成这种格式的哈希值存储。而直接指定哈希值的场景通常是批量导入用户、迁移角色时,避免传输明文密码,直接复用预先计算好的加密凭据。

疑问2:如何登录temprole用户?

不需要重新设置密码,直接使用生成这个哈希值对应的原始明文密码登录即可。

用psql登录的命令示例:

psql "host=<你的Cloud SQL实例IP> port=5432 dbname=<目标数据库名> user=temprole password=<原始明文密码>"

如果遗忘了原始明文密码,才需要重置密码(需用超级用户权限执行):

ALTER ROLE temprole PASSWORD '新的明文密码';

执行后PostgreSQL会自动将新密码加密为SCRAM-SHA-256格式存储。


内容的提问来源于stack exchange,提问作者interstellarPotato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 20:55:30