Snowflakeのロールについて完全解説【Snowflake解説】

snowflakeロール解説:ロールによるアクセス制御

アクセス制御とは以下の内容のこと - 誰がどのロールを使用できるか - どのロールがオブジェクトにアクセスできるか - どのような操作をオブジェクトに対し実行できるか - 誰がアクセス制御ポリシーを変更できるか

ユーザーおよびロール

アカウントアイコンから「ロールを切り替え」ボタンで切り替えることができる。 このロールを変更することで、確認できるデータベースが変更したり、実行できるプロシージャが変わる。

  • 例.オブジェクトに対して実行するのは、USAGE権限を持っていなければ、実行できない。
  • SELECT文を実行したい場合、selectの権限だけを持つのではんく、USAGE権限も持つことが必須。

デフォルトのロール

snowflakeのデフォルトのロールは以下の通り(上位にいるロールほど、役割を与えられている。)

  • ACOUNTADMIN : これはシステムの最上位のロールであり、アカウント内の限られた/制御された数のユーザーにのみ付与する必要があります。

  • SECURITYADMIN : MANAGE GRANTS セキュリティ権限が付与されており、付与の取り消しを含め、あらゆる付与を変更できます。

  • USERADMIN : ユーザーとロールの管理のみに専用のロール。

  • SYSADMIN : アカウントでウェアハウスとデータベース(およびその他のオブジェクト)を作成する権限を持つロール。(データベース管理者)

  • PUBLIC : 基本は何もできない、ログインだけ

snowflakeでロールを作る

ロールを作るためには、まずロールを作れる権限を持つロールに自分自身がならなければならない。

サンプルコードは以下の通り

USE ROLE useradmin;
CREATE ROLE PROD;

snowflakeでロールに権限を与える

ロールは、以下のSQLの通り

GRANT CREATE SCHEMA ON DATABASE prod_db TO ROLE PROD

この場合は、データベースにスキーマを与える権利を、PRODロールに与えている。

GRANT SELECT, INSERT, DELETE ON ALL TABLES IN SCHEMA my_schema TO ROLE analyst dba;

この場合は、select insert deleteのmy_schemaの中にある全てのテーブルに対し実行できる権限を、analyst dbaのロールに与えている。

snowflakeでロールをユーザーに付与

このロールは、ユーザーに与えることで使用可能となる。 一ユーザーは複数のロールをもらうことができるし、その場合はwebuiの操作で変更が可能。

GRANT ROLE PROD TO USER JENN;
GRANT ROLE PROD TO USER ANN;

ロール関連の裏話

snowflakeのオブジェクトツリーは以下の通り

この権限ツリーを見ると、Schemaの中にRoleとUesrは独立している。 これらが独立していることで、権限のGTANTとREVOKEが可能になっている。

ウェアハウスの権限は二種類ある

各ユーザーに対して、次のウェアハウスに対する権限を次の2通りでコントロールできる。

  • USAGE : ウェアハウスを使用してクエリを実行する
  • OPETATE : 仮想ウェアハウスを開始、停止、設定を変更

snowflakeの所有権

所有権についての解説。

各オブジェクトは、ロールに紐づいている。 あるロールを使用したユーザーがオブジェクトを作ると、そのオブジェクトの所有者はそのユーザーではなく、ロールになる

オブジェクトの所有権はロールに宿る。

  • 所有者は、オブジェクトに対して任意の操作を実行できる
  • 所有者は、自身またはその他のロールに対して権限を付与できる
  • 所有権は、所有者によって移譲できる。
  • GRANT OWUNERSHIP ON WAREHOUSE dev_ws TO ROLE dba
  • ただし、オブジェクトを共同で所有することはできないので、移譲した人はそのオブジェクトの閲覧などができなくなる

SQL、テーブルレベルのセキュリティ

セキュアビュー、およびユーザー定義関数について

プログラム手法を介してデータが間接的に開示されることを防止できる。

  • 権限のあるユーザーのみにビューまたはUDF定義を表示させる機能が、セキュアビュー

  • セキュアビュー帯びセキュアUDFは、セキュリティ向上のために、クエリ最適化の一部をバイパスしている

行レベルのアクセスの認可

行レベルのセキュリティも提供している。 これを実装するには、CURRENT_ROLEまたはCURRENT_USER関数を使用する

SELECT
    *
FROM
    table_a
JOIN
    table_b ON table_a.role=table_b.auth
AND
    table_b.auth=CURRENT_ROLE()

CURRENT_ROLE関数は、現在のセッションのロールによって帰る値が異なる。

  • アカウントロールである場合は、現在のセッションで利用しているプライマリロール名を返す

  • データベースロールである場合は、NULLを返す

ユーザー管理

ユーザー管理をクエリで行う

snowflakeでもユーザー管理はクエリで可能である。

例えば、別のユーザーのためにパスワードを変更する場合、次のようなSQLになる。

USE ROLE useradmin;
ALTER USER johnsmith
    SET PASSEORD='rosebud2'
    must_change_password = true

または、

ALTER USER johnsmith
    RESET PASSWORD

を実行することで、ユーザーのパスワードを変更するためのURLを発行してくれる。

snowflake ユーザー ロック 何分

ログインに5回失敗すると、ユーザーは15分間ロックアウトされます。

別のアカウントからアンロックしてもらう場合、

ALTER USER joohsmith
    SET minutes_to_unlock = 0

をUSERADMINロールを持ったユーザーから実行する。

備考

title:snowflakeロール完全解説

img:https://www.clipartmax.com/png/middle/167-1673910_group-customer-customer-desk-icon-role-model-icon-png.png

from https://www.clipartmax.com/middle/m2i8m2i8A0A0G6G6_group-customer-customer-desk-icon-role-model-icon-png/

category_script:page_name.startswith("7")