Temporary Access rejects valid scoped PAT for mapped read-only role (28P01) #49648
Replies: 3 comments
Teşhise geçmeden önce — Temporary Access (JIT) için doğru bağlantı biçimiResmi dokümana göre (Temporary Access) JIT bağlantısında PAT'ınız password olarak kullanılır ve shared pooler'a ekstra bir conninfo option'ı gerekir: Bunu zaten yapmışsınız, o yüzden sorun büyük olasılıkla aşağıdakilerden biri: 1. Scoped PAT, JIT'te henüz kabul edilmiyor olabilir (en sık karşılaşılan)Temporary Access dokümanı "Personal Access Token" der ve scoped PAT ayrı bir alpha duyurusu (#48717). İkisi aynı şey değildir. Varsayılan davranış, legacy (proje kapsamı dışındaki account-level) PAT'ı JIT password olarak kabul etmektir. Test: aynı rule'da, scoped olmayan bir account-level PAT ile üretim yapın. Scoped PAT ile 28P01, legacy PAT ile 200 → bu sizdeki ayrım faktörüdür. 2. Supavisor mapping'i propagate etmemiş olabilirJIT rule'u oluşturduktan sonra pooler'ın rol eşlemesini yenilemesi gerekir. Rule'u disable → enable edin, birkaç dakika bekleyin ve yeni bir PAT üretin. İlişkili 28P01 tartışması: #49116. Aynı pooler hostname'inin eski bir DNS rezolüsyonunda takılı kalmadığından emin olmak için 3. Ayrıcı teşhis: 28P01 = rejected credential vs. JIT mapping hatasıPostgreSQL'de 28P01 "password authentication failed"'dır — bağlantı rolün kendisine ulaşmış ama password (PAT) reddedilmiş. Eğer Supavisor mapping'i hiç göremezdiyse farklı bir hata (ör.
4. IPv6 zorunlu değilShared pooler IPv4 üzerinden JIT'i destekler (dokümandaki örnekler IPv4 hostname ile). IPv6 yalnızca direct connection (pooler'ı bypass) için gerekir; bypass gerekmeden önce 1+2 çözümlerini deneyin. Hızlı kontrol listesi
Ayrıca ortamınızla ilgili bir not: docs örneğindeki |
|
Running into the same 28P01 shape here. Three checks that have reliably separated "JIT not supported for this credential type" from "credential is fine but a kink in the auth path" — worth running in this order: 1. Confirm the auth path isn't eating the
|
|
Running into the same 28P01 shape here. Three checks that have reliably separated "JIT not supported for this credential type" from "credential is fine but a kink in the auth path" — worth running in this order: 1. Confirm the auth path isn't eating the
|
Uh oh!
There was an error while loading. Please reload this page.
Summary
On a managed Supabase Free project using the Temporary Access preview, a fresh scoped Personal Access Token is accepted by the Management API but rejected by the Shared Pooler for an active mapped read-only role.
No database query succeeds. No database password was reset, and no schema or data change was attempted.
Environment
supabase_read_only_userroleConnection shape
The token is passed through
PGPASSWORD, not embedded in a URI. The connection uses:user=supabase_read_only_user.
sslmode=require
options='-c jit=true'
The pooler hostname is copied from the Dashboard and DNS/TCP connectivity succeeds.
Verification
GET /v1/projects/<project-ref>/database/jitwith the same token returns HTTP 200.Expected first query:
select current_user, current_setting('transaction_read_only');
Expected result:
supabase_read_only_userwith read-only mode enabled.Actual result before any query runs:
FATAL: password authentication failed for user "supabase_read_only_user"
A direct PostgreSQL comparison is unavailable from this client because the current network has no IPv6 default route.
Questions
Related official material:
I have intentionally omitted the project reference, IP address, token, email address, and complete connection string from this public report.
All reactions