我正在寫一個將在暫存數據庫和生產數據庫上運行的Redshift遷移。我希望這種遷移能夠授予用戶訪問權限,並且用戶的名稱取決於正在遷移的數據庫。GRANT中的Redshift子查詢
例如,如果當前DB是「staging_db」,我希望遷移將權限授予「staging_user」,如果當前DB是「prod_db」,則授予「prod_user」權限。
一個幼稚的做法是這樣的:
GRANT SELECT
ON TABLE my_table
TO (SELECT CASE current_database()
WHEN 'staging_db' THEN 'staging_user'
WHEN 'prod_db' THEN 'db_user'
END);
雖然,這個錯誤告訴我SELECT子查詢未在GRANT語句允許:
ERROR: syntax error at or near "("
LINE 3: TO (SELECT CASE current_database()
什麼是這樣做的首選方式在Redshift中?
編輯:我正在Clojure中運行Migratus的遷移,如果它可以有任何幫助的話。
感謝您的快速回答。將這兩個用戶放在同一組中,不幸的是,一旦遷移將在生產環境中運行,將授予對「prod_db」的「staging_user」訪問權 – GeorgCantor
@GeorgCantor僅授予基於環境的正確用戶成員身份。也就是說,該組和成員可以在客戶端單獨或更動態地完成。 – gbn
這不會導致同樣的問題嗎?我需要根據當前的數據庫動態授予會員資格,這是我無法做到的。 – GeorgCantor