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

定義者権限のプロシージャ

人事システムの表 給与 とストアドプロシージャ 給与改定 の所有者は,DB 管理者ロールである。給与改定 は,改定額が上限を超えていないこと及び改定が承認済みであることを検査したうえで表 給与 を更新する。人事部員ロールの利用者には 給与改定 の検査を経た更新だけを行わせ,表 給与 を直接更新させず,人事部員ロール以外の利用者には給与を改定させないようにしたい。権限の設定として,最も適切なものはどれか。

  1. ア給与改定 を呼出し者の権限で実行するように定義し,人事部員ロールだけに 給与改定 の EXECUTE 権限を付与して,表 給与 の権限は付与しない。
  2. イ給与改定 を定義者の権限で実行するように定義し,人事部員ロールだけに 給与改定 の EXECUTE 権限を付与して,表 給与 の権限は付与しない。
  3. ウ給与改定 を定義者の権限で実行するように定義し,給与改定 の EXECUTE 権限を PUBLIC に付与して,表 給与 の権限は付与しない。
  4. エ給与改定 を呼出し者の権限で実行するように定義し,人事部員ロールだけに 給与改定 の EXECUTE 権限と表 給与 の UPDATE 権限を付与する。
正解と解説を見る

正解 イ

この問題の基礎知識

  • ストアドプロシージャには,呼び出した利用者の権限で処理する方式(呼出し者権限,SECURITY INVOKER)と,定義者(所有者)の権限で処理する方式(定義者権限,SECURITY DEFINER)がある。
  • 定義者の権限で実行するプロシージャを使うと,利用者に表への直接の権限を与えずに,プロシージャの検査を経た操作だけを許可できる。その代わり,EXECUTE 権限を与える相手を限定する必要がある。
  • PUBLIC は全ての利用者(ロール)を表す。最小権限の原則に従い,権限は必要な利用者やロールにだけ付与する。
ア給与改定 を呼出し者の権限で実行するように定義し,人事部員ロールだけに 給与改定 の EXECUTE 権限を付与して,表 給与 の権限は付与しない。

呼出し者の権限で実行するプロシージャは,呼び出した利用者の権限で表にアクセスする。人事部員ロールは表 給与 の UPDATE 権限をもたないので,給与改定 の中の更新が権限不足で失敗し,給与を改定できない。

イ給与改定 を定義者の権限で実行するように定義し,人事部員ロールだけに 給与改定 の EXECUTE 権限を付与して,表 給与 の権限は付与しない。正解

定義者の権限で実行するので,給与改定 の中の更新は所有者である DB 管理者ロールの権限で行われ,人事部員ロールは表の権限なしに検査を経た更新だけができる。表 給与 の権限は与えないので直接の更新はできない。EXECUTE 権限を既定で PUBLIC に与える DBMS では,PUBLIC から取り消しておく。

ウ給与改定 を定義者の権限で実行するように定義し,給与改定 の EXECUTE 権限を PUBLIC に付与して,表 給与 の権限は付与しない。

表 給与 を直接更新できない点はよいが,EXECUTE 権限を PUBLIC に付与すると全ての利用者が 給与改定 を実行できる。所有者の権限で実行されるので,人事部員ロール以外の利用者も給与を改定できてしまう。

エ給与改定 を呼出し者の権限で実行するように定義し,人事部員ロールだけに 給与改定 の EXECUTE 権限と表 給与 の UPDATE 権限を付与する。

給与改定 による更新はできるが,人事部員ロールに表 給与 の UPDATE 権限を付与しているので,利用者はプロシージャを使わずに UPDATE 文を直接実行でき,上限額や承認状態の検査を回避できてしまう。

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

ISO/IEC 9075 本文は有償で読めないため PostgreSQL の文書で裏付けた(PostgreSQL ではストアドプロシージャ相当の関数に SECURITY DEFINER を指定する)。

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

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