From f4f2d45b23456cd75fb60463b4d3b873fce7077e Mon Sep 17 00:00:00 2001 From: Cal Herries <39073188+calherries@users.noreply.github.com> Date: Fri, 24 May 2024 19:02:31 -0600 Subject: [PATCH] Fix connection impersonation when jdbc spec is passed (#43147) --- src/metabase/driver/sql_jdbc/execute.clj | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/metabase/driver/sql_jdbc/execute.clj b/src/metabase/driver/sql_jdbc/execute.clj index 3ba5d028ac3..2b4fea71b59 100644 --- a/src/metabase/driver/sql_jdbc/execute.clj +++ b/src/metabase/driver/sql_jdbc/execute.clj @@ -348,9 +348,16 @@ (log/tracef "Setting default connection options with options %s" (pr-str options)) (set-best-transaction-level! driver conn) (set-time-zone-if-supported! driver conn session-timezone) - (set-role-if-supported! driver conn (cond (integer? db-or-id-or-spec) (qp.store/with-metadata-provider db-or-id-or-spec - (lib.metadata/database (qp.store/metadata-provider))) - (u/id db-or-id-or-spec) db-or-id-or-spec)) + (when-let [db (cond + ;; id? + (integer? db-or-id-or-spec) + (qp.store/with-metadata-provider db-or-id-or-spec + (lib.metadata/database (qp.store/metadata-provider))) + ;; db? + (u/id db-or-id-or-spec) db-or-id-or-spec + ;; otherwise it's a spec and we can't get the db + :else nil)] + (set-role-if-supported! driver conn db)) (let [read-only? (not write?)] (try ;; Setting the connection to read-only does not prevent writes on some databases, and is meant -- GitLab