行レベルセキュリティ(Row-Level Security, RLS)は、特定のデータセットとロールにフィルターを適用して、ユーザーが照会できるデータ範囲を制限する機能です。
例えば、マーケティング部門のメンバーはマーケティング部門のデータのみを表示することができます。
RLS適用前の前提条件
RLSはデータセットへのアクセス権限を持つユーザーにのみ適用されます。ユーザーがデータセットを照会するには、まずHC_DataAsset_*ロールに以下のアクセス権限のいずれか一つ以上が設定されている必要があります。
アクセス範囲 | 権限表現 |
データベース全体 | database access on [データベース名] |
特定のスキーマ | schema access on [スキーマ名] |
特定のデータセット | datasource access on [データセット名] |
RLSはこのアクセス権限の上で、どの行まで表示できるかをさらに制限します。
1. 行レベルセキュリティ(RLS)設定方法
1.
画面右上の
設定 → セキュリティ → 行レベルセキュリティをクリックします。
2.
右上の+ ルールボタンをクリックします。
3.
行レベルセキュリティフィルター情報を入力します。
•
フィルタータイプ
タイプ | 動作方式 |
Regular | フィルターで指定されたロールに属するユーザーのクエリにのみWHERE句を追加します。該当ロールを持たないユーザーにはフィルターが適用されず、すべてのデータが公開されます。 |
Base | フィルターで指定されたロールを除くすべてのユーザーのクエリにフィルターを適用します。同じグループ内で適用可能なRLSフィルターがないユーザーに表示する基本的なデータ範囲を定義する場合に使用します。 |
•
データセット — フィルターを適用するデータセットを選択します。複数選択が可能で、選択したデータセットを使用するクエリにのみフィルターが適用されます。
•
ロール/除外ロール — フィルターを適用するか適用しないロールを選択します。
RLS専用ロール(例:HC_RLS_営業部)を別途作成して使用することをお勧めします。
•
グループキー(オプション) — 複数のRLSフィルターを論理的に束ねる識別子です。
◦
同じグループキーを持つフィルター同士はORで結合されます。
◦
異なるグループキーを持つフィルターはANDで結合されます。
◦
グループキーなしのフィルターはそれぞれ独立したグループとして処理されます。(他のフィルターと束ねられず、個別にAND結合)
WHERE (グループキーなしフィルター1)
AND (グループキーなしフィルター2)
AND (グループAフィルター1 OR グループAフィルター2)
AND (グループBフィルター1 OR グループBフィルター2)
SQL
복사
グループキーが必要な場合
ユーザーが複数のロールを持っており、各ロールが同じ列を異なる値でフィルタリングする場合に、グループキーを使用します。グループキーなしで2つのフィルターを適用すると、部門 = 'A' AND 部門 = 'B'となり、結果が0件になります。同じグループキーを指定すると(部門 = 'A' OR 部門 = 'B')として処理され、2つの部門データの両方を照会できます。
i.
グループキーを使用しない場合
補償センター名 = '専門審査部' AND 補償センター名 = '忠清長期センター'
ii.
グループキーを使用した場合
補償センター名 = '専門審査部' OR 補償センター名 = '忠清長期センター'
•
条件句 — クエリのWHERE句に追加されるSQL条件を入力します。
◦
生成されたフィルターはクエリ実行時にWHERE句に自動的に追加されます。
◦
1つのフィルターに複数の条件を記述できます。
◦
Jinja2式を使用すると、ログインしたユーザー情報を条件に活用できます。
-- 特定の部門データのみ照会
部門 = '営業部'
-- 複数条件の組み合わせ
部門 = '営業部' AND チーム名 = 'オンラインチーム'
-- ログインしたユーザー名に基づくフィルタリング (Jinja2)
担当者 = '{{ current_username() }}'
-- データを表示しない (Base フィルターでデフォルト値として使用)
1 = 0
SQL
복사
4.
保存ボタンをクリックします。
2. 行レベルセキュリティ(RLS)設定例
あるユーザーが専門審査部 > 専門審査1チームデータのみ照会する必要がある場合、
RBAC(ロールベースアクセス制御)とRLS(行レベルセキュリティ)を一緒に使用して、以下のように設定します。
ステップ1 — RLSロールの作成
ロール名 |
HC_RLS_専門審査部 |
HC_RLS_専門審査1チーム |
ステップ2 — RLSルールの作成
ルール名 | ロール | 条件句 |
専門審査部フィルター | HC_RLS_専門審査部 | 補償センター名 = '専門審査部' |
専門審査1チームフィルター | HC_RLS_専門審査1チーム | 補償チーム名 = '専門審査1チーム' |
ステップ3 — ユーザーへのロール割り当て
ロール |
HC_RLS_専門審査部 |
HC_RLS_専門審査1チーム |
結果
HC_RLS_専門審査部、HC_RLS_専門審査1チームロールを持つユーザーがダッシュボードまたはチャートから対象データセット(oda.insurance)を照会する場合、専門審査部であり専門審査1チームデータのみが表示されます。
•
AS-IS
•
TO-BE









