はじめに:なぜ列・行レベルでアクセス制御するの?
Snowflakeを業務で使い始めると、「営業部の人には自分の担当地域の売上だけ見せたい」「メールアドレスは管理者以外にはマスクしたい」といった細かいアクセス制御が必要になります。テーブル単位の権限(Snowflake RBAC)だけでは、こうした「同じテーブルでもユーザーによって見える範囲を変えたい」というニーズには対応できません。
そこで登場するのが、列レベルセキュリティ(Column-level Security)と行レベルセキュリティ(Row-level Security)です。この記事では、それぞれのポリシーの作り方をやさしく解説します!

2種類のポリシーの基本概念
列レベルセキュリティ(マスキングポリシー)
「特定のカラムの値を、ユーザーのロールに応じて隠す/伏せ字にする」仕組みです。例えばemail列を、管理者にはそのまま見せ、一般社員には***@example.comのように見せられます。これはSnowflake動的データマスキングとして実装されます。
行レベルセキュリティ(ROW ACCESS POLICY)
「特定の行そのものを、ユーザーに見せるかどうか制御する」仕組みです。例えば「東京支店のロールには東京支店の行だけ表示」のように、WHERE句が自動で付与されるようなイメージです。
列レベル:マスキングポリシーの作り方
まずはCREATE MASKING POLICYでポリシーを作り、テーブル列に適用します。
-- ① ポリシーを作成
CREATE MASKING POLICY email_mask AS (val STRING)
RETURNS STRING ->
CASE
WHEN CURRENT_ROLE() IN ('HR_ADMIN') THEN val
ELSE REGEXP_REPLACE(val, '.+@', '***@')
END;
-- ② 列に適用
ALTER TABLE employees
MODIFY COLUMN email
SET MASKING POLICY email_mask;
これでHR_ADMINロール以外がSELECTすると、メールアドレスが伏せ字で返されます。
行レベル:ROW ACCESS POLICYの作り方
行を絞り込みたい場合はCREATE ROW ACCESS POLICYを使います。ポリシーはBOOLEANを返す関数で、TRUEを返した行だけがユーザーに見えます。
-- ① ポリシーを作成(支店ごとに行をフィルタ)
CREATE ROW ACCESS POLICY branch_policy AS (branch STRING)
RETURNS BOOLEAN ->
CURRENT_ROLE() = 'ACCOUNTADMIN'
OR branch = CURRENT_ROLE(); -- ロール名と支店名を一致させる例
-- ② テーブルに適用
ALTER TABLE sales
ADD ROW ACCESS POLICY branch_policy ON (branch);
こうすればTOKYOロールでログインしたユーザーは、branch='TOKYO'の行しか見えなくなります。ACCOUNTADMINはすべて見えるので、運用上も安心です。

使うときの注意点
- 1テーブルにつきROW ACCESS POLICYは1つだけ適用可能です。複数の条件を組み合わせたい場合はポリシー本体のCASE式で表現します。
- マスキングポリシーは同じデータ型同士でしか適用できません(STRING列にはSTRING用ポリシー)。
- ポリシーを作るにはSECURITYADMINまたは専用のカスタムロールが推奨されます。詳しくはカスタムロールとGRANT/REVOKEの記事も参考にしてください。
- ポリシーは
ALTER TABLE ... DROP ROW ACCESS POLICYで外せます。
まとめ
列レベル・行レベルセキュリティを使えば、同じテーブルでもユーザーごとに見える範囲をきめ細かく制御できます。RBACで「テーブルにアクセスできるか」を決め、ポリシーで「何が見えるか」を絞る、という二段構えで運用するのが王道です。個人情報や売上データを扱う現場では必須の機能なので、ぜひ手元で試してみてくださいね!
参考リンク
関連記事
- Snowflake動的データマスキング入門|機密データを安全に守る方法 – 列レベルセキュリティの主役、マスキングポリシーの基本を解説。
- Snowflake RBAC入門|ロールで権限管理を始めよう – ポリシーの土台になるロールベース権限管理の基本。
- Snowflakeカスタムロール作成とGRANT/REVOKE入門 – ポリシー運用に必要なカスタムロールの作り方。
- Snowflakeネットワークポリシー入門|IPでアクセスを制限する方法 – IPレベルのアクセス制御もセットで覚えると安心。
- Snowflake MFAとSSO設定入門|認証を強化する2つの仕組み – 認証強化と組み合わせて多層防御を実現。

