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

为何通过Cloud SQL Auth Proxy连接PostgreSQL无需postgres用户密码?

Cloud SQL Auth Proxy连接PostgreSQL无需输入密码的原因及密码缓存排查

一、Auth Proxy免密码的核心原因

Cloud SQL Auth Proxy的认证逻辑和直接连接完全不同:

  • 直接连接Cloud SQL实例时,你是通过公网IP和PostgreSQL原生的账号密码体系认证,必须输入数据库用户的密码才能通过实例的身份校验。
  • 而Auth Proxy是通过Google Cloud身份凭据完成认证的:启动Proxy时,它会读取本地的Application Default Credentials(比如你通过gcloud auth login登录的账号,或者服务账号密钥文件),向Google Cloud验证你是否拥有目标Cloud SQL实例的访问权限(比如cloudsql.client角色)。
  • 一旦Proxy认证通过,它会在本地127.0.0.1:5432建立加密通道,此时通过这个通道连接数据库时,Cloud SQL实例会信任Proxy传递的身份,跳过PostgreSQL的密码校验环节,所以不需要输入密码。

二、密码缓存的可能排查方向

你排除了PGPASSWORD环境变量,那可以从这些地方找原因:

  • PostgreSQL客户端密码配置文件:Windows下路径为%APPDATA%\postgresql\pgpass.conf,文件格式是hostname:port:database:username:password。如果这个文件里存在本地127.0.0.1:5432对应你的数据库账号条目,psql会自动读取密码,无需手动输入。
  • Windows凭据管理器:部分PostgreSQL客户端会将密码存储在系统凭据中,打开「控制面板→用户账户→凭据管理器→Windows凭据」,搜索包含PostgreSQL、127.0.0.1或你的实例名称的条目,看看是否有缓存的密码。
  • 终端会话缓存:如果用的是带会话记忆功能的终端工具(比如Windows Terminal的某些配置),可能会缓存之前输入的密码,但重启终端后会失效,你可以换个干净的终端窗口测试。

附操作及连接示例

直接连接Cloud SQL实例的命令输出

> psql --host=12.34.56.78 --dbname=mydb --username=postgres
Password for user postgres:
psql (17.2)
WARNING: Console code page (850) differs from Windows code page (1252)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off, ALPN: PostgreSQL)
Type "help" for help.

mydb=>

通过Auth Proxy连接的命令输出

> psql --dbname=mydb --username=postgres
psql (17.2)
WARNING: Console code page (850) differs from Windows code page (1252)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
Type "help" for help.

mydb=>

实例创建及Proxy启动命令

> gcloud sql instances create --database-version POSTGRES_17 --tier db-perf-optimized-N-2 test-sql
WARNING: Starting with release 233.0.0, you will need to specify either a region or a zone to create an instance.
Creating Cloud SQL instance for POSTGRES_17...done.
Created [https://sqladmin.googleapis.com/sql/v1beta4/projects/test-gcp-123456/instances/test-sql].
NAME      DATABASE_VERSION  LOCATION       TIER                   PRIMARY_ADDRESS  PRIVATE_ADDRESS  STATUS
test-sql  POSTGRES_17       us-central1-c  db-perf-optimized-N-2  12.345.678.910   -                RUNNABLE
> gcloud sql databases create test-db --instance test-sql
Creating Cloud SQL database...done.
Created database [test-db].
instance: test-sql
name: test-db
project: test-gcp-123456
> gcloud sql users set-password postgres --instance test-sql --password postgres
Updating Cloud SQL user...done.
> gcloud sql instances describe test-sql --format='get(connectionName)'
test-gcp-123456:us-central1:test-sql
> C:\Users\orbsv\Downloads\cloud-sql-proxy.x64.exe test-gcp-123456:us-central1:test-sql
2025/01/22 20:37:59 Authorizing with Application Default Credentials
2025/01/22 20:38:01 [test-gcp-123456:us-central1:test-sql] Listening on 127.0.0.1:5432
2025/01/22 20:38:01 The proxy has started successfully and is ready for new connections!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:43:15