关于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作为密码加密机制,因此不清楚该命令的作用,有两个疑问:
- 单引号内的字符串是否被设置为密码?若不是,它是什么?
- 如何以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
相关产品推荐
相关产品推荐

