Skip to content

Supabase CLI: "failed SASL auth" or "invalid SCRAM server-final-message"

在使用 Supabase CLI 执行 supabase db pushsupabase link 或其他任何需要认证的操作时,你可能会遇到带有 failed SASL auth (invalid SCRAM server-final-message received from server) 这样的消息的认证错误。

🌐 When executing supabase db push or supabase link or any other authenticated actions from the Supabase CLI, you might encounter an authentication error with messages such as failed SASL auth (invalid SCRAM server-final-message received from server).

为什么会发生这种情况: 这通常表示身份验证失败,在某些情况下,数据库连接池管理器(Supavisor)可能会错误地缓存用于 CLI 无密码流程的内部 Supabase 角色 cli_login_postgres 的凭据。这可能导致你的 IP 因多次连接失败而被暂时封禁。

为了解决这个问题,可以考虑以下其中一个解决方案:

  1. 检查网络封禁:

    • 导航到你项目的数据库设置页面。
    • 查看被阻止的任何列出的 IP 地址。删除与你当前连接对应的任何条目,然后再尝试执行 CLI 操作。
  2. 改用旧的基于密码的认证流程:

    • 在运行 CLI 命令时,通过环境变量直接提供你的数据库密码。
    1
    SUPABASE_DB_PASSWORD=<your-database-password> supabase db push
  3. 跳过 Pooler,使用 Supabase CLI 直接连接数据库(需要 IPv6):

    • 如果你的网络支持 IPv6,你可以使用带有 --skip-pooler 标志的测试版 CLI 来绕过连接池器,从而避免这个特定问题。安装选项在 CLI 入门指南的 测试版通道 中有说明。
    1
    npx supabase@beta link --skip-pooler
    2
    npx supabase@beta db push