SET ROLE を実行すると、1 つのクエリではロールが変更されたように見えても、次のクエリでは元に戻ることがあります。クエリやセッションをまたいで権限を維持する必要がある場合は、ユーザーごとの SQL Console ロールを使用してください。
症状
SET ROLE sql_console_developerを実行しても、その後のクエリが引き続きsql_console_read_onlyで実行される。currentRoles、enabledRoles、defaultRolesの結果がクエリごとに異なる。SET ROLEと別のクエリをまとめて実行した場合、選択したロールが常に維持されるとは限らない。SHOW GRANTSには想定どおりのロールが表示されるが、その権限は有効になっていない。
この現象が発生する理由
SET ROLE は、現在のセッションで有効なロールを変更します。ただし、このセッション状態は後続の SQL Console リクエストには保持されません。そのため、後続のクエリは、以前のリクエストで有効にしたロールなしで実行される可能性があります。
このため、SQL Console では SET ROLE を永続的なアクセス制御の仕組みとして使用しないでください。
SQL Console のユーザーロールの仕組み
永続的な権限を設定する
sql_console_admin ロールを持つ SQL Console ユーザーや、ACCESS MANAGEMENT 権限を持つ別のユーザーなど、サービスに対する管理権限を持つユーザーとして、以下のステートメントを実行します。
1
カスタムロールを作成する
次の例では、カスタムロール
sql_console_developer を作成し、my_database に対する権限を付与します。sql_console_developer は組み込みの ClickHouse Cloud ロールではなく、あくまで例です。代わりに、ユーザーに必要な権限を持つ既存のカスタムロールを使用できます。2
ユーザーごとの SQL Console ロールを作成する
名前にユーザーのメールアドレスを完全な形で含むロールを作成します。ロール名には特殊文字が含まれるため、バッククォートが必要です。
3
カスタムロールを付与する
必要なロールをユーザーごとの SQL Console ロールに付与します。必要に応じて、複数のロールを付与できます。
4
新しい SQL Console セッションを開始する
ユーザーに SQL Console からサインアウトして再度サインインするか、ブラウザーのタブを再読み込みするよう依頼します。新しいセッションでは、ClickHouse Cloud が 結果には、
sql-console-role:user@example.com を sql-console:user@example.com に適用するため、SET ROLE ステートメントは必要ありません。有効なロールを確認します。sql-console-role:user@example.com を通じて付与された権限が含まれているはずです。管理対象ロールを変更しない
sql_console_admin や sql_console_read_only を変更しないでください。これらの組み込みロールは ClickHouse Cloud によって管理されています。ユーザーごとの権限には、代わりに sql-console-role:<email> を使用してください。
ロール管理の一般的な例については、一般的なアクセス管理クエリを参照してください。