ステージングDBとプロダクションDBで実行されるRedshift移行を作成しています。この移行でユーザーへのアクセスを許可し、ユーザーの名前はどのDBが移行されているかによって異なります。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()
これを行うための好ましい方法であるものレッドシフトで?
編集:ClojureでMigratusのマイグレーションを実行しています(何か助けが必要な場合)。
あなたの早い回答に感謝します。残念ながら、両方のユーザーを同じグループに入れると、残念ながら、移行がプロダクションで実行されると、 "prod_db"への "staging_user"アクセスが許可されます。 – GeorgCantor
@GeorgCantorは、環境に基づいて正しいユーザーメンバーシップのみを許可します。つまり、グループとメンバーシップは、クライアント内で個別に、またはより動的に実行できます。 – gbn
これは同じ問題を引き起こしませんか?現在のDBに基づいてメンバーシップを動的に付与する必要があります。これはできません。 – GeorgCantor