SnowPro Advanced: Architect 無料問題 1 / 10 ・ 分野1: Accounts and Security
ユーザー U1 は、主ロールを ANALYST にして USE SECONDARY ROLES ALL を実行した。U1 には ETL_ROLE も付与されている。ANALYST はスキーマ STG に USAGE しか持たず、ETL_ROLE は STG に CREATE TABLE を、表 RAW.ORDERS に SELECT を持つ。次の文を、それぞれこの状態から実行したとき、成功するものはどれか。2つ選べ。
- ALL をやめて USE SECONDARY ROLES ETL_ROLE と名前を挙げ直した後で、管理者が U1 に付与した BI_ROLE だけが SELECT を持つ表への SELECT
- ALL の指定のまま、管理者が U1 に後から付与した BI_ROLE だけが SELECT を持つ表 RPT.SUMMARY への SELECT
- スキーマ STG での CREATE TABLE。STG に CREATE TABLE を持つロールは、U1 のロールのうち ETL_ROLE だけ
- 表 RAW.ORDERS への SELECT。RAW.ORDERS に SELECT を持つロールは、U1 のロールのうち ETL_ROLE だけである
正解と解説を見る
正解: B・D
正解の理由
USE SECONDARY ROLES はセッションの中で有効なセカンダリロールを決め、セカンダリロールの権限は、主ロールの権限と合わせて SQL を実行できるかの判断に使われる。表 RAW.ORDERS への SELECT は ETL_ROLE の権限で認められるので成功する。ALL を指定したときは、付与の確認を前もって行わず、文を実行するたびに有効なセカンダリロールが決まる。そのため、管理者が後から U1 に付与した BI_ROLE は、コマンドを出し直さなくても次の文から有効になり、BI_ROLE だけが SELECT を持つ表も読める。
違う選択肢
「スキーマ STG での CREATE TABLE。STG に CREATE TABLE を持つロールは、U1 のロールのうち ETL_ROLE だけ」… 作る権限は、セカンダリロールからは使われない。ETL_ROLE がセカンダリロールとして有効でも、主ロールの ANALYST が STG に CREATE TABLE を持たないので失敗する。作るときは ETL_ROLE を主ロールにして実行する。
「ALL をやめて USE SECONDARY ROLES ETL_ROLE と名前を挙げ直した後で、管理者が U1 に付与した BI_ROLE だけが SELECT を持つ表への SELECT」… ロールの名前を挙げたときは、コマンドがそのロールの付与をその場で確かめ、セッションに望むセカンダリロールの組として記録する。後から付与されたロールが自動で有効になるのは ALL のときで、名前を挙げた組に BI_ROLE は入っていないので失敗する。
押さえどころ
ALL では、取り消されたロールも、コマンドを出し直さなくても次の文から有効でなくなる。名前を挙げた指定と ALL の指定は、付与の変化をいつ取り込むかが違う。