DB〜セキュリティと監査【H19午後1問3】

DB

ここでは、データベーススペシャリスト試験の対策として、『セキュリティと監査』の問題を扱った過去問の解説を紹介します。対象は、平成19年度午後1問3の問題となります。

【設問1】ビューを使用したアクセス制御

設問1ー(1)

ビューは、実テーブルへ影響を与えずにセキュリティを実現する方法である。
ビューを用いて、従業員が”従業員個人”テーブルの自分のデータだけをアクセス可能にするためのアクセス権限は、実テーブルへは行わず、個々の従業員のレコードだけが表示されるビューを作成し、そのビューに対するアクセス権を個々の従業員に設定すれば良い。したがって、『アクセス権をテーブルに対して付与せず、ビューだけに付与する』

<ポイント>
・標準SQLの権限管理は「テーブル or カラム」単位であり、行単位では制御できない。
・行単位で制御したいならビューを作り、ユーザにはそのビューのみ権限を与える必要がある。
・実務ではRLS機能を持つDBMSなら元テーブルでも可能だが、試験解答は「ビューを用いる」でOK。

設問1ー(2)

USER関数を使用すると効率が良い理由について問われる問題です。
USER関数は、現在ログインしているユーザー名を自動的に返す組み込み関数です。
この関数を用いることにより、利用者ごとにビューを作らなくてもよくなります。
例えば、WHERE 社員ID = 'E001' のように 個別のIDを固定すると、従業員の人数分ビューを作る必要があります。100人社員がいれば100個のビューが必要 → 管理が大変。
➡️ WHERE 社員ID = USER にすれば 1つのビューで全員に共通化できる。

したがって、『従業員ごとにビューを作成する必要がなくなるから』となります。

【設問2】ロールとSQL

設問2ー(1);ロールを付与するSQL文

ロールとは、ある目的や役割に応じて、アクセス権限などを纏めて設定したものです。

①ロールの作成
 CREATE ROLE ロール名
②アクセス顕現をロールに付与
 GRANTE 権限 ON テーブル名(又はビュー名) TO ロール名
③ロールにロールを付与
 GRANTE ロール名 TO ロール名
④ユーザーにロールを付与
 GRANTE ロール名 TO ユーザー名

<SQL文>
1行目;【a;CREATE ROLE】 営業1課長ロール=(ロールの作成)
2行目;GRANT ALL PRIVILEGES ON 従業員人事営業1課長ビュー 【b;TO 営業1課長ロール】
    =(ロールに権限付与)
3行目;GRANT 1課長ロール 【c;TO B111】=(ロールをユーザーに付与)

4行目;【a;CREATE ROLE】 営業部長ロール=(ロールの作成)
5行目;GRANT 営業1課長ロール,営業2課長ロール TO 営業部長ロール
6行目;GRANT 営業部長ロール 【d;TO B110】=(ユーザーにロールを付与)

設問2ー(2)

SQL文には、権限の移動やコピーを行う構文はない。
そのため、変更になった場合は、①権限の削除(REVOKE)と②権限の追加(GRANT)が必要になる。
したがって、『ユーザID”B110”から営業部長ロールのアクセス権限を削除して、ユーザID”B130”に営業部長ロールのアクセス権限付与を行う』

【設問3】監査証拠

監査機構に関しては、〔RDBMSの仕様と人事データベースの設定内容〕で下記のように記載されている。

(ア)今から3ヶ月前に、一部の従業員の基本データが外部に漏洩した。
(イ)今から2ヶ月前に、ある従業員の人事データが改竄された。
(ウ)今から半年前に、更新権限のない従業員が給与データを更新しようとした

(ア)今から3ヶ月前に、一部の従業員の基本データが外部に漏洩した。
従業員基本データへのアクセスは、全従業員が可能である。そのため、様々な従業員が従業員基本データにアクセスした一覧を表示することはできると考えられる。
監査証跡では、操作名とオブジェクト名(テーブル名)は保存されるが、実行したSQL文は保存されない。したがって、漏洩した従業員の一覧を出力するSQL文を発行したユーザIDを特定することはできない。

(イ)今から2ヶ月前に、ある従業員の人事データが改竄された。
”従業員人事”テーブルは、人事担当者と営業部長が更新することができる。そのため、人事データを更新したユーザーの一覧を出力することは可能であると考えられる。しかし、実行したSQL文は分からないため、誰が更新したかは分かるが、どのように更新したか?、改竄したか?を判断する、改竄内容のSQL文を実行したユーザーまでかは分からない。
したがって、『複数の従業員から更新することが可能なので、特定できない』。

<ポイント>
イ)人事データ改竄のケース
・その更新が「正当な業務による更新」か「改竄」だったか

監査証跡に残る情報
・操作名(UPDATE)
・テーブル名(従業員人事)
・ユーザーID(人事担当者や営業部長の誰か)

分かること
・誰が「更新操作」を行ったか(ユーザーID)
・いつ「従業員人事テーブル」が更新されたか

分からないこと

・実行したSQL文の内容(どの列・どの行を変更したか)
・変更前と変更後のデータの違い

(ウ)今から半年前に、更新権限のない従業員が給与データを更新しようとした
「更新権限がないユーザーからのアクセス」はエラーとなる。監査機構の仕様に記載のある「操作の実行結果(SQLSTATE)」でエラーとなったものの内、アクセス顕現がないユーザーからのUPDATE文を出力することで、特定できる。

<ポイント>

(ウ)更新権限のない従業員が給与データを更新しようとしたケース

  • 監査証跡に残る情報
    • 操作名(UPDATE)
    • テーブル名(給与データ)
    • ユーザーID(権限のない従業員)
    • 実行結果(SQLSTATE → エラーコード)
  • 動作の特徴
    • 更新権限がないため、UPDATE文はエラーとなり実行されない。
    • 監査証跡には「失敗したSQL操作」として記録される。
    • SQLSTATE から「権限がないため拒否されたアクセス」であることが分かる。
  • 分かること
    • 誰がアクセスしようとしたか(ユーザーID)
    • どのテーブルに対してか(給与データ)
    • UPDATE 操作が拒否されたこと(エラーSQLSTATE)
  • 結論(回答要旨)
    「更新権限がないユーザーからのアクセス」はエラーとして監査証跡に残る。
    したがって、エラー結果(SQLSTATE)を手がかりに、権限のないユーザーからの不正な UPDATE 試行を特定することができる。

ポイントまとめ

ビューによる行レベルのアクセス制御

ポイント解説
ビューの役割実テーブルの特定の行(レコード)や列のみを表示する仮想的なテーブルとして機能します。
セキュリティ標準SQLでは行単位のアクセス制御ができないため、ビューを用いて「自分のデータのみ」を抽出するようフィルタリング(WHERE句)を設定します。
権限付与従業員には実テーブルへのアクセス権限は与えず、フィルタリング済みのビューにのみアクセス権を付与することで、行レベルのセキュリティを実現します。

USER関数の活用

ポイント解説
USER関数の機能現在データベースにログインしているユーザーID(またはユーザー名)を自動的に返します。
効率性従業員一人ひとり(例:E001, E002, …)のIDを固定したビューを人数分作る代わりに、WHERE 社員ID = USERという条件を設定した単一のビューを作成できます。
結論従業員ごとにビューを作成する必要がなくなり、管理の手間が大幅に削減されるため効率的です。

ロールによる権限管理

項目説明/SQLコマンドの構成試験でのポイント(なぜ使うのか)
定義複数のアクセス権限(SELECT, UPDATEなど)を束ねた論理的な役割権限設定をユーザーごとではなく役割ごとに行うことで、管理の手間を大幅に削減できる。
① ロールの作成CREATE ROLE ロール名;権限のまとまりである**「役割」を定義**する最初のステップ。
② ロールへの権限付与GRANT 権限 ON オブジェクト名 TO ロール名;ロールが持つべき権限を確定させる。ユーザーではなくロールに付与するのが特徴。
③ ユーザーへのロール付与GRANT ロール名 TO ユーザー名;ユーザーにその役割を与える(ユーザーがロールの権限を使えるようになる)。
権限の変更REVOKE(削除)と**GRANT(付与)のセット**が必要。SQLには権限を移動・コピーする単一の構文はない。人事異動などで権限者が変わる際は、必ず「旧ユーザーからREVOKE → 新ユーザーにGRANT」の2操作が必要。
最大のメリット管理負荷の軽減、セキュリティポリシーの一貫性。組織変更や異動があっても、ユーザーへのロール付与/剥奪のみで済み、テーブルごとの権限設定(GRANT)を変更する必要がない。

権限変更時の操作

ポイント解説
権限の移動/コピーSQLには「権限を他のユーザーへそのまま移す」ための専用構文はありません
必要な操作ユーザーID “B110” から “B130” へ「営業部長ロール」を異動させる場合、次の2ステップが必要です。
① 削除(剥奪)旧ユーザーからロールを削除:REVOKE 営業部長ロール FROM B110;
② 追加(付与)新ユーザーにロールを付与:GRANT 営業部長ロール TO B130;
結論ユーザID”B110″から営業部長ロールのアクセス権限を削除し、ユーザID”B130″に営業部長ロールのアクセス権限付与を行う必要があります。

監査証跡調査:試験の核となる考え方

この表は、監査証跡に「何が残り、何が残らないか」を基に、試験問題で問われた際の**「特定の可否」とその理由**を整理したものです。

SQL操作問われる事象ログに残る情報(特定できること)ログに残らない情報(特定できない理由)試験の解答ポイント
SELECT情報漏洩の調査誰がアクセスしたか(ユーザーID)、✅ どのテーブルにアクセスしたか。SELECT文のWHERE句の内容(どのデータを見たか)。❌ 抽出された具体的なデータ値「漏洩したデータの中身(一覧)」までは特定できない
UPDATEデータ改竄の調査誰が更新操作をしたか(ユーザーID)、✅ どのテーブルを更新したか。UPDATE文のSET句の内容(変更した値)。❌ 変更前後の具体的なデータ値「更新内容が正当か改竄か」を判断したり、「改竄された中身」を特定したりはできない
GRANT/REVOKE権限変更の調査誰が権限を付与/剥奪したか、✅ どの権限に対して操作したか。権限管理の操作履歴は明確に特定可能
権限エラー権限のない操作試行操作の結果がエラーであること(SQLSTATE)、✅ エラーを試みたユーザーID権限外の操作を試みたユーザーは、エラーログによって特定可能
全体的な限界セキュリティ監査操作の履歴(誰がいつ何を)と試行/失敗の記録。データの中身(参照値、更新前後の値)やSQL文の具体的な条件監査証跡は操作者の特定には役立つが、データの中身の検証にはトリガなどの別機能が必要。
タイトルとURLをコピーしました