DBデータベーススペシャリスト試験 午後Ⅰ

平成28年度春期 データベーススペシャリスト 午後Ⅰ 問3

事例を読んで設問の答えを考えてから、解説のポイントとIPA公式の解答例・採点講評で確認しましょう。

問題

問3 RDBMSのセキュリティに関する次の記述を読んで,設問1~3に答えよ。 B社は、個人顧客を対象にした保険会社である。B社では、顧客の個人情報の保護を強化するために、営業支援システムにおけるセキュリティに関する設計を見直すことにした。情報システム部のFさんがその見直しを担当した。 【RDBMSのビュー及びセキュリティに関する主な仕様】 (1) 実テーブル(以下,テーブルという)又はビューのアクセス権限(SELECT,INSERT,UPDATE及びDELETEの各権限)をもつユーザは、テーブル又はビューにアクセスすることができる。 (2) ビューにアクセスする場合、そのビューが参照するテーブル又は別のビューのアクセス権限は不要である。 (3) テーブル又はビューのアクセス権限は、ユーザID,ロールに付与される。 (4) ロールは、ユーザIDに付与され、別のロールにも付与されることがある。 【営業部の組織・業務の概要】 営業部の組織・業務の概要は次のとおりである。組織の一部を図1に示す。 (1) 営業部及び営業課は、部門番号で識別される。 (2) 社員は、社員番号で識別される。社員には、営業支援システムにログインするためのユーザID(社員番号を使用)が付与されている。 (3) 個人顧客(以下,顧客という)は、顧客番号で識別される。1人の顧客は、一つの営業課によって担当される。 (4) 課長は、部下社員から成る少人数の営業チーム(以下,チームという)を複数編成する。経験豊かな社員については、複数チームに参加させることがある。 (5) チームは、顧客を訪問して面談し、保険に関わる様々な業務を行う。 (6) 各チームは、複数顧客を担当する。同じ顧客を複数チームが担当することはない。 (7) 課長は、随時、チーム編成を変える。チームに編成される社員が変わったり、チームから離れた社員が、また同じチームに戻ったりすることがある。 なお、チーム編成は、営業支援システムによって管理されていない。 図1 営業部の組織(一部) 【営業支援システムの概要】 1.主なテーブルの構造 営業支援システムで使用される主なテーブルの構造を図2に示す。 図2 主なテーブルの構造(一部省略) 2.セキュリティ要件 B社での顧客の個人情報(以下,個人情報という)とは、顧客名,生年月日,その他の記述などによって特定の個人を識別することができるものをいう。セキュリティに関する設計見直し後の個人情報に関するセキュリティ要件は、次の①~④のとおりである。 ① 営業課の社員は、その課が担当する顧客の個人情報にアクセスできる。 ② 部門長は、部下がアクセスできる全ての情報にアクセスできる。 ③ 個人情報が格納されているテーブルを隠蔽するために、社員にはビューを使わせ、テーブルには直接アクセスさせない。 ④ 個人情報にアクセスする必要がなくなった社員については、そのことを反映するためのアクセス制限を直ちに実施する。 3.操作及び処理の概要 社員が自分のユーザIDを指定してログインした営業支援システムに対する操作、及び営業支援システムによる処理の概要は、次のとおりである。 (1) 社員は、顧客訪問の前に予定を登録し、予定の変更は、その都度、反映する。予定なしに顧客訪問することはない。 (2) 社員は、予定日に顧客訪問を実施後、その実績を登録する。 (3) 社員は、画面上でアクセスを許可されたテーブル名又はビュー名の一覧から一つを選び,選択・集計条件及び結果行の並び順を指定する。 (4) 営業支援システムは、(3)の指定に基づき、実行可能なSQL文を動的に組み立てて実行し、その実行結果を画面に出力する。 【ビュー及びロールの設計】 Fさんは、個人情報を含む営業課別ビューのうち、営業1課及び営業2課のビューを、表1のSQL1及びSQL2に示すように設計した。 表1 営業1課及び営業2課のビューの定義 Fさんは、ビューを用いることを前提に、次のようにロールを設計し、運用することに決めた。営業課別ビューのアクセス権限をロールに付与する手順を,表2に示す。 (1) 部門番号をロール名として、ロールを定義する。 (2) 営業課別ビューのアクセス権限をロールに付与する。 (3) ロールの付与・剥奪については、課長が1営業日前までにデータベース管理者(以下,DBAという)に依頼する。DBAは、課長からの依頼に基づいて、ロールの付与・剥奪をRDBMSに対して実施する。 表2 営業課別ビューのアクセス権限をロールに付与する手順(未完成) 【ビューの設計変更】 Fさんが、設計見直し前の営業支援システムの利用状況を分析したところ、動的に組み立てて実行されたSQL文の中に、“顧客”テーブルに直接アクセスするSQL文、及び複雑でかつ実行回数が多いSQL文があった。前者の例を照会1に、後者の例を照会2に示す。 照会1 社員が過去に登録した訪問予定のうち、その社員が予定日に訪問しなかった顧客の顧客番号、顧客名,社員番号及び訪問予定日を出力する(表3のSQL3を参照)。 照会2 年初からの訪問回数がN回以上の社員について、社員番号,社員名、訪問回数を出力する。ここで、Nは実行時に与えられ、SQL文の動的パラメータの?に設定される(表3のSQL4を参照)。 Fさんは、照会1についてはセキュリティ要件③を満たすために、照会2についてはSQL文を簡単にするために、それぞれビューを使うことにした。 表3 営業支援システムで使用する主なSQLの構文(未完成) 【セキュリティ要件の強化】 営業支援システムのセキュリティを更に強化するために、セキュリティ要件①が、「チームの社員は、当該チームが担当する顧客の個人情報にアクセスできる。」に変更された。Fさんは、営業課別のロールをチーム別のロールに変更するという対応(対応案A)も考えたが、次のような対応(対応案B)を採用することにした。 (1) 営業支援システムに、新たに“チームメンバ”テーブルを追加する。当該テーブルへのアクセス権限(DELETE権限以外)を課長に与え、課長が次のような操作を行える機能を追加する。ただし、操作は各営業課内に限られるものとする。 (a) 営業課内で一意なチーム番号を付与する。 (b) 営業課内のチームの社員ごとに、担当開始日及び担当終了日を設定した行を登録する。担当終了日が未定の場合は、NULLを設定する。 (c) 担当開始日の当日又は前日までに、行を登録する。 (d) 担当開始日列又は担当終了日列を、いつでも変更することができる。 (e) 過去にどの社員がどのチームのメンバだったかを調べることができる。 (2) “顧客”テーブルにチーム番号列を追加し、営業課別だった表1のSQL1及びSQL2を、営業課共通にするために、表4のSQL6のように変更する。 表4 セキュリティ要件の強化後のビューの定義 設問1 【ビュー及びロールの設計】について、(1),(2)に答えよ。 (1) 表2中の【a】~【c】に入れる適切な字句を答えよ。 (2) 表2のア~ケで示したSQL文を正しい順に並べ替えよ。 なお、正しい順は複数通りあるが、そのうちの一つを答えよ。 ( )→( )→( )→( )→( )→( )→( )→(ク)→(ケ) 設問2 【ビューの設計変更】について、(1)~(3)に答えよ。 (1) 表3中の【d】, 【e】に入れる適切な字句を答えよ。 (2) 表3中のSQL4において、そのままビューの定義に指定できない所がある。その箇所を二重線で消せ。 (3) (2)で指定できないとした箇所を除いてビューを定義する。定義したビュー構造を、社員別訪問回数ビュー(社員番号,社員名,訪問回数)とし,SQL4と同じ結果行を得るために、表3中のSQL5(未完成)を作成した。SQL5の空欄に適切な字句を入れて完成させよ。ただし,結果行の並び順については、考慮しなくてよい。 設問3 【セキュリティ要件の強化】について、(1)~(3)に答えよ。 (1) “チームメンバ”テーブルの構造を示せ。主キーには実線の下線を付けること。 (2) 図1中の社員のうち、個人情報へのアクセスが許可されているにもかかわらず、表4のSQL6では期待した結果を得られない社員がいる。その社員の社員番号を全て答えよ。また、解決策として、“チームメンバ”テーブルに対して行うべき行の操作を、30字以内で具体的に述べよ。 (3) セキュリティ要件④におけるアクセス制限の実施について、対応案Bが対応案Aに比べて優れている理由を、40字以内で具体的に述べよ。
図1 営業部の組織(一部)。営業部長を頂点に、営業1課と営業2課、その課長及び所属社員を示した組織図。部門番号と社員番号も併記されている。
図1 営業部の組織(一部)。営業部長を頂点に、営業1課と営業2課、その課長及び所属社員を示した組織図。部門番号と社員番号も併記されている。
図2 主なテーブルの構造(一部省略)。部門、社員、顧客、訪問予定、訪問実績の五つの主なテーブルについて、列構成を一覧で示している。
図2 主なテーブルの構造(一部省略)。部門、社員、顧客、訪問予定、訪問実績の五つの主なテーブルについて、列構成を一覧で示している。
表1 営業1課及び営業2課のビューの定義。営業1課ビューと営業2課ビューのCREATE VIEW文を示す表。営業2課ビューの定義部分は空欄で、注記が付いている。
表1 営業1課及び営業2課のビューの定義。営業1課ビューと営業2課ビューのCREATE VIEW文を示す表。営業2課ビューの定義部分は空欄で、注記が付いている。
表2 営業課別ビューのアクセス権限をロールに付与する手順(未完成)。ロール作成、ロール付与、ビューへのSELECT権限付与を行うSQL文を、アからケの項目として示した未完成の手順表。
表2 営業課別ビューのアクセス権限をロールに付与する手順(未完成)。ロール作成、ロール付与、ビューへのSELECT権限付与を行うSQL文を、アからケの項目として示した未完成の手順表。
表3 営業支援システムで使用する主なSQLの構文(未完成)。訪問予定と訪問実績を結合するSQL3、訪問回数を集計するSQL4、集計ビューを検索するSQL5を示した未完成の表。
表3 営業支援システムで使用する主なSQLの構文(未完成)。訪問予定と訪問実績を結合するSQL3、訪問回数を集計するSQL4、集計ビューを検索するSQL5を示した未完成の表。
表4 セキュリティ要件の強化後のビューの定義。チームメンバ表と顧客表を結合し、ログインユーザと担当期間に基づいて個人情報を制限する営業課ビューの定義表。
表4 セキュリティ要件の強化後のビューの定義。チームメンバ表と顧客表を結合し、ログインユーザと担当期間に基づいて個人情報を制限する営業課ビューの定義表。
解き方のヒントを見る

権限設計を整理するための視点

ビューやロール、権限変更を考えるときは、個々の用語の印象だけで判断せず、誰が何に対してどの範囲の操作を行うのかを整理し、変更前後の影響と管理上の境界を確認しましょう。

この問題で問われていること

この問題では、仕組みの名称や設定文を覚えているかではなく、利用者・対象資源・許可される操作・変更の影響という関係を同じ基準で読み取り、要件との対応を一つずつ確認することに集中してください。

視点

権限を検討する際は、登場する主体と対象を分け、必要な操作の範囲、適用される単位、変更が及ぶ範囲を対応づけて整理します。設定の細部を先に決めず、要件と管理責任の関係が一貫しているかを確認するのが有効です。

確認ポイント

  • 利用者、対象、操作、適用範囲を混同せず、問題文の各条件を同じ観点で対応づける
  • 変更によって影響を受ける範囲と、継続的に管理すべき責任の所在を切り分ける
  • 個別の設定名ではなく、要求される最小限の権限と運用上の一貫性を確認する
正解と解説を見る

解説

営業課別ビューとロールを使って個人情報を保護し、SQLのビュー化やチーム所属履歴を通じて、権限の継承、検索結果の保持、アクセス制限の即時性を問う問題です。

問題の全体像

保険会社の営業支援システムで、顧客の個人情報を営業課やチームの単位で適切に保護する事例です。前半では、ビューで個人情報を隠し、ロールを階層化して課員・課長・部長へ権限を与える設計を確認する。中盤では、外部結合や集約条件をビューに切り出す際のSQL上の制約を問う。後半では、チーム所属の開始日・終了日を管理して、現在の所属だけでなく過去の所属も扱い、権限変更を速やかに反映する考え方を問う。

設問1(1)(a)

SQL1は営業1課の顧客だけを返すビューなので、そのビューに対するSELECT権限を付与するロールは営業1課の部門番号B11になる。公式解答例でもaはB11です。

設問1(1)(b)

SQL2は営業2課の顧客だけを返すビューなので、対応するロールは営業2課の部門番号B12になる。公式解答例でもbはB12です。

設問1(1)(c)

部長は部下がアクセスできる情報全てにアクセスするため、営業1課ロールB11と営業2課ロールB12を、部長の所属部門であるB10ロールへ付与する。したがってcはB10です。

設問1(2)

まずB10、B11、B12のロールをCREATE ROLEで作成する。次に、部長E111、営業1課の課長・社員、営業2課の課長・社員へロールを付与し、その後にB11とB12をB10へ付与する。最後に営業1課ビューをB11へ、営業2課ビューをB12へSELECT権限付きで付与する。公式解答例の一例は、オ→カ→キ→イ→ウ→エ→ア→ク→ケです。

設問2(1)(d)

顧客Kと訪問予定HYは、照会対象となる訪問予定を確実に取り出す関係なので通常の内部結合で結ぶ。公式解答例ではdはINNER JOINまたはJOINです。

設問2(1)(e)

訪問予定はあるが訪問実績が登録されていない行を見つける必要がある。そのため、訪問予定HYを残したまま訪問実績HJを結合し、HJの訪問実施日がNULLの行を抽出するLEFT OUTER JOINを使う。公式解答例ではeはLEFT OUTER JOINまたはLEFT JOINです。

設問2(2)

ビュー定義にそのまま指定できないのは、実行時に与える動的パラメータ?を含むHAVING COUNT(*) >= ?の部分です。公式解答例でもこのHAVING句全体を削除対象としている。集計自体はビューに定義できるが、Nの値は検索実行時に指定する必要がある。

設問2(3)

ビューには社員番号、社員名、訪問回数という集計結果を持たせ、実行時のNとの比較だけを外側のSELECTで行う。したがって、社員別訪問回数ビューからSELECTし、WHERE 訪問回数>=?とする。公式解答例もこの構成です。

設問3(1)

チームごとの社員所属と、その開始日・終了日を管理するため、チームメンバ(部門番号、チーム番号、社員番号、担当開始日、担当終了日)とする。画像の公式解答例では、部門番号・チーム番号・社員番号・担当開始日を主キーとして扱い、同じ社員が同じチームに戻った場合も別の履歴行として登録できる構成になっている。

設問3(2)(a)

SQL6はチームメンバ表とINNER JOINし、現在日付に有効な所属行を持つ社員だけを対象にする。一方、部長や課長は部下の全情報にアクセスできるが、各チームのメンバとして登録されていないため、期待した結果が得られない。公式解答例では該当社員をE111、E112、E116としている。

設問3(2)(b)

部長と各課長にもチーム単位の結合条件を満たさせる必要がある。30字以内では、公式解答例のとおり「部長を全チームに,課長を各チームにメンバとして登録する。」と、チームメンバ表へ行を追加する操作を具体的に書く。

設問3(3)

対応案Bでは、課長がチームメンバ表の担当終了日を更新することで、対象社員の現在有効な所属を直ちに終了できる。対応案Aのように、課長がDBAへロール剥奪を1営業日前までに依頼する必要がない点が優れている。

学習のポイント

ビュー・ロール・結合・集約・履歴管理を、業務上の権限要件と結び付けて考える。

出典:独立行政法人 情報処理推進機構(IPA)平成28年度春期 データベーススペシャリスト試験 午後Ⅰ 問3(公式資料:問題冊子(PDF) / 解答例 / 採点講評)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針