diff options
| author | Jacob Champion | 2025-04-29 20:08:24 +0000 |
|---|---|---|
| committer | Jacob Champion | 2025-04-29 20:08:24 +0000 |
| commit | d2e7d2a09d7d17656418f8c859074db690af19ec (patch) | |
| tree | 3d92c5b6cfe22d4ae1eaf8a1cec444be7dc12f1e /contrib/dblink/sql | |
| parent | 45363fca6372a04e90d1c2628c3cbfe8894b811b (diff) | |
oauth: Disallow OAuth connections via postgres_fdw/dblink
A subsequent commit will reclassify oauth_client_secret from dispchar=""
to dispchar="*", so that UIs will treat it like a secret. For our FDWs,
this change will move that option from SERVER to USER MAPPING, which we
need to avoid.
But upon further discussion, we don't really want our FDWs to use our
builtin Device Authorization flow at all, for several reasons:
- the URL and code would be printed to the server logs, not sent over
the client connection
- tokens are not cached/refreshed, so every single connection has to be
manually authorized by a user with a browser
- oauth_client_secret needs to belong to the foreign server, but options
on SERVER are publicly accessible
- all non-superusers would need password_required=false, which is
dangerous
Future OAuth work can use FDWs as a motivating use case. But for now,
disallow all oauth_* connection options for these two extensions.
Reviewed-by: Noah Misch <noah@leadboat.com>
Discussion: https://postgr.es/m/20250415191435.55.nmisch%40google.com
Diffstat (limited to 'contrib/dblink/sql')
| -rw-r--r-- | contrib/dblink/sql/dblink.sql | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/contrib/dblink/sql/dblink.sql b/contrib/dblink/sql/dblink.sql index 7870ce5d5a4..365b21036e8 100644 --- a/contrib/dblink/sql/dblink.sql +++ b/contrib/dblink/sql/dblink.sql @@ -469,6 +469,14 @@ CREATE USER MAPPING FOR public SERVER fdtest OPTIONS (server 'localhost'); -- fail, can't specify server here CREATE USER MAPPING FOR public SERVER fdtest OPTIONS (user :'USER'); +-- OAuth options are not allowed in either context +ALTER SERVER fdtest OPTIONS (ADD oauth_issuer 'https://example.com'); +ALTER SERVER fdtest OPTIONS (ADD oauth_client_id 'myID'); +ALTER USER MAPPING FOR public SERVER fdtest + OPTIONS (ADD oauth_issuer 'https://example.com'); +ALTER USER MAPPING FOR public SERVER fdtest + OPTIONS (ADD oauth_client_id 'myID'); + GRANT USAGE ON FOREIGN SERVER fdtest TO regress_dblink_user; GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO regress_dblink_user; |
