SC Workbook
科目 A-2 · データベース

WITH CHECK OPTION 付きビュー

表 社員 の所有者である DB 管理者が次の SQL 文を実行し,ビュー 営業部社員 を定義して利用者 S に権限を付与した。S は表 社員 に対する権限をもたない。表 社員 には,部署が '営業' の社員 E01 と,部署が '開発' の社員 E50 の行がある。S が SQL 文を実行したときの結果として,適切なものはどれか。ここで,営業部社員 は更新可能なビューである。

CREATE VIEW 営業部社員 AS
  SELECT 社員番号, 氏名, 部署, 内線
    FROM 社員
   WHERE 部署 = '営業'
  WITH CHECK OPTION;
GRANT SELECT, UPDATE ON 営業部社員 TO S;
  1. アUPDATE 営業部社員 SET 内線 = '5555' WHERE 社員番号 = 'E50' を実行すると,E50 の行がビューの条件を満たさないので,WITH CHECK OPTION によってエラーとなる。
  2. イS は表 社員 に対する UPDATE 権限をもたないので,ビューを介した UPDATE 文は全て権限不足で拒否される。
  3. ウビューの内容はビューを定義した時点の表 社員 の行で固定されるので,その後に営業部へ異動した社員の行は S から参照できない。
  4. エUPDATE 営業部社員 SET 部署 = '開発' WHERE 社員番号 = 'E01' を実行すると,更新後の行がビューの条件を満たさなくなるので,この UPDATE 文は拒否される。
正解と解説を見る

正解 エ

この問題の基礎知識

  • ビューは問合せの定義を保存した仮想的な表であり,参照されるたびに定義の問合せが実行される。結果を実データとして保持するのは実体化ビュー(マテリアライズドビュー)である。
  • 更新可能なビューを介した UPDATE 文や DELETE 文は,ビューの WHERE 句の条件を満たす行,すなわちビューから見える行だけを対象とする。
  • WITH CHECK OPTION を指定すると,ビューを介した INSERT 文や UPDATE 文で作られる行がビューの条件を満たすかが検査され,満たさない変更は拒否される。
  • ビューに対する権限を付与すると,利用者は基になる表への権限をもたなくても,ビューで定めた範囲だけにアクセスできる。ビューはアクセス制御の手段として使われる。
アUPDATE 営業部社員 SET 内線 = '5555' WHERE 社員番号 = 'E50' を実行すると,E50 の行がビューの条件を満たさないので,WITH CHECK OPTION によってエラーとなる。

ビューの WHERE 句の条件は,ビューを介した UPDATE 文で更新できる行を限定する。E50 の行はビューから見えないので更新の対象にならず,エラーではなく更新件数 0 件で終わる。WITH CHECK OPTION が検査するのは更新後の行である。

イS は表 社員 に対する UPDATE 権限をもたないので,ビューを介した UPDATE 文は全て権限不足で拒否される。

ビューが参照する表へのアクセス権限は,ビューを使う利用者ではなくビューの所有者の権限で検査される。所有者の DB 管理者は表 社員 の権限をもつので,S はビューの UPDATE 権限だけで,ビューを介して営業部の行を更新できる。

ウビューの内容はビューを定義した時点の表 社員 の行で固定されるので,その後に営業部へ異動した社員の行は S から参照できない。

ビューは問合せの定義を保存するもので,参照されるたびに定義の問合せが実行される。定義後に部署が '営業' に変更された社員の行も S から参照できる。定義時点などの結果を保持するのは実体化ビュー(マテリアライズドビュー)である。

エUPDATE 営業部社員 SET 部署 = '開発' WHERE 社員番号 = 'E01' を実行すると,更新後の行がビューの条件を満たさなくなるので,この UPDATE 文は拒否される。正解

WITH CHECK OPTION を指定した更新可能なビューでは,ビューを介した INSERT 文や UPDATE 文で作られる行がビューの条件を満たすかを検査し,満たさない場合は拒否する。指定がなければ,E01 を営業部の外へ移してビューから見えなくする更新ができてしまう。

検証用の出典出典照合済み
ISO/IEC 9075-2 SQL/Foundation / PostgreSQL Documentation: CREATE VIEW
照合の根拠(4 件)

ISO/IEC 9075 本文は有償で読めないため PostgreSQL の文書で裏付けた。イの「所有者の権限で検査」は PostgreSQL の既定(security_invoker = false)の動作として記述されている。

問題 ID A2-DBS-0509 · AI 作成のオリジナル問題 · 正解と各選択肢の根拠を出典の原文で確認しています。 照合日 2026-11-08

非公式の学習用アプリです(IPA とは関係ありません)。問題はすべて AI が作成したオリジナルで、誤りを含む場合があります。