お疲れ様です、社員の米本です。
今回は実際にあったSnowflakeのロールまわりのいざこざを、
初心者の備忘録として残しておければと思っています。
(需要があるのか微妙なところですが…)
・Snowflakeとは?
クラウドベースのSaaS型データプラットフォームです。
データウェアハウスやデータレイク、データマート、
RDBMS(リレーショナルデータベース管理システム)の要素も内包しています。
簡単にいうと、データ集積所サービスみたいなものです。
・筆者の経歴
IT業界4年目。
最初の1年ほど業務でOracleを触っており、それから2年ほどDB関係から離れていました。
今回訳あってSnowflakeを触る運びとなりました。
・そもそもロールとは?
権限を付与するための入れ物です。
付与対象者(ユーザ or ロール)とかにロールを付与してあげると、そのロールに付与されている権限が使えます。
例えば、以下のロール構成図1だと、
・ユーザAは「CREATE TABLE」権限と「CREATE VIEW」権限をロールAを介して付与されている。
・ユーザBは「CREATE STAGE」権限をロールBを介して付与されている。
状態となっています。
つまり、
・ユーザAはロールAのおかげでテーブルとビューの作成が可能。
・ユーザBはロールBのおかげでステージの作成が可能。
というわけです。
・ややこしいところ
まず上のロール構成図1のややこしいところですが、
この場合、ユーザAに対して「CREATE TABLE」権限や「CREATE VIEW」権限を直接付与されているわけではないというところです。
実際、ユーザAはロールAのおかげでテーブルとビューの作成が可能なのですが、
この場合ユーザAが付与されているのは、ロールAの「USAGE権限(※1)」となっています。
※1使用可能権限
どういう話かというと、
1.ロールAをユーザAに付与。(明示的にUSAGE権限を付与するというわけではなく、「GRANT ROLE~」すると自動的に「USAGE」権限が付与される)
↓
2.ロールAは「CREATE TABLE権限と「CREATE VIEW」権限を持っている。
↓
3.じゃあユーザAは「CREATE TABLE」権限と「CREATE VIEW」権限を実質持っている。
というロジックとのことです。
Oracleだとそもそも「USAGE権限」というものが存在せず、
最初のうちはこれがよくわからず混乱してました…
・これの何がまずいか?
でも別に結果が一緒なら別に良くないか?
と思うのですが、これが存外違ったり…
例えば、下記のロール構成図2のような構成だとします。
1.「ユーザC」は「ロールC」のOWNERSHIP権限(※2)を持っている。
2.「ACCOUNT ADMIN」ロールを利用して「ロールC」に「CREATE ACCOUNT」権限(※3)を付与します。
※2 USAGE権限はあくまでロールを使用可能な権限だけですが、OWNERSHIP権限はロールを使用可能なだけではなく、他のユーザやロールに対してロールを付与可能となっています
※3「CREATE ACCOUNT」権限は「ACCOUNT ADMIN」からでしか付与できない権限となっています。
結論からいうと、この場合、ユーザCは本来付与できないはずの「CREATE ACCOUNT」権限を、
実質他のユーザやロールに付与できる状態となっています。
つまり、ロールに権限を内包させれば、本来直接その権限を付与する権限がなくても、間接的に権限を付与させることができる。
ということです。
これに対して、ロールCを介さず直接ユーザCに対して「CREATE ACCOUNT」権限が付与されていた場合、
他のユーザやロールに権限を付与できませんでした。
条件が複雑ではありますが、実際に起きかねない状況となっており、
セキュリティホール的な意味合いでも考慮しておかないといけない事項として勉強になりました…
・おわりに
Snowflakeを始めるにあたって、
Oracleを触っていたこともあり、何もないところから始めるよりも飲み込みは早かったと思いますが、
なんじゃそりゃって驚いた要素はロール以外にもそれなりにありました。
続きがあればまた備忘録として残していければと思います。
他、
実践メインでやっていて机上のインプットはあまりやっていなかったのもあるので、
そろそろ「SnowPro® Associate」(※4)という資格を取るために勉強してみようかなと思っています。
※4 Snowflakeの入門的な資格。Oracle Masterでいうbronze・silverくらいのイメージ。
ここまで長々とお付き合いいただき、ありがとうございました。