(57)【特許請求の範囲】
【請求項１】
データベースに対してデータ操作を行うデータ操作命令を受け付ける受付手段と、
前記データ操作命令を簡約する簡約規則と、前記簡約規則を用いるデータ操作命令の危険性の判定項目とを保持する保持手段と、
前記受付手段で受け付けたデータ操作命令を前記簡約規則を用いて簡約する簡約手段と、
前記簡約手段で危険性のある前記簡約規則を用いた場合、前記データ操作を制限する制限手段とを備えることを特徴とする情報処理装置。
【請求項２】
前記簡約規則を用いた前記データ操作命令の簡約で、前記データ操作命令の条件が恒真となる場合に、前記危険性があることが前記保持手段に保持されることを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記データ操作命令は、ＳＱＬで表されることを特徴とする請求項１記載の情報処理装置。
【請求項４】
前記データ操作命令は、コンピュータ実行形式である中間言語で表されることを特徴とする請求項１記載の情報処理装置。
【請求項５】
前記中間言語は、外部機器で予め作成されることを特徴とする請求項４記載の情報処理装置。
【請求項６】
前記受付手段の受け付けたデータ操作命令の種別を判別する判別手段を更に備え、前記データ操作命令が中間言語で表されていると判別された場合、前記簡約を行わずに前記データ操作の実行を許可することを特徴とする請求項１に記載の情報処理装置。
【請求項７】
データベースに対してデータ操作を行うデータ操作命令を受け付ける受付工程と、
前記データ操作命令を簡約する簡約規則と、前記簡約規則を用いるデータ操作命令の危険性の判定項目とを保持する保持手段を参照して、前記受付工程で受け付けたデータ操作命令を前記簡約規則を用いて簡約する簡約工程と、
前記簡約工程で危険性がある前記簡約規則を用いた場合、前記データ操作を制限する制限工程とを備えることを特徴とする情報処理方法。
【請求項８】
コンピュータを、
データベースに対してデータ操作を行うデータ操作命令を受け付ける受付手段と、
前記データ操作命令を簡約する簡約規則と、前記簡約規則を用いるデータ操作命令の危険性の判定項目とを保持する保持手段と、
前記受付手段で受け付けたデータ操作命令を前記簡約規則を用いて簡約する簡約手段と、
前記簡約手段で危険性がある前記簡約規則を用いた場合、前記データ操作を制限する制限手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースを改ざんしたりデータベースから不正に情報を入手したりする攻撃への対策を行う情報処理方法、装置、及びプログラムに関するものである。
【背景技術】
【０００２】
近年、ストレージや記録メディアの大容量化が進み、比較的小規模な機器においても検索などのデータ処理負荷が増大しつつある。サーバなどの大規模システムにおいては、データ処理負荷の増大に対応するため、データベースマネジメントシステム（ＤＢＭＳ）が考案されており、アプリケーションはデータベースを使用してシステムを構築するのが一般的である。ＤＢＭＳは、データの形式や利用手順を標準化し、特定のアプリケーションからデータベースを独立させることができる。
【０００３】
機器などの小規模システムにおいてもデータベースの使用が提唱され、組込み機器に向いたデータベース（組込みデータベース）が多数提案され利用されるようになってきている。
【０００４】
データベースは、大量のデータセットに対して複雑なデータ操作をＳＱＬ等のデータアクセス言語で簡単に記述でき手軽に取り扱えるようにしている。そのため、アプリケーションの開発負荷が軽減できる。反面、アプリケーションを通して、データベースの内部のデータまでＳＱＬで簡単に操作可能となり、セキュリティの観点からは秘匿性が下がり、不正に情報取得されるなど危険な面もある。ＳＱＬインジェクションはそのひとつの例である。
【０００５】
ＳＱＬインジェクションは、「ユーザは必ず正しい（こうあってほしい）文字列を入力する」という思い込みに基づいて、開発者がアプリケーションプログラムをコーディングしてしまうことから発生する。悪意を持ったシステムクラッカは、アプリケーションがアクセスするデータベースが、最も一般的な言語であるＳＱＬで操作できることを想定している。そこで、アプリケーションのユーザ入力プロンプトに対してＳＱＬ文の一部になる文字列を入力する。アプリケーションが、その文字列を選別せずにＳＱＬ文に連接するようになっている場合、クラッカは、不正な意図をもったＳＱＬ文がデータベースに対して実行されることを狙っている。ＳＱＬインジェクションによって、クラッカは、ユーザ認証をすり抜けたり、データベース中の権限のないデータを網羅的に入手したり、あるいは、都合の悪いデータを破壊するなど、不正な行為を行う。
このようなＳＱＬインジェクションへの対抗方法はこれまでにも多数提案されてきた。
【０００６】
最も標準的な方法は、ユーザ入力文字列中の特殊文字を必ずエスケープして使用する、あるいは、ユーザ入力文字列をプレースホルダ化する、というものである。プレースホルダとは、ＳＱＬ文中のユーザ入力文字列がはいるべき位置に通例「？」で表記するシンボルを代入しておき、ユーザ入力文字列をパラメータとして、実行時に前記のシンボルにバインドするという処理方法である。バインドされる値は、リテラルとして扱われる。エスケープとプレースホルダ化の手法によってほとんどのＳＱＬインジェクションは回避できる。
【０００７】
しかし、現実には対策漏れを犯す開発者が必ず存在する。対策漏れが起こると、Ｗｅｂアプリケーションの事例では、ユーザデータが市中に流出する社会問題を引き起こした。事後システム改変、ユーザへの謝罪・賠償、風評被害による売上減等により数十億円の損害を被ったこともある。
このような対策漏れによる損害を回避するために、予めアプリケーションプログラム側の脆弱性を検出するシステムも従来から存在した。
【０００８】
例えば特許文献１は、アプリケーションプログラムの実行状況を監視して、不正なＳＱＬインジェクションの可能性のある文字列操作を適正なＳＱＬ文に改変して実行するものである。アプリケーションプログラムの実行状況を監視して、固定でなくＳＱＬインジェクションの可能性のある部分文字列が、ＳＱＬ文に追加されるプログラムコード実行個所を検出する。そして、固定でない部分文字列をパラメータとして処理するＳＱＬ文に改変して実行する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００９−１２９１２８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
エスケープとプレースホルダ化によるインジェクション対策手法は、人間がたまたまアプリケーションプログラム中で対策を忘れた場合には、損害が発生してしまうという欠点がある。
【００１１】
また〔特許文献１〕による対策では、ＳＱＬインジェクションの可能性のある文字列をパラメータ化した定型コマンド文を、その文字列の意味を解釈せずに、動的に作成してしまっている。入力文字列が不正な意図をもっているか適切に判断していない。そのため、例えば、入力文字列のデータ操作条件が不正で、実行してはならないのか、若しくは通常あり得るデータ操作条件なので実行しても良いのか区別できない。また、権限のあるユーザの入力文字列に、特殊なデータベース操作命令が含まれる場合にはそのデータベース操作命令を許可するなど柔軟な対応ができない。
【００１２】
本発明は、上記の問題点に鑑みてなされたものであり、不正な意図をもったＳＱＬインジェクションを適切に判断して、データベース操作を制限する情報処理装置及びその方法、プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明に係る情報処理装置は、以下の構成を備える。即ち、データベースに対してデータ操作を行うデータ操作命令を受け付ける受付手段と、前記データ操作命令を簡約する簡約規則と、前記簡約規則を用いるデータ操作命令の危険性の判定項目とを保持する保持手段と、前記受付手段で受け付けたデータ操作命令を前記簡約規則を用いて簡約する簡約手段と、前記簡約手段で危険性のある前記簡約規則を用いた場合、前記データ操作を制限する制限手段。
【発明の効果】
【００１４】
本発明によれば、データ操作命令の危険性を柔軟に判断するため、不正な意図をもったデータ操作を制限し、データベースの安全性を高めることができる。
【図面の簡単な説明】
【００１５】
【図１】本実施形態のデータ処理装置の全体構成を示すブロック図である。
【図２】本実施形態のデータ処理装置におけるログイン画面、及びログイン許可処理を実現するＳＱＬ文の例を示した図である。
【図３】本実施形態のデータ処理装置におけるログ一覧画面、及びログ一覧作成処理を実現するＳＱＬ文の例を示した図である。
【図４】本実施形態のデータ処理装置のログイン画面及びログ一覧画面におけるＳＱＬインジェクション攻撃の例を示した図である。
【図５】本実施形態のデータ処理装置におけるユーザリストテーブル、ログテーブル、カウンタテーブルの構成を示した図である。
【図６】本実施形態のデータ処理装置が受け付けるＳＱＬ文の文法の例を示した図である。
【図７】本実施形態のデータ処理装置におけるＳＱＬ文を構文解析した結果の構文解析木の構成と簡約の例を示した図である。
【図８】本実施形態のデータ処理装置におけるＳＱＬ中間言語、及び、ＳＱＬ文からの変換例を示した図である。
【図９】本実施形態のデータ処理装置におけるＳＱＬ中間言語の簡約の例を示した図である。
【図１０】本実施形態のデータ処理装置における構文解析木簡約規則、及び、命令系列簡約規則の例を示した図である。
【図１１】本実施形態のデータ処理装置における高危険性リストの例を示した図である。
【図１２】本実施形態のデータ処理装置全体の処理手順の一例を示すフローチャートである
【図１３】ログイン処理の処理手順の一例を示すフローチャートである。
【図１４】ログ一覧表示処理の処理手順の一例を示すフローチャートである。
【図１５】実施形態１に係るデータベース処理の処理手順の一例を示すフローチャートである。
【図１６】本実施形態のデータ処理装置における外部生成中間言語テーブルの構成の例を示した図である。
【図１７】実施形態２に係るデータベース処理の処理手順の一例を示すフローチャートである。
【図１８】実施形態３に係るデータベース処理の処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１６】
＜実施形態１＞
以下、図面を参照しながら本発明に好適な実施形態を詳細に説明する。
【００１７】
図１は、本実施形態のデータ処理装置の構成を示すブロック図である。
図示の構成において、ＣＰＵ１―１はマイクロプロセッサであり、ログイン処理、ログ一覧表示処理、画面制御処理、コピー処理、プリント処理、スキャン処理等のための演算、論理判断等を行い、バスを介してバスに接続された各デバイスを制御する。
【００１８】
ＢＵＳ１―７はバスであり、マイクロプロセッサＣＰＵ１―１の制御対象である各デバイスを指示するアドレス信号、コントロール信号を転送する。また、各デバイス間のデータ転送を行う。
入力部１―２はボタン、タッチパネル、キーボード、マウス等であり、オペレータが各種の指示を行う。
表示部１―３は液晶ディスプレイ等である。
読取部１―４はスキャナである。原稿を読み取って電子データに変換する。
印刷部１―５はプリンタである。電子データを紙に印刷出力する。読取部１―４で読み取った原稿の電子データをそのまま印刷部１―５で紙に印刷出力すれば、原稿のコピー機能が実現できる。
通信部１―６はネットワークコントローラである。通信回線を介して外部とのデータ交換を行う。
【００１９】
ＲＯＭ１―８は読出専用の不揮発性メモリである。マイクロプロセッサＣＰＵ１―１によるブートプログラム、及び各種処理で使用する初期データ等を記憶する。ブートプログラムはシステム起動時に初期データをＲＡＭ１―９にロードし、マイクロプロセッサＣＰＵ１―１に制御プログラムを実行させる。制御プログラムについては、後にフローチャートを参照して詳述する。
【００２０】
ＲＡＭ１―９は読み書き可能なランダムアクセスメモリであって、各デバイスからの各種データの一次記憶に用いる。中間言語を実行するためのスタック、処理に必要なデータを一時記憶する各種ワーク領域、表示に必要な表示データを一時記憶するバッファ等、処理中に値変更が行われる各種データが格納される。
【００２１】
ＨＤＤ１―１０はハードディスクである。大量のデータを変更可能に記憶するためのものであり、ＳＳＤ等で構成することもできる。マイクロプロセッサＣＰＵ１―１により実行される制御プログラム等もここに格納され、必要に応じてＲＡＭ１―９に示す主記憶にロードされ実行される。本データ処理装置で使用するユーザリストテーブル、ログテーブル、カウンタテーブル、ＳＱＬ文法、構文解析木簡約（縮退）規則、命令系列簡約（縮退）規則、高危険性リスト、外部生成中間言語テーブル等が格納され、必要に応じて内容が修正される。
【００２２】
かかる各デバイスからなる本データ処理装置は、入力部１―２等からの各種イベントに応じて作動するものである。入力部１―２等からのインタラプトが供給されるとインタラプト信号がマイクロプロセッサＣＰＵ１−１に送られる。それに伴ってイベントが発生し、イベントに応じてＣＰＵ１−１がＲＯＭ１−８またはＲＡＭ１−９内に記憶されている各種命令を読み出し、ＣＰＵ１−１の実行によって各種の制御が行われる。
【００２３】
尚、実施形態１のデータ処理装置のＣＰＵはプログラムを実行することで各種の手段として機能する。なお、ＣＰＵと協調して動作するＡＳＩＣなどの制御回路がこれらの手段として機能してもよい。また、ＣＰＵと制御回路との協調によってこれらの手段が実現されてもよい。また、ＣＰＵは単一のものである必要はなく、複数であってもよい。この場合、複数のＣＰＵは分散して処理を実行する。また、複数のＣＰＵは単一のコンピュータに配置されていてもよいし、物理的に異なる複数のコンピュータに配置されていてもよい。なお、ＣＰＵがソフトウェアを実行することで実現する手段が専用の回路によって実現されてもよい。
【００２４】
図２は、ログイン画面、及び、ログイン許可処理を実現するＳＱＬ文の例を示した図である。画面はタッチパネルになっており、タッチによって対応するアクションを指示できる。ログイン画面の例を図２（ａ）に示している。画面２−１はログイン画面である。入力欄２−１−１はユーザＩＤをオペレータに入力させる入力欄である。この例では「１７４１２」と入力している。入力欄２−１−２はパスワードの入力欄である。ユーザＩＤと対応づけられたパスワードの入力を要求する。入力後、２−１−３で示す確認ボタンを選択（タッチなど）することによりユーザ認証が開始される。ユーザＩＤとパスワードが整合しているかがユーザリストテーブルで管理されている値と照合することにより確認され、正当ユーザであるかどうかが判断される。
【００２５】
このログイン画面のユーザ認証を実現するためのＳＱＬ文の例を図２（ｂ）に示す。ＳＱＬ文２−２は入力された値とユーザＩＤ・パスワードが一致するユーザリストテーブルの行をセレクトするＳＱＬ文である。セレクトされた行が存在すればユーザ認証成功を意味し、ログインが許可される。セレクトされた行が存在しなければユーザ認証失敗であり、ログインは拒絶される。このようにＳＱＬ文を使用すれば複雑なデータ操作処理が簡単に記述できることが分かる。
【００２６】
ログ一覧取得要求画面の例を図３（ａ）に示している。画面３−１はログ一覧取得要求画面である。入力欄３−１−１はログ一覧を表示させるユーザ名をオペレータに入力させる入力欄である。この例では木村さんが行った操作の一覧がほしいので「木村」と入力している。データ入力終了後、ボタン３−１−２を選択（タッチなど）することによりログ一覧表示処理が開始される。
【００２７】
ログ一覧を取得するためのＳＱＬ文の例を図３（ｂ）に示す。ＳＱＬ文３−２は入力された値とユーザ名が一致するログテーブルの行をセレクトするＳＱＬ文である。セレクトされた行をログ一覧として表示することになる。
【００２８】
ログ一覧表示された画面の例を図３（ｃ）に示している。画面３−３はログ一覧画面である。ログ一覧３−３−１では、ログ情報がユーザＩＤ、ユーザ名、操作内容、日時と共にリスト表示されている。ボタン３−３−２は確認ボタンであり、選択（タッチなど）すると一覧表示が消え、再びログ一覧画面３−１が表示されることになる。
【００２９】
ＳＱＬインジェクション攻撃の例を図４に示す。ログイン画面でのパスワード認証をすり抜ける攻撃例を図４（ａ）に示す。画面４−１は攻撃を受けているログイン画面の例を示している。悪意を持ったクラッカは、入力欄４−１−１にユーザＩＤとして「１７４１２」、入力欄４−１−２にパスワードとして「’ＯＲ‘Ａ’＝‘Ａ」と入力している。この入力を、図２で説明したＳＱＬ文の対応する個所に機械的に代入すると、ＳＱＬ文４−２のようになり、パスワード部分の論理式が常に真となることが分かる。すなわち、このＳＱＬ文はユーザリストテーブルからパスワードの如何に関わらずユーザＩＤ「１７４１２」の行のリストをセレクト結果として出力することになる。これはログインアプリケーションにとっては、パスワードを無視してユーザ認証が成功しログインが許可されることを意味する。クラッカはこの手法により不正にログインしようとしている。
【００３０】
ログ一覧画面におけるログテーブル削除攻撃の例を図４（ｂ）に示す。画面４−３は攻撃を受けているログ一覧画面である。悪意のクラッカは、入力欄４−３−１にユーザ名として「木村’；」に続けて任意のＳＱＬ文（この場合はテーブルの削除）を入力している。この入力を、図３で説明したＳＱＬ文の対応する個所に機械的に代入すると、ＳＱＬ文４−４のようになり、指定されたユーザ名の行をログテーブルからセレクトし、その後カウンタテーブルの削除を実行し、情報破壊しようとしている。これはログ一覧表示アプリケーションにとっては、全く想定しないデータベース処理である。特にカウンタテーブルは本装置でプリント操作等を行う度に値をカウントアップ、記録し、その値に応じてユーザに課金する重要なテーブルである。クラッカはこのテーブルを削除することにより課金を免れようとしている。
【００３１】
ログ一覧画面における全情報取得攻撃の例を図４（ｃ）に示す。画面４−５はログ一覧画面である。悪意のクラッカは、入力欄４−５−１にユーザ名として「％」を入力している。この入力を図３で説明したＳＱＬ文の対応する個所に機械的に代入するとＳＱＬ文４−６ができる。すなわち、このＳＱＬ文はログテーブルからユーザ名が任意（％）の行をセレクトすることになる。「％」はいわゆるワイルドカードであり、任意長の文字列と一致することになる。これはログ一覧表示アプリケーションにとってはユーザ名に関わらず全ての行をリスト出力することになる。クラッカに全てのデータが入手され、情報漏洩になってしまう。
【００３２】
図５は、ユーザリストテーブル、ログテーブル、カウンタテーブルの構成を示した図である。テーブル５−１はユーザリストテーブルである。本装置にログインするユーザの属性を記憶するテーブルである。カラム５−１−１は各ユーザを一意に特定するためのユーザＩＤを記憶する。各ユーザがログインする際に使用する。カラム５−１−２はユーザ名であり、各ユーザの名称である。カラム５−１−３はパスワードである。各ユーザがログインする際の認証に必要なパスワードを記憶する。パスワードは通例他の人には公開しない。カラム５−１−４はアクセスレベルである。該ユーザがどのレベルのアクセス権限を持っているかを記憶している。例えば、レベル１は最低レベルであり、ごく限られたテーブルのみ変更権限をもっている。レベル５は最高レベルであり、通例、システム管理者に与えられ、あらゆるテーブルを修正できる権限をもっている。
【００３３】
テーブル５−２はログテーブルである。本装置で何らかの操作を行った場合にその操作履歴を記録する。カラム５−２−１はログＩＤであり、各ログを一意に特定するための情報を記憶する。カラム５−２−２は操作者ＩＤであり、ログインして該操作を行ったユーザのユーザＩＤを記憶する。カラム５−２−３は操作者名であり、ユーザ名を記憶する。カラム５−２−４は日時であり、その操作を行った日時情報を記憶する。カラム５−２−５は場所であり、その操作を行った場所を記憶する。カラム５−２−６は操作種であり、行った操作の種類を記録する。操作種には、印刷、スキャン、コピー、送信などがある。
【００３４】
テーブル５−３はカウンタテーブルであり、課金対象の操作（例えば、印刷とコピー）を行ったときにその回数をユーザごとに記録する。カラム５−３−１はユーザＩＤであり、操作を行ったユーザを記録する。カラム５−３−２はカウンタ値であり、課金対象の操作回数を記録する。
【００３５】
図６は、ＳＱＬ文の文法の例を示した図である。図は文法の表現形式としてＢＮＦ（Ｂａｃｋｕｓ  Ｎａｕｒ  Ｆｏｒｍ）を使用して記述している。ＢＮＦで記述された文法は公知の技術（例えば、ＬＲ法）によって構文解析が可能である。ＳＱＬ文が構文解析された後、構文解析木が作成されることになる。
【００３６】
ＳＱＬ文を構文解析して作成される構文解析木の例を図７（ａ）に、簡約（簡略化することであり、縮退ともいう）の例を図７（ｂ）、（ｃ）に示す。ＳＱＬ文７−１は構文解析され、構文解析木７−２が作成される。図中の各ノードはオペレータノード（楕円で図示）とオペランドノード（矩形で図示）の区別が示されている。オペレータノードはＳＱＬ文の構文要素（“ＳＥＬＥＣＴ”、“ＷＨＥＲＥ”、“ＤＲＯＰ  ＴＡＢＬＥ”など）のＩＤが格納され、オペランドノードには値（“１”など）、あるいは変数（“ＵｓｅｒＩＤ”など）が格納される。図７（ａ）に示す構文解析木のうち「１＝１」に相当する部分木が、後述する図１０（ａ）に示す構文解析木簡約（縮退）規則番号１に従って、「１」（真）に簡約（縮退）されている。図７（ｃ）は更に「ＵｓｅｒＩＤ＝１７４１１  ＯＲ  １」に相当する部分木が、構文解析木簡約（縮退）規則番号３に従って、「１」（真）に簡約（縮退）されている。
【００３７】
ＳＱＬ中間言語命令の例を図８（ａ）に、ＳＱＬ文からＳＱＬ中間言語への変換例を図８（ｂ）に示す。ＳＱＬ文のままではコンピュータによる実行ができないが、ＳＱＬ中間言語は実行形式であり、そのままコンピュータが解釈実行可能な形式である。命令８−１はＳＱＬ中間言語命令の例である。実際には何らかの数値で表現されるが、説明上、ニモニック（簡略記憶記号）となる文字列で記述している。またある種の命令にはパラメータが存在するが、図面中では丸括弧で囲まれた英字で表記している。列８−２は命令の動作を記述している。
【００３８】
ＳＱＬ文８−３が、ＳＱＬ中間言語の命令系列８−４に変換される。実際のフローでは、ＳＱＬ文に対して構文解析を行って構文解析木を生成し、生成された構文解析木をトップノードから所定規則に従って順次トラバースしながらＳＱＬ中間言語コードを生成していくことになる。コンパイラのオブジェクトコード生成などで一般的な手法である。
【００３９】
ＳＱＬ中間言語の簡約（簡略化）の例を図９に示す。図中、中間言語の記述である命令系列中の矩形で囲まれた部分が、図１０（ｂ）で後述する命令系列簡約（縮退）規則に従って順次簡約（縮退）されていく。ＳＱＬ中間言語の命令系列９−１（図８の８−４と同じ）を初期状態として簡約（縮退）していく。太線に囲まれた命令系列が命令系列簡約（縮退）規則番号１に従って命令系列９−２に簡約（縮退）される。命令系列９−２中で太線に囲まれた命令系列は命令系列簡約（縮退）規則番号３に従って命令系列９−３に簡約（縮退）される。命令系列９−３中で太線に囲まれた命令系列は命令系列簡約（縮退）規則番号４及び５に従って命令系列９−４に簡約（縮退）される。命令系列９−４中で太線に囲まれた命令系列は命令系列簡約（縮退）規則番号６に従って命令系列９−５に簡約（縮退）される。最終的に命令系列９−５はＳＱＬ文９−６と等価になる。
【００４０】
構文解析木簡約（縮退）規則を図１０（ａ）に、命令系列簡約（縮退）規則の例を図１０（ｂ）に示す。列１０−１−１は適用規則を一意に特定するための規則番号である。列１０−１−２は規則を適用する前の部分構文解析木の条件を示す。列１０−１−３は規則適用後の簡約（縮退）された部分構文解析木の状態を示す。規則適用により部分解析木が簡約（簡略化）される。列１０−１−４はその規則適用によってセキュリティ上の危険性を評価するための危険性判定項目である。「高」はセキュリティ上の危険性が高いことを意味し、「低」はセキュリティ上危険性が低いことを意味する。論理演算が事前計算できる簡約（縮退）というのは、通例そのようなＳＱＬを記述することはまれであるので、危険性の高いＳＱＬであることになり、「高」を設定している。一方、論理演算でない通常の算術演算等の簡約（縮退）は、通常ありうる処理であるので、「低」を設定している。
【００４１】
列１０−２−１は適用規則を一意に特定するための規則番号である。列１０−２−２は規則を適用する前の部分命令系列の条件を示す。列１０−２−３は規則適用後の簡約（縮退）された命令系列を示す。規則適用により命令系列が簡約（簡略化）されている。列１０−２−４はその規則適用によってセキュリティ上の危険性を評価するための値である。「高」はセキュリティ上の危険性が高いことを意味し、「低」はセキュリティ上危険性が低いことを意味する。論理判断のための命令系列が事前に簡約（縮退）でき、実行結果が固定となるということは、通例そのような命令系列を記述することがまれであるので、危険性の高い命令系列であることになり、「高」を設定している。一方、論理判断でない通常の算術演算等の簡約（縮退）は、通常ありうる処理であるので、「低」を設定している。
【００４２】
図１１は、高危険性リストの例を示した図である。セキュリティ的に危険性が高いと判断されるべき構文解析木中の構文要素、ＳＱＬ中間言語命令、パラメータ中の文字列パターンを記述したテーブルである。列１１−１はタイプであり、チェック対象が構文解析木中の構文要素か、ＳＱＬ中間言語中の命令か、あるいはＳＱＬ中間言語中のパラメータであるかを示す。本実施形態では、高危険性リスト中のパラメータを危険パラメータ、それ以外を危険ノードとして説明する。列１１−２は、構文要素であれば構文要素ＩＤ（図中では構文要素名で説明）、命令であれば命令の１６進数コード（図中ではニモニックで説明）、パラメータであれば含まれる文字列を示す。
【００４３】
図１０の危険性が高い規則を適用したかによって、恒真命令の有無をチェックできる。図１１ではそれ以外に、データベースを壊すＤＲＯＰ命令や、ワイルドカードである“％”などの有無をチェックする。
【００４４】
上述の動作をフローチャートに従って説明する。
【００４５】
図１２は本実施形態のデータ処理装置の動作、より具体的にはマイクロプロセッサＣＰＵ１―１の処理手順を示すフローチャートである。ステップＳ１２−１はシステムの初期化処理であり、各種パラメータの初期化や初期画面の表示等を行う処理である。ステップＳ１２−２はタッチパネル等の入力部１―２から何らかのイベントが発生するのをマイクロプロセッサＣＰＵ１―１において待つ処理である。イベントが発生すると、ステップＳ１２−３においてマイクロプロセッサＣＰＵ１―１がこのイベントを判別し、イベントの種類に応じて各種の処理に分岐する。各種イベントに対応した分岐先の複数の処理をステップＳ１２−４という形でまとめて表現している。図１３で詳述するログイン処理、図１４で詳述するログ一覧表示処理はこの分岐先の一部となる。
【００４６】
他の処理としては、詳細は記述されないが、ログアウト処理、原稿コピー処理、文書印刷処理、スキャン処理、文書データ管理処理などの処理がある。ステップＳ１２−５は上記の各処理の処理結果や処理終了を通知し、画面を各処理の指示に従って表示する処理である。エラーがあった場合のエラー表示、正常な処理が行われた場合の画面表示への反映など通常広く行われる処理である。
【００４７】
図１３はステップＳ１２−４の一部であるログイン処理を詳細化したフローチャートである。ステップＳ１３―１において、初期設定が必要な変数、テーブルを初期化する。ステップＳ１３−２において、液晶画面にログイン画面を表示する。ステップＳ１３−３において、図２（ａ）の例に示す如く、オペレータにユーザＩＤとパスワードを入力させる。ステップＳ１３−４において、オペレータの入力データ（ユーザＩＤ、パスワード）に従ってユーザ認証を行うため、データベースに対するクエリを生成する。実施形態１では、図２（ｂ）の例に示すようなデータベース問い合わせ用のＳＱＬ文を生成する。ステップＳ１３−５において、生成されたクエリを図１５に詳述するデータベース処理に渡し、クエリを実行する。ステップＳ１３−６において、データベース処理からのエラーコードを判定し、「実行抑止」を検出したときはステップＳ１３−１０に分岐し、ログイン認証不可の処理を行い、リターンする。ログイン認証不可の処理にはログインを受け付けないというだけではなく、警告メッセージ表示、音声による警告アラーム、管理者へのメールによる通報、などの処理を含む場合もある。
【００４８】
ステップＳ１３−６において、「実行抑止」でない場合は、ステップＳ１３−７において、ユーザ名またはパスワードが入力されていないなどの「エラー」であるかどうかを検証し、「エラー」のときはステップＳ１３−８に分岐する。ステップＳ１３−８において、ユーザデータの再入力を要請するメッセージを画面に表示し、ステップＳ１３−３にループする。ステップＳ１３−７において、「エラー」でなかったときは、正常に処理遂行してよいと判断されたことになるので、ステップＳ１３−９において、正常にログインを成功させて、アクセスレベルなどのログイン情報を取得し、リターンする。
【００４９】
図１４はステップＳ１２−４の一部であるログ一覧表示処理を詳細化したフローチャートである。ステップＳ１４―１において、初期設定が必要な変数、テーブルを初期化する。ステップＳ１４−２において、液晶画面にログ一覧表示画面を表示する。ステップＳ１４−３において、図３（ａ）の例に示す如く、オペレータに表示ユーザ名を入力させる。ステップＳ１４−４において、オペレータの入力データ（表示ユーザ名）に従って該当するログ一覧を取得するため、データベースに対するクエリを生成する。実施形態１では、図３（ｂ）の例に示すようなデータベース問い合わせ用のＳＱＬ文を生成する。ステップＳ１４−５において、生成されたクエリを図１５に詳述するデータベース処理に渡し、クエリを実行する。ステップＳ１４−６において、データベース処理からのエラーコードを判定し、「実行抑止」を検出したときはステップＳ１４−１１に分岐し、ログ一覧不可の処理を行い、リターンする。ログ一覧不可の処理にはログインを受け付けないというだけではなく、警告メッセージ表示、音声による警告アラーム、管理者へのメールによる通報、などの制限処理を含む。
【００５０】
ステップＳ１４−６において、「実行抑止」でない場合は、ステップＳ１４−７において「エラー」であるかどうかを検証し、「エラー」のときはステップＳ１４−８に分岐する。ステップＳ１４−８において、ユーザデータの再入力を要請するメッセージを画面に表示し、ステップＳ１４−３にループする。ステップＳ１４−７において、「エラー」でなかったときは、正常に処理を遂行してよいと判断されたことになるので、ステップＳ１４−９において、正常にログ一覧を作成し、ステップＳ１４−１０においてログ一覧表示を行い、リターンする。
【００５１】
図１５は実施形態１に係るデータベース処理の処理手順の一例を示すフローチャートである。ステップＳ１５−１において、入力されたＳＱＬ文を構文解析し、図７の例に示す如き構文解析木を生成する。ステップＳ１５−２において、生成された構文解析木中の各ノードを調査し、図１１の高危険性リストに記載されている危険ノードが含まれるかどうか検査する。検査によって危険性を評価する。ステップＳ１５−３において、危険ノードが含まれる場合は、実行してはいけないのでステップＳ１５−１１に分岐し、危険ノードが含まれない場合はステップＳ１５−４に進む。
【００５２】
ステップＳ１５−４において、構文解析木に対して図１０（ａ）に示す構文解析木簡約（縮退）規則をかけて簡約（縮退）させ、簡約（縮退）中に危険性「高」の簡約（縮退）規則を適用したかどうか検査する。これにより構文解析木中に恒真となる条件式があるかどうかが検査でき、危険性が評価できる。ステップＳ１５−５において、恒真条件式があった場合は、危険性があり実行してはいけないのでステップＳ１５−１１に分岐し、恒真条件式がなかった場合にステップＳ１５−６に進む。
【００５３】
ステップＳ１５−６において、簡約（縮退）された構文解析木をＳＱＬ中間言語に変換し、命令系列を生成する。ステップＳ１５−６でＳＱＬ中間言語に変換するのは、コンピュータが解釈実行可能な形式にするためであり、命令系列の簡約（縮退）は行わない。ステップＳ１５−７において、現在のログインユーザのアクセス権限を確認し、所定レベル以上の権限を有する場合は危険パラメータチェックを回避し、ステップＳ１５−１０に分岐する。所定レベル以下のアクセス権限である場合は、ステップＳ１５−８に進み、図１１の高危険性リストをサーチして、命令系列の中に危険パラメータが存在するかどうかを検査し、危険性を評価する。恒真条件式が簡約（縮退）された構文解析木にも、ワイルドカード検索などの危険なパラメータが残される可能性がある。そのような命令は管理者レベルのアクセス権限をもつユーザだけに許可されるべきなので、ここでチェックしている。ステップＳ１５−９において、危険パラメータが含まれるときは、危険と見なしてステップＳ１５−１１に分岐し、危険パラメータが存在しない場合は、ステップＳ１５−１０に進む。
【００５４】
ステップＳ１５−１０において、危険性がない、あるいは充分なアクセス権限を保有していることが確認できているので、生成された命令系列を実行し、「正常終了」または実行中にエラーがあったときは「エラー」でリターンする。ステップＳ１５−１１は実行を抑止すべき状況の処理で、クエリを実行せずに「実行抑止」でリターンする。
【００５５】
＜実施形態２＞
これまで述べた実施形態においては、データベース処理への入力は必ずＳＱＬ文であり、データベース処理の内部においてＳＱＬ文をＳＱＬ中間言語に変換していた。これに対し、システム構築時に機器外でＳＱＬ文をＳＱＬ中間言語に予め変換しておき、機器内のプログラム中ではその中間言語へのリンク情報（ＩＤなど）だけを保持し、それをデータベース処理に渡して実行するという実施形態が考えられる。
【００５６】
図１６は実施形態２に係る外部生成中間言語テーブルの構成の例を示した図である。外部生成中間言語テーブルは、システム構築時に構成した中間言語の命令系列を保持するテーブルである。列１６−１は命令列ＩＤであり、保持している中間言語命令系列を一意に特定する。列１６−２は中間言語命令系列である。
【００５７】
このような中間言語を実行するために、データベース処理の呼び出し方が実施形態１に対して多少変わってくる。図１３のログイン処理、図１４のログ一覧表示処理の変更点を説明する。図１３のステップＳ１３−４、及び図１４のステップＳ１４−４の「ＤＢクエリ生成」において、実施形態１ではＳＱＬ文を生成する処理であった。実施形態２では必要な中間言語命令系列を外部生成中間言語テーブルから取得する処理になる。その際、各個所で必要なクエリの命令列ＩＤを保持しておき、命令列ＩＤを指定することで中間言語命令列を取得することになる。
【００５８】
またデータベース処理の処理フローが実施形態１の図１５から、実施形態２では図１７のように変わる。
【００５９】
図１７は実施形態２に係るデータベース処理の処理手順の一例を示すフローチャートである。ステップＳ１７−１において、指定されたＳＱＬ中間言語命令系列中の各命令を調査し、図１１の高危険性リストに記載されている命令が含まれるかどうか検査し、危険性を評価する。ステップＳ１７−２において、危険命令が含まれる場合は、実行してはいけないのでステップＳ１７−９に分岐し、危険命令が含まれない場合はステップＳ１７−３に進む。
【００６０】
ステップＳ１７−３において、命令系列に対して図１０（ｂ）の命令系列簡約（縮退）規則をかけて簡約（縮退）させ、簡約（縮退）中に危険性「高」の簡約（縮退）規則を適用したかどうか検査する。これにより命令系列中に恒真となる命令系列があるかどうかが検査でき、危険性が評価できる。ステップＳ１７−４において、恒真命令系列があった場合は、危険性があり実行してはいけないのでステップＳ１７−９に分岐し、恒真命令系列がなかった場合にステップＳ１７−５に進む。
【００６１】
ステップＳ１７−５において、現在のログインユーザのアクセス権限を確認し、所定レベル以上の権限を有する場合は危険パラメータチェックを回避し、ステップＳ１７−８に分岐する。所定レベル以下のアクセス権限である場合は、ステップＳ１７−６に進み、図１１の高危険性リストをサーチして、命令系列の中に危険パラメータが存在するかどうかを検査し、危険性を評価する。恒真命令系列が簡約（縮退）された中間言語命令系列にも、ワイルドカード検索などの危険なパラメータが残される可能性がある。そのような命令は管理者レベルのアクセス権限をもつユーザだけに許可されるべきなので、ここでチェックしている。ステップＳ１７−７において、危険パラメータが含まれるときは、危険と見なしてステップＳ１７−９に分岐し、危険パラメータが存在しない場合は、ステップＳ１７−８に進む。ステップＳ１７−８において、危険性がない、あるいは充分なアクセス権限を保有していることが確認できたので、生成された命令系列を実行し、「正常終了」または実行中にエラーがあったときは「エラー」でリターンする。ステップＳ１７−９は実行を抑止すべき状況の処理で、クエリを実行せずに「実行抑止」でリターンする。
【００６２】
このように構成することで「ＳＱＬ構文解析」「中間言語命令列生成」などの処理を装置内部に保持する必要がなくなるので、より小規模で安価な装置を実現することができる。
【００６３】
＜実施形態３＞
また、これまで述べた実施形態においては、データベースクエリとして、実施形態１はＳＱＬ文、実施形態２はＳＱＬ中間言語を使用しており、それぞれに対しどちらかの形式に対して危険性を判定していた。これに対し、ＳＱＬ文とＳＱＬ中間言語の両方の形式に対して危険性が判断できるようにし、かつ、危険性のレベルを両者で異なるように判断するという実施形態が考えられる。
【００６４】
ＳＱＬ文はアプリ内の処理において自由に生成することができるが、反面、セキュリティ面での危険性が高いので、後述するようにデータベース処理で厳しい検査を行う。これでは、正当にテーブルをＤＲＯＰ処理したいなど、自由なデータ処理ができないので、その場合はＳＱＬ文ではなくＳＱＬ中間言語命令系列を使用するようにする。後述するようにＳＱＬ中間言語に対するデータベース処理の安全性検査は緩やかであり、自由に処理を記述することができる。これは、中間言語はシステム構築時に事前に準備され、事前にチェックが可能なので、ＳＱＬインジェクションの可能性がない安全な命令系列のみで構成することができるからである。
【００６５】
実施形態３では、データベース処理の呼び出し方（図１３のログイン処理、図１４のログ一覧表示処理）が、実施形態１、２に対して多少変わってくる。図１３のステップＳ１３−４の「ＤＢクエリ生成」において、ログイン処理はセキュリティ上重要な処理なので、より検査を厳しくし、必要な中間言語命令系列を外部生成中間言語テーブルから取得する処理とする。
【００６６】
ログ一覧処理の図１４ステップＳ１４−４の「ＤＢクエリ生成」において、これはログイン処理に比べれば比較的安全な処理と考え、実施形態３ではＳＱＬ文を生成する処理とする。
図１８は実施形態３に係るデータベース処理の処理手順の一例を示すフローチャートである。ステップＳ１８−１において、入力がＳＱＬ文であるかＳＱＬ中間言語命令系列であるか種別を判定し、中間言語であれば、中間言語への変換及びＳＱＬ文の危険性のチェックをスキップし、ステップＳ１８−８に分岐する。このように中間言語の場合は、ＳＱＬ文に対しては通常行われる危険性チェックが例外的にスキップされる。
【００６７】
ＳＱＬ文が入力されたときはステップＳ１８−２に進み、ステップＳ１８−２において、入力されたＳＱＬ文を構文解析し、図７の例に示す如き構文解析木を生成する。ステップＳ１８−３において、生成された構文解析木中の各ノードを調査し、図１１の高危険性リストに記載されている危険ノードが含まれるかどうか検査し、危険性を評価する。ステップＳ１８−４において、危険ノードが含まれる場合は、実行してはいけないのでステップＳ１８−１２に分岐し、危険ノードが含まれない場合はステップＳ１８−５に進む。
【００６８】
ステップＳ１８−５において、構文解析木をＳＱＬ中間言語に変換し、命令系列を生成する。ステップＳ１８−６において、命令系列に対して図１０（ｂ）に示した命令系列簡約（縮退）規則をかけて簡約（縮退）させ、簡約（縮退）中に危険性「高」の簡約（縮退）規則を適用したかどうか検査する。これにより命令系列中に恒真となる命令系列があるかどうかが検査でき、危険性が評価できる。ステップＳ１８−６では、ＳＱＬ文の構文解析木に対して図１０（ａ）に示す構文解析木簡約（縮退）規則をかけて簡約（縮退）させ、簡約（縮退）中に危険性「高」の簡約（縮退）規則を適用したかどうか検査しても良い。
【００６９】
ステップＳ１８−７において、恒真命令系列があった場合は、危険性があり実行してはいけないのでステップＳ１８−１２に分岐し、恒真命令系列がなかった場合にステップＳ１８−８に進む。
【００７０】
ステップＳ１８−８において、現在のログインユーザのアクセス権限を確認し、所定レベル以上の権限を有する場合は危険パラメータチェックを回避し、ステップＳ１８−１１に分岐する。所定レベル以下のアクセス権限である場合は、ステップＳ１８−９に進み、図１１の高危険性リストをサーチして、命令系列の中に危険パラメータが存在するかどうかを検査し、危険性を評価する。ステップＳ１８−１０において、危険パラメータが含まれるときは、危険と見なしてステップＳ１８−１２に分岐し、危険パラメータが存在しない場合は、ステップＳ１８−１１に進む。
【００７１】
ステップＳ１８−１１において、危険性がない、あるいは充分なアクセス権限を保有していることが確認できているので、生成された命令系列を実行し、「正常終了」または実行中にエラーがあったときは「エラー」でリターンする。ステップＳ１８−１２は実行を抑止すべき状況の処理で、クエリを実行せずに「実行抑止」でリターンする。
【００７２】
このように実施形態３では、処理上不可欠だが危険と見なされうるクエリは事前作成されているＳＱＬ中間言語の命令系列で実行することにし、通常のＳＱＬ文で記述するクエリは全く危険性がない、必ず実行が許可されるクエリに限定する。このように構成することで、セキュリティ面から危険性のあるクエリを排除しつつ、危険と解釈されうる巧緻なクエリはシステム構築時に事前作成することで、安全かつ融通の利く装置を実現することができる。
【００７３】
以上、実施形態を詳述したが、本発明は上述の実施形態に限定されるのではなく、本発明の趣旨を逸脱しない限りにおいて適宜変更が可能である。
【００７４】
本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【００７５】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【００７６】
ＣＰＵ  マイクロプロセッサ
ＢＵＳ  バス
ＲＯＭ  読出専用の不揮発性メモリ
ＲＡＭ  読み書き可能なランダムアクセスメモリ
ＨＤＤ  ハードディスク
【図１】
0005501156.tif 000002
【図２】
0005501156.tif 000003
【図３】
0005501156.tif 000004
【図４】
0005501156.tif 000005
【図５】
0005501156.tif 000006
【図６】
0005501156.tif 000007
【図７】
0005501156.tif 000008
【図８】
0005501156.tif 000009
【図９】
0005501156.tif 000010
【図１０】
0005501156.tif 000011
【図１１】
0005501156.tif 000012
【図１２】
0005501156.tif 000013
【図１３】
0005501156.tif 000014
【図１４】
0005501156.tif 000015
【図１５】
0005501156.tif 000016
【図１６】
0005501156.tif 000017
【図１７】
0005501156.tif 000018
【図１８】
0005501156.tif 000019