(57)【特許請求の範囲】
【請求項１】
ユーザが少なくとも１人ずつ属する複数のテナントによって共用されるアプリケーションから、前記複数のテナントそれぞれの個別のデータを格納するマルチテナント対応型の少なくとも２種類のデータベースへのアクセスを制御するアクセス制御装置であって、
テナントごとに、テナントを一意に識別するテナント識別子と、アクセス対象とするデータベースの種類とを記憶装置により予め記憶するマルチテナント管理データベースと、
前記アプリケーションに入力されると前記アプリケーションが前記少なくとも２種類のデータベースへのアクセス時に出力するパラメータの入力を、前記複数のテナントのいずれかに属するユーザから入力装置により受け付け、当該ユーザが属するテナントのテナント識別子を前記マルチテナント管理データベースから読み出して当該パラメータに埋め込み、当該パラメータを前記アプリケーションに入力するユーザインタフェース接続部と、
前記ユーザインタフェース接続部により入力されたパラメータが前記アプリケーションから出力された場合、当該パラメータに埋め込まれているテナント識別子を取り出し、取り出したテナント識別子に対応するテナントのデータベースの種類を前記マルチテナント管理データベースから読み出し、前記少なくとも２種類のデータベースのうち、読み出した種類のデータベースに格納された当該テナントの個別のデータへのアクセスを前記アプリケーションに行わせるデータベース接続部と
を備えることを特徴とするアクセス制御装置。
【請求項２】
前記少なくとも２種類のデータベースは、マルチテナント対応のための構成が互いに異なる複数種類のデータベースからなることを特徴とする請求項１のアクセス制御装置。
【請求項３】
前記複数種類のデータベースは、前記複数のテナントそれぞれの個別のデータを、テナント識別子のカラムを含む共通のテーブルに格納することによりマルチテナント対応を行う第１種類のデータベースと、テナントごとに、テナントの個別のデータを個別のテーブルに格納することによりマルチテナント対応を行う第２種類のデータベースと、テナントごとに、テナントの個別のデータを格納する個別のデータベースインスタンスが存在することによりマルチテナント対応を行う第３種類のデータベースとであることを特徴とする請求項２のアクセス制御装置。
【請求項４】
前記アプリケーションは、前記複数種類のデータベースに対して第１のクエリを発行することにより前記複数種類のデータベースへのアクセスを行うアプリケーションであり、
前記マルチテナント管理データベースは、前記第１種類のデータベースをアクセス対象とするテナントごとに、前記共通のテーブルに格納されるデータについて設定された条件を予め記憶し、
前記データベース接続部は、前記マルチテナント管理データベースから読み出したデータベースの種類が前記第１種類のデータベースである場合、前記パラメータから取り出したテナント識別子に対応するテナントの条件を前記マルチテナント管理データベースから読み出し、前記第１種類のデータベースに対して当該条件を含む第２のクエリを発行し、前記アプリケーションにより発行された第１のクエリの結果と当該第２のクエリの結果とを比較し、比較した結果に基づいて当該第１のクエリの結果の正否を処理装置により判定することを特徴とする請求項３のアクセス制御装置。
【請求項５】
前記ユーザインタフェース接続部は、前記複数のテナントのいずれかに属するユーザから、前記パラメータとして、当該ユーザを一意に識別するユーザ識別子の入力を受け付け、当該ユーザが属するテナントのテナント識別子を前記マルチテナント管理データベースから読み出して当該ユーザ識別子に連結することにより、当該テナント識別子を前記パラメータに埋め込むことを特徴とする請求項１から４のいずれかのアクセス制御装置。
【請求項６】
ユーザが少なくとも１人ずつ属する複数のテナントによって共用されるアプリケーションから、前記複数のテナントそれぞれの個別のデータを格納するマルチテナント対応型の少なくとも２種類のデータベースへのアクセスを制御するアクセス制御方法であって、
テナントごとに、テナントを一意に識別するテナント識別子と、アクセス対象とするデータベースの種類とを記憶装置により予め記憶するマルチテナント管理データベースを備えるコンピュータが、前記アプリケーションに入力されると前記アプリケーションが前記少なくとも２種類のデータベースへのアクセス時に出力するパラメータの入力を、前記複数のテナントのいずれかに属するユーザから入力装置により受け付け、当該ユーザが属するテナントのテナント識別子を前記マルチテナント管理データベースから読み出して当該パラメータに埋め込み、当該パラメータを前記アプリケーションに入力し、
前記コンピュータが、入力したパラメータが前記アプリケーションから出力された場合、当該パラメータに埋め込まれているテナント識別子を取り出し、取り出したテナント識別子に対応するテナントのデータベースの種類を前記マルチテナント管理データベースから読み出し、前記少なくとも２種類のデータベースのうち、読み出した種類のデータベースに格納された当該テナントの個別のデータへのアクセスを前記アプリケーションに行わせることを特徴とするアクセス制御方法。
【請求項７】
ユーザが少なくとも１人ずつ属する複数のテナントによって共用されるアプリケーションから、前記複数のテナントそれぞれの個別のデータを格納するマルチテナント対応型の少なくとも２種類のデータベースへのアクセスを制御するプログラムであって、
テナントごとに、テナントを一意に識別するテナント識別子と、アクセス対象とするデータベースの種類とを記憶装置により予め記憶するマルチテナント管理データベースを備えるコンピュータを、
前記アプリケーションに入力されると前記アプリケーションが前記少なくとも２種類のデータベースへのアクセス時に出力するパラメータの入力を、前記複数のテナントのいずれかに属するユーザから入力装置により受け付け、当該ユーザが属するテナントのテナント識別子を前記マルチテナント管理データベースから読み出して当該パラメータに埋め込み、当該パラメータを前記アプリケーションに入力するユーザインタフェース接続部と、
前記ユーザインタフェース接続部により入力されたパラメータが前記アプリケーションから出力された場合、当該パラメータに埋め込まれているテナント識別子を取り出し、取り出したテナント識別子に対応するテナントのデータベースの種類を前記マルチテナント管理データベースから読み出し、前記少なくとも２種類のデータベースのうち、読み出した種類のデータベースに格納された当該テナントの個別のデータへのアクセスを前記アプリケーションに行わせるデータベース接続部
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アクセス制御装置及びアクセス制御方法及びプログラムに関するものである。本発明は、特に、マルチテナント対応のアクセス制御装置、方法、プログラムに関するものである。
【背景技術】
【０００２】
クラウドサービスの普及に伴い、単一のアプリケーションを複数の企業（テナント）で共用する「マルチテナント」型のアプリケーションのサービス形態が普及しつつある。
【０００３】
「マルチテナント」とは、ハードウェアやソフトウェアを複数の企業で共用可能にした形態のことを指す。クラウドサービスを提供する上で重要となるのは、いかにして低価格でサービスを提供するかである。複数の企業に対して同じサービスを提供する場合、同一のアプリケーションを複数企業に対して提供する「マルチテナント技術」を適用することでソフトウェアやハードウェアのリソースを削減できるため、低価格でのサービス提供が可能になる。
【０００４】
シングルテナント型からマルチテナント型のアプリケーションへ移行する際には、コンピュータ資源（ＰＣ（パーソナルコンピュータ）サーバ、ハードディスク、ＡＰＰ（アプリケーション）サーバソフトウエア、ＤＢＭＳ（データベース管理システム）等）を複数のテナントで共有する必要がある。このときアプリケーションやデータベース側でテナントを識別し、テナント別のデータアクセスを実現する必要がある。既存のシングルテナント型アプリケーションに改修を加える場合、アプリケーションやデータベースの構造に手を加える必要があるため、一般的に改修コストが膨大になる可能性がある。そこで、既存アプリケーションを可能な限り流用したまま、マルチテナント化することの可能なフレームワークが求められている。
【０００５】
従来技術では、既存アプリケーションを用いてマルチテナント対応型のデータベースからデータを読み出す場合、セッション情報からテナントＩＤ（識別子）、オーナーＩＤ、組織名といったテナントを特定するための情報を取得し、取得した情報に基づいて当該テナントに対応するテーブルを特定したり、読み出すデータを当該テナントに係るデータに絞り込んだりしている（例えば、特許文献１〜３参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−２６６５３号公報
【特許文献２】特開２０１１−６０１７４号公報
【特許文献３】特開２０１１−１１３１０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
マルチテナントアプリケーションでは、データの分離レベルに応じてデータベース分離モデルが以下の通り定義される。
（１）表共有型：１つのテーブル内に複数のテナントの情報が混在する。
（２）スキーマ分離型：テナントごとに専用のスキーマを用意する。
（３）インスタンス分離型：テナントごとに専用のデータベースインスタンスを生成する。
【０００８】
従来技術では、表共有モデルのみ、あるいは、スキーマ分離モデルのみを対象としており、「集約度を上げたい」、「独自のスキーマを使いたい」といった利用者の様々なニーズに合わせてモデルを切り替えるような方式を実現できないという課題があった。
【０００９】
本発明は、例えば、既存アプリケーションからマルチテナント対応型のデータベースへのアクセスを制御する際に、テナントのニーズ等に合わせてデータベースの種類を切り替えることを目的とする。
【課題を解決するための手段】
【００１０】
本発明の一の態様に係るアクセス制御装置は、
ユーザが少なくとも１人ずつ属する複数のテナントによって共用されるアプリケーションから、前記複数のテナントそれぞれの個別のデータを格納するマルチテナント対応型の少なくとも２種類のデータベースへのアクセスを制御するアクセス制御装置であって、
テナントごとに、テナントを一意に識別するテナント識別子と、アクセス対象とするデータベースの種類とを記憶装置により予め記憶するマルチテナント管理データベースと、
前記アプリケーションに入力されると前記アプリケーションが前記少なくとも２種類のデータベースへのアクセス時に出力するパラメータの入力を、前記複数のテナントのいずれかに属するユーザから入力装置により受け付け、当該ユーザが属するテナントのテナント識別子を前記マルチテナント管理データベースから読み出して当該パラメータに埋め込み、当該パラメータを前記アプリケーションに入力するユーザインタフェース接続部と、
前記ユーザインタフェース接続部により入力されたパラメータが前記アプリケーションから出力された場合、当該パラメータに埋め込まれているテナント識別子を取り出し、取り出したテナント識別子に対応するテナントのデータベースの種類を前記マルチテナント管理データベースから読み出し、前記少なくとも２種類のデータベースのうち、読み出した種類のデータベースに格納された当該テナントの個別のデータへのアクセスを前記アプリケーションに行わせるデータベース接続部とを備える。
【発明の効果】
【００１１】
本発明の一の態様において、アクセス制御装置のユーザインタフェース接続部は、ユーザが属するテナントのテナント識別子をパラメータに埋め込み、当該パラメータをアプリケーションに入力する。アクセス制御装置のデータベース接続部は、ユーザインタフェース接続部により入力されたパラメータがアプリケーションから出力された場合、当該パラメータに埋め込まれているテナント識別子を取り出し、取り出したテナント識別子に対応するテナントのアクセス対象として決められた種類のデータベースに格納された当該テナントの個別のデータへのアクセスをアプリケーションに行わせる。そのため、本発明の一の態様によれば、既存アプリケーションからマルチテナント対応型のデータベースへのアクセスを制御する際に、テナントのニーズ等に合わせてデータベースの種類を切り替えることが可能となる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１に係るアクセス制御装置の構成を示すブロック図。
【図２】実施の形態１に係るアクセス制御装置のハードウェア構成の一例を示す図。
【図３】実施の形態１に係るマルチテナント管理データベースのテナント管理テーブル、テナント情報結合設定テーブル、データベース接続設定テーブルの構成例を示す図。
【図４】実施の形態１に係る表共有型データベースの構成例を示す図。
【図５】実施の形態１に係るスキーマ分離型データベースの構成例を示す図。
【図６】実施の形態１に係るインスタンス分離型データベースの構成例を示す図。
【図７】実施の形態１に係るアクセス制御装置の動作を示すシーケンス図。
【図８】実施の形態１に係るアクセス制御装置の動作を示すシーケンス図。
【図９】実施の形態１に係るアクセス制御装置の動作を示すシーケンス図。
【図１０】実施の形態１に係るアクセス制御装置の動作を示すシーケンス図。
【図１１】実施の形態１に係るアクセス制御装置の動作を示すシーケンス図。
【図１２】実施の形態２に係るアクセス制御装置の動作を示すシーケンス図。
【図１３】実施の形態３に係るアクセス制御装置の構成を示すブロック図。
【図１４】実施の形態３に係るマルチテナント管理データベースのデータベース接続設定テーブルの構成例を示す図。
【図１５】実施の形態３に係るアクセス制御装置の動作を示すシーケンス図。
【図１６】実施の形態３に係るデータチェック部の動作例を示す図。
【発明を実施するための形態】
【００１３】
以下、本発明の実施の形態について、図を用いて説明する。
【００１４】
実施の形態１．
図１は、本実施の形態に係るアクセス制御装置１００の構成を示すブロック図である。
【００１５】
図１において、アクセス制御装置１００は、シングルテナントで利用されていた既存アプリケーション５００（マルチテナント非対応型のアプリケーション）から、複数のテナントの情報を一元管理しているマルチテナント型データベース４００（マルチテナント対応型のデータベース）へのアクセスを制御する。
【００１６】
既存アプリケーション５００は、複数のテナントによって共用されるアプリケーションの一例である。各テナントには、ユーザが少なくとも１人ずつ属するものとする。本実施の形態では、既存アプリケーション５００が、テナントＡ、テナントＢ、テナントＣ、テナントＤのユーザによって利用されるクライアントシステム１０１と通信を行って各種サービス（例えば、ウェブサービス）を提供する。クライアントシステム１０１は、テナントごとに設置される。なお、テナントの数は４つに限らず、２つでも、３つでも、５つ以上でも構わない。本実施の形態では、さらに、既存アプリケーション５００が、システム管理者によって利用されるクライアントシステム１０２と通信を行って保守管理用のサービスを提供する。
【００１７】
マルチテナント型データベース４００は、複数のテナントそれぞれの個別のデータを格納する少なくとも２種類のデータベースの一例である。本実施の形態では、マルチテナント型データベース４００が、表共有型データベース４１０とスキーマ分離型データベース４２０とインスタンス分離型データベース４３０との３種類のデータベースを組み合わせて構成されている。即ち、マルチテナント型データベース４００は、マルチテナント対応のための構成が互いに異なる３種類のデータベースである。なお、マルチテナント型データベース４００は、表共有型データベース４１０とスキーマ分離型データベース４２０とインスタンス分離型データベース４３０とのうち、２種類のデータベースのみで構成されていてもよいし、その他の種類のデータベースを含む４種類以上のデータベースで構成されていてもよい。
【００１８】
アクセス制御装置１００は、既存アプリケーション５００をマルチテナント化するためのマルチテナントアプリケーション基盤２００と、マルチテナントアプリケーション（マルチテナントアプリケーション基盤２００と既存アプリケーション５００との組み合わせ）を運用する上で必要な情報を管理するマルチテナント管理データベース３００とを備える。
【００１９】
マルチテナントアプリケーション基盤２００は、ＵＩ（ユーザインタフェース）接続部２１０、マルチテナント制御部２２０、コネクション保持部２３０、ＤＢ（データベース）接続部２４０を備える。
【００２０】
ＵＩ接続部２１０は、クライアントシステム１０１からサービスのリクエストを受け付け、そのクライアントシステム１０１が設置されたテナントのテナントＩＤを既存パラメータに埋め込む処理を行う。テナントＩＤとは、テナントを一意に識別するテナント識別子のことである。既存パラメータとは、既存アプリケーション５００に入力されると既存アプリケーション５００がマルチテナント型データベース４００へのアクセス時に出力するパラメータのことである。
【００２１】
マルチテナント制御部２２０は、テナントの登録・削除等のテナントの管理を行う。
【００２２】
コネクション保持部２３０は、マルチテナントアプリケーションからマルチテナント型データベース４００へのアクセス時のコネクションを管理する。
【００２３】
ＤＢ接続部２４０は、マルチテナントアプリケーションからマルチテナント型データベース４００へのアクセスを制御する。ＤＢ接続部２４０は、テナント分離部２４１、モデル切替部２４２、表共有型接続部２４３、スキーマ分離型接続部２４４、インスタンス分離型接続部２４５を有する。テナント分離部２４１は、既存パラメータからテナントＩＤを取得する。モデル切替部２４２は、テナントごとにアクセスするデータベースを切り替える。表共有型接続部２４３は、表共有型データベース４１０へのアクセスを実現する。スキーマ分離型接続部２４４は、スキーマ分離型データベース４２０へのアクセスを実現する。インスタンス分離型接続部２４５は、インスタンス分離型データベース４３０へのアクセスを実現する。
【００２４】
マルチテナント管理データベース３００は、テナント管理テーブル３１０、テナント情報結合設定テーブル３２０、データベース接続設定テーブル３３０を有する。テナント管理テーブル３１０は、マルチテナントアプリケーションを利用するテナントの情報を管理する。テナント情報結合設定テーブル３２０は、テナントＩＤを既存アプリケーション５００に受け渡す際のルールを管理する。データベース接続設定テーブル３３０は、テナントごとのデータベースへの接続情報を管理する。
【００２５】
図１には示していないが、アクセス制御装置１００は、処理装置、記憶装置、入力装置、出力装置等のハードウェアを備える。ハードウェアはアクセス制御装置１００の各部によって利用される。例えば、処理装置は、アクセス制御装置１００の各部でデータや情報の演算、加工、読み取り、書き込み等を行うために利用される。記憶装置は、そのデータや情報を記憶するために利用される。また、入力装置は、そのデータや情報を入力するために、出力装置は、そのデータや情報を出力するために利用される。
【００２６】
図２は、アクセス制御装置１００のハードウェア構成の一例を示す図である。
【００２７】
図２において、アクセス制御装置１００は、コンピュータであり、ＬＣＤ９０１（Ｌｉｑｕｉｄ・Ｃｒｙｓｔａｌ・Ｄｉｓｐｌａｙ）、キーボード９０２（Ｋ／Ｂ）、マウス９０３、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・Ｄｒｉｖｅ）、ＣＤＤ９０５（Ｃｏｍｐａｃｔ・Ｄｉｓｃ・Ｄｒｉｖｅ）、プリンタ９０６といったハードウェアデバイスを備えている。これらのハードウェアデバイスはケーブルや信号線で接続されている。ＬＣＤ９０１の代わりに、ＣＲＴ（Ｃａｔｈｏｄｅ・Ｒａｙ・Ｔｕｂｅ）、あるいは、その他の表示装置が用いられてもよい。マウス９０３の代わりに、タッチパネル、タッチパッド、トラックボール、ペンタブレット、あるいは、その他のポインティングデバイスが用いられてもよい。
【００２８】
アクセス制御装置１００は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）を備えている。ＣＰＵ９１１は、処理装置の一例である。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３（Ｒｅａｄ・Ｏｎｌｙ・Ｍｅｍｏｒｙ）、ＲＡＭ９１４（Ｒａｎｄｏｍ・Ａｃｃｅｓｓ・Ｍｅｍｏｒｙ）、通信ボード９１５、ＬＣＤ９０１、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５、プリンタ９０６、ＨＤＤ９２０（Ｈａｒｄ・Ｄｉｓｋ・Ｄｒｉｖｅ）と接続され、これらのハードウェアデバイスを制御する。ＨＤＤ９２０の代わりに、フラッシュメモリ、光ディスク装置、メモリカードリーダライタ、あるいは、その他の記録媒体が用いられてもよい。
【００２９】
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、ＨＤＤ９２０は、不揮発性メモリの一例である。これらは、記憶装置の一例である。通信ボード９１５、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５は、入力装置の一例である。また、通信ボード９１５、ＬＣＤ９０１、プリンタ９０６は、出力装置の一例である。
【００３０】
通信ボード９１５は、ＬＡＮ（Ｌｏｃａｌ・Ａｒｅａ・Ｎｅｔｗｏｒｋ）等に接続されている。通信ボード９１５は、ＬＡＮに限らず、ＩＰ−ＶＰＮ（Ｉｎｔｅｒｎｅｔ・Ｐｒｏｔｏｃｏｌ・Ｖｉｒｔｕａｌ・Ｐｒｉｖａｔｅ・Ｎｅｔｗｏｒｋ）、広域ＬＡＮ、ＡＴＭ（Ａｓｙｎｃｈｒｏｎｏｕｓ・Ｔｒａｎｓｆｅｒ・Ｍｏｄｅ）ネットワークといったＷＡＮ（Ｗｉｄｅ・Ａｒｅａ・Ｎｅｔｗｏｒｋ）、あるいは、インターネットに接続されていても構わない。ＬＡＮ、ＷＡＮ、インターネットは、ネットワークの一例である。
【００３１】
ＨＤＤ９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。プログラム群９２３には、本実施の形態の説明において「〜部」として説明する機能を実行するプログラムが含まれている。プログラムは、ＣＰＵ９１１により読み出され実行される。ファイル群９２４には、本実施の形態の説明において、「〜データ」、「〜情報」、「〜ＩＤ（識別子）」、「〜フラグ」、「〜結果」として説明するデータや情報や信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」や「〜テーブル」の各項目として含まれている。「〜ファイル」や「〜データベース」や「〜テーブル」は、ＲＡＭ９１４やＨＤＤ９２０等の記録媒体に記憶される。ＲＡＭ９１４やＨＤＤ９２０等の記録媒体に記憶されたデータや情報や信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったＣＰＵ９１１の処理（動作）に用いられる。抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったＣＰＵ９１１の処理中、データや情報や信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【００３２】
本実施の形態の説明において用いるブロック図やフローチャートの矢印の部分は主としてデータや信号の入出力を示す。データや信号は、ＲＡＭ９１４等のメモリ、ＦＤＤ９０４のフレキシブルディスク（ＦＤ）、ＣＤＤ９０５のコンパクトディスク（ＣＤ）、ＨＤＤ９２０の磁気ディスク、光ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｃ）、あるいは、その他の記録媒体に記録される。また、データや信号は、バス９１２、信号線、ケーブル、あるいは、その他の伝送媒体により伝送される。
【００３３】
本実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜工程」、「〜手順」、「〜処理」であってもよい。即ち、「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。あるいは、「〜部」として説明するものは、ソフトウェアのみ、あるいは、素子、デバイス、基板、配線といったハードウェアのみで実現されていても構わない。あるいは、「〜部」として説明するものは、ソフトウェアとハードウェアとの組み合わせ、あるいは、ソフトウェアとハードウェアとファームウェアとの組み合わせで実現されていても構わない。ファームウェアとソフトウェアは、プログラムとして、フレキシブルディスク、コンパクトディスク、磁気ディスク、光ディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。即ち、プログラムは、本実施の形態の説明で述べる「〜部」としてコンピュータを機能させるものである。あるいは、プログラムは、本実施の形態の説明で述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【００３４】
図３は、マルチテナント管理データベース３００のテナント管理テーブル３１０、テナント情報結合設定テーブル３２０、データベース接続設定テーブル３３０の構成例を示す図である。
【００３５】
図３において、テナント管理テーブル３１０は、テナントＩＤ、テナント名のカラムを含む。テナント管理テーブル３１０は、例えば、テナントＩＤ「Ａ」に対応付けて、テナント名「テナントＡ」を格納している。
【００３６】
テナント情報結合設定テーブル３２０は、結合元パラメータ、結合先パラメータ、セパレータのカラムを含む。結合先パラメータは、ＵＩ接続部２１０によりテナントＩＤを埋め込む対象とする既存パラメータを示す。結合元パラメータ及びセパレータは、テナントＩＤを埋め込んだ後の既存パラメータの形式を示す。本例において、テナント情報結合設定テーブル３２０は、結合元パラメータ「ユーザＩＤ、テナントＩＤ」、結合先パラメータ「ユーザＩＤ」、セパレータ「−−」を格納している。ユーザＩＤは、ユーザを一意に識別するユーザ識別子である。例えば、テナントＡのユーザがユーザＩＤ「ＵＳＥＲ０１」を既存アプリケーション５００に入力しようとすると、ユーザＩＤがＵＩ接続部２１０により「Ａ−−ＵＳＥＲ０１」に変換されてから既存アプリケーション５００に入力されることになる。なお、結合先パラメータとしては、ユーザＩＤに限らず、ユーザ名、サービスの受付番号、後述する組織ＩＤ等、別の既存パラメータを用いても構わない。結合元パラメータ、セパレータについても、上記したものは一例であって、種々の変更が可能である。
【００３７】
データベース接続設定テーブル３３０は、テナントＩＤ、接続先ＤＢモデル、プールＩＤ、ＤＢチェック情報のカラムを含む。接続先ＤＢモデルは、テナントのアクセス対象として決められたデータベースの種類を示す。プールＩＤは、データベースのコネクションプール（データベースとの接続）を一意に識別する接続識別子を示す。接続先ＤＢモデルが表共有型データベース４１０の場合、コネクションプールは各テナントに共通のものが割り当てられる。接続先ＤＢモデルがスキーマ分離型データベース４２０又はインスタンス分離型データベース４３０の場合、コネクションプールは各テナントに個別のものが割り当てられる。ＤＢチェック情報は、特定のテーブルに格納されるデータについて設定された条件を示す。この条件は、接続先ＤＢモデルが表共有型データベース４１０の場合のみ設定される。なお、ＤＢチェック情報は、本実施の形態では使用しないものとする。データベース接続設定テーブル３３０は、例えば、テナントＩＤ「Ａ」に対応付けて、接続先ＤＢモデル「表共有型」（表共有型データベース４１０を示す）、プールＩＤ「ｐｏｏｌＣｏｍｍｏｎ」（共通のコネクションプールを示す）を格納している。
【００３８】
上記のように、本実施の形態において、マルチテナント管理データベース３００は、テナントごとに、少なくともテナントＩＤとデータベースの種類（接続先ＤＢモデルやプールＩＤによって示される）とを記憶装置により予め記憶する。
【００３９】
図４は、表共有型データベース４１０の構成例を示す図である。
【００４０】
図４において、表共有型データベース４１０は、複数のテナントそれぞれの個別のデータを、テナントＩＤのカラムを含む共通のテーブルに格納することによりマルチテナント対応を行う第１種類のデータベースの一例である。表共有型データベース４１０は、各テナントに共通のテーブルとして、個人情報テーブル（ユーザ一覧）、組織情報テーブル（組織一覧）、配属情報テーブル（配属一覧）、認証情報テーブル（パスワード一覧）を有する。
【００４１】
個人情報テーブル（ユーザ一覧）は、テナントＩＤ、ユーザＩＤ、ユーザ名のカラムを含む。本例では、ユーザＩＤが（シングルテナントアプリケーションのように）全テナント間でユーザを一意に識別するものとするが、ユーザが属するテナント内のみでユーザを一意に識別できればよい。個人情報テーブル（ユーザ一覧）は、例えば、テナントＩＤ「Ａ」に対応付けて、ユーザＩＤ「ＵＳＥＲ０１」、ユーザ名「ユーザ１」を格納している。
【００４２】
組織情報テーブル（組織一覧）は、テナントＩＤ、組織ＩＤ、組織名のカラムを含む。組織ＩＤは、テナントの組織（部署等）を一意に識別する組織識別子である。組織情報テーブル（組織一覧）は、例えば、テナントＩＤ「Ａ」に対応付けて、組織ＩＤ「ＯＲＧ１」、組織名「組織１」を格納している。
【００４３】
配属情報テーブル（配属一覧）は、テナントＩＤ、配属ＩＤ、ユーザＩＤ、組織ＩＤのカラムを含む。配属ＩＤは、ユーザと組織との対応付け（即ち、配属）を一意に識別する配属識別子である。配属情報テーブル（配属一覧）は、例えば、テナントＩＤ「Ａ」に対応付けて、配属ＩＤ「１」、ユーザＩＤ「ＵＳＥＲ０１」、組織ＩＤ「ＯＲＧ１」を格納している。
【００４４】
認証情報テーブル（パスワード一覧）は、テナントＩＤ、ユーザＩＤ、パスワードのカラムを含む。認証情報テーブル（パスワード一覧）は、例えば、テナントＩＤ「Ａ」に対応付けて、ユーザＩＤ「ＵＳＥＲ０１」、パスワード「ｘｘｘｘｘｘｘｘ」を格納している。
【００４５】
図５は、スキーマ分離型データベース４２０の構成例を示す図である。
【００４６】
図５において、スキーマ分離型データベース４２０は、テナントごとに、テナントの個別のデータを個別のテーブルに格納することによりマルチテナント対応を行う第２種類のデータベースの一例である。スキーマ分離型データベース４２０は、各テナントの個別のテーブルとして、個人情報テーブル（テナントＡ＿ユーザ一覧、テナントＢ＿ユーザ一覧）、組織情報テーブル（テナントＡ＿組織一覧、テナントＢ＿組織一覧）、配属情報テーブル（テナントＡ＿配属一覧、テナントＢ＿配属一覧）を有する。図示していないが、スキーマ分離型データベース４２０は、認証情報テーブル（テナントＡ＿パスワード一覧、テナントＢ＿パスワード一覧）も有する。
【００４７】
個人情報テーブル（テナントＡ＿ユーザ一覧、テナントＢ＿ユーザ一覧）、組織情報テーブル（テナントＡ＿組織一覧、テナントＢ＿組織一覧）、配属情報テーブル（テナントＡ＿配属一覧、テナントＢ＿配属一覧）、認証情報テーブル（テナントＡ＿パスワード一覧、テナントＢ＿パスワード一覧）の各テーブルは、テナントＩＤのカラムを含む代わりに、テーブル名にテナント名（テナントＩＤでもよい）を含んでいる。各テーブルに含まれるカラムについては、図４に示した表共有型データベース４１０のものと同様である。
【００４８】
図６は、インスタンス分離型データベース４３０の構成例を示す図である。
【００４９】
図６において、インスタンス分離型データベース４３０は、テナントごとに、テナントの個別のデータを格納する個別のデータベースインスタンスが存在することによりマルチテナント対応を行う第３種類のデータベースの一例である。インスタンス分離型データベース４３０のテナントＡ用インスタンス及びテナントＢ用インスタンスは、それぞれ個人情報テーブル（ユーザ一覧）、組織情報テーブル（組織一覧）、配属情報テーブル（配属一覧）を有する。図示していないが、テナントＡ用インスタンス及びテナントＢ用インスタンスは、それぞれ認証情報テーブル（パスワード一覧）も有する。
【００５０】
個人情報テーブル（ユーザ一覧）、組織情報テーブル（組織一覧）、配属情報テーブル（配属一覧）、認証情報テーブル（パスワード一覧）の各テーブルは、テナントＩＤのカラムを含んだり、テーブル名にテナント名を含んだりする代わりに、テナントごとにデータベースインスタンスが分かれている。各テーブルに含まれるカラムについては、図４に示した表共有型データベース４１０のものと同様である。
【００５１】
以下では、図７〜図９を用いて、テナントＡのクライアントシステム１０１からサービスのリクエストが送信されたときのアクセス制御装置１００の動作（本実施の形態に係るアクセス制御方法、本実施の形態に係るプログラムの処理手順）について説明する。
【００５２】
図７は、既存アプリケーション５００にテナントＩＤを意識させずに既存アプリケーション５００を利用するために、既存パラメータに対するテナントＩＤの結合及び分離を行う流れを示すシーケンス図である。
【００５３】
Ｓ１０１において、テナントＡのクライアントシステム１０１は、ＵＩ接続部２１０に対し、ログイン要求を出す。このとき、クライアントシステム１０１は、ＵＩ接続部２１０に対し、テナントＩＤ、ユーザＩＤ、パスワードを送信するものとする。ＵＩ接続部２１０は、テナントＩＤ、ユーザＩＤ、パスワードを入力装置により受信する。
【００５４】
Ｓ１０２において、ＵＩ接続部２１０は、受信したテナントＩＤが正しいものか、及び、テナントＩＤをどのように既存パラメータに埋め込むのか（結合ルール）に関する情報を入手するために、マルチテナント制御部２２０にテナントＩＤ確認通知とテナント情報結合情報取得要求を出す。
【００５５】
Ｓ１０３において、マルチテナント制御部２２０は、マルチテナント管理データベース３００に対し、テナント管理テーブル３１０にＵＩ接続部２１０から受け取ったテナントＩＤが含まれているかどうか問い合わせる。また、テナント情報結合設定テーブル３２０の結合ルールを問い合わせる。
【００５６】
Ｓ１０４において、マルチテナント管理データベース３００は、マルチテナント制御部２２０の問い合わせに対し、テナント管理テーブル３１０、テナント情報結合設定テーブル３２０を検索し、結果を返す。
【００５７】
Ｓ１０５において、マルチテナント制御部２２０は、ＵＩ接続部２１０に対し、検索結果を返す。
【００５８】
Ｓ１０６において、ＵＩ接続部２１０は、マルチテナント制御部２２０経由で取得した結合ルールを基に、既存パラメータに対し、テナントＩＤを処理装置により埋め込む。本例では、図３に示したように、結合ルールとして、結合元パラメータ「ユーザＩＤ、テナントＩＤ」、結合先パラメータ「ユーザＩＤ」、セパレータ「−−」が設定されているものとする。そのため、テナントＩＤが「Ａ」、ユーザＩＤが「ＵＳＥＲ０１」のユーザの場合、既存パラメータのユーザＩＤは「Ａ−−ＵＳＥＲ０１」となる。テナントＩＤを埋め込んだ後に、ＵＩ接続部２１０は、既存アプリケーション５００に対し、ユーザＩＤを「Ａ−−ＵＳＥＲ０１」とした上でリクエストを送信する。
【００５９】
Ｓ１０７において、既存アプリケーション５００は、シングルテナントの場合と同様の処理を実施する。具体的には、既存アプリケーション５００は、マルチテナント型データベース４００に対するクエリ（第１のクエリ）を発行する。
【００６０】
Ｓ１０８において、既存アプリケーション５００は、ＤＢ接続部２４０のテナント分離部２４１に対してデータベース接続要求を出す。データベース接続要求には、パラメータとしてユーザＩＤが含まれている。
【００６１】
Ｓ１０９において、テナント分離部２４１は、既存アプリケーション５００から受け取ったデータベース接続要求のパラメータからテナントＩＤを抽出するための情報を取得するために、マルチテナント制御部２２０に対し、テナント情報結合情報取得要求を出す。
【００６２】
Ｓ１１０において、マルチテナント制御部２２０は、テナント分離部２４１から受け取ったテナント情報結合情報取得要求を基に、マルチテナント管理データベース３００に対して、結合ルールを問い合わせる。
【００６３】
Ｓ１１１において、マルチテナント管理データベース３００は、マルチテナント制御部２２０の問い合わせに対し、テナント情報結合設定テーブル３２０を検索し、結果を返す。
【００６４】
Ｓ１１２において、マルチテナント制御部２２０は、テナント分離部２４１に対し、検索結果を返す。
【００６５】
Ｓ１１３において、テナント分離部２４１は、結合ルールを基に、既存パラメータからテナントＩＤを処理装置により取得する。本例では、ユーザＩＤからテナントＩＤを取得する。
【００６６】
Ｓ１１４において、テナント分離部２４１は、ＤＢ接続部２４０のモデル切替部２４２に対し、既存アプリケーション５００から受け取ったデータベース接続要求を、テナントＩＤを付与した状態で渡す。モデル切替部２４２は、データベース接続要求を受け取る。
【００６７】
上記のように、本実施の形態において、ＵＩ接続部２１０は、既存パラメータの入力を、複数のテナントのいずれかに属するユーザから入力装置により受け付ける。ＵＩ接続部２１０は、当該ユーザが属するテナントのテナントＩＤをマルチテナント管理データベース３００から読み出して、当該ユーザから入力された既存パラメータに処理装置により埋め込む。そして、ＵＩ接続部２１０は、テナントＩＤを埋め込んだ既存パラメータを既存アプリケーション５００に入力する。本例において、ＵＩ接続部２１０は、当該ユーザから、既存パラメータとして、当該ユーザのユーザＩＤの入力を受け付け、当該ユーザが属するテナントのテナントＩＤを、当該ユーザから入力されたユーザＩＤに連結することにより、テナントＩＤを既存パラメータに埋め込む。
【００６８】
また、本実施の形態において、ＤＢ接続部２４０は、ＵＩ接続部２１０により入力された既存パラメータが既存アプリケーション５００から出力された場合、出力された既存パラメータに埋め込まれているテナントＩＤを処理装置により取り出す。
【００６９】
図８は、表共有型データベース４１０へのアクセスの流れを示すシーケンス図である。
【００７０】
Ｓ２０１において、モデル切替部２４２は、受け取ったデータベース接続要求からテナントＩＤを取得し、どのようにデータベースへアクセスするのかに関する情報を取得するため、取得したテナントＩＤをマルチテナント制御部２２０に通知する。
【００７１】
Ｓ２０２において、マルチテナント制御部２２０は、通知されたテナントＩＤのテナントがどのようにデータベースにアクセスするのかをマルチテナント管理データベース３００に対して問い合わせる。
【００７２】
Ｓ２０３において、マルチテナント管理データベース３００は、マルチテナント制御部２２０の問い合わせに対し、データベース接続設定テーブル３３０を検索し、結果を返す。この結果には、プールＩＤが含まれている。
【００７３】
Ｓ２０４において、マルチテナント制御部２２０は、マルチテナント管理データベース３００より取得したプールＩＤを基に、コネクション保持部２３０に対し、コネクションプールの取得を要求する。このとき、マルチテナント制御部２２０は、コネクション保持部２３０に対し、プールＩＤを送信するものとする。
【００７４】
Ｓ２０５において、コネクション保持部２３０は、受け取ったプールＩＤのコネクションプールを返す。
【００７５】
Ｓ２０６において、マルチテナント制御部２２０は、モデル切替部２４２より受け取ったテナントＩＤのテナントが使用するデータベースのコネクションプールをモデル切替部２４２に返す。
【００７６】
Ｓ２０７において、モデル切替部２４２は、マルチテナント制御部２２０から受け取ったコネクションプール（接続先情報）を基に、接続先を切り替える。本例では、図３に示したように、テナントＡの接続先ＤＢモデルとして、表共有型データベース４１０が設定されているものとする。そのため、モデル切替部２４２は、表共有型接続部２４３に接続する。
【００７７】
Ｓ２０８において、表共有型接続部２４３は、コネクション保持部２３０より取得したコネクションプールを用いてマルチテナント型データベース４００の表共有型データベース４１０に接続し、検索要求を出す。具体的には、表共有型接続部２４３は、既存アプリケーション５００により発行されたクエリ（例えば、ＳＱＬのＳＥＬＥＣＴ文）に、アクセス対象となるテーブルのテナントＩＤとモデル切替部２４２が取得したテナントＩＤとが一致することを条件（例えば、ＷＨＥＲＥ句）として追加した上で、そのクエリを表共有型データベース４１０に対して発行する。
【００７８】
Ｓ２０９において、表共有型データベース４１０は、検索結果（具体的には、クエリの結果）を表共有型接続部２４３へ返す。
【００７９】
Ｓ２１０において、表共有型接続部２４３は、表共有型データベース４１０から返ってきた検索結果をモデル切替部２４２へ返す。モデル切替部２４２は、検索結果を受信する。
【００８０】
上記のように、本実施の形態において、ＤＢ接続部２４０は、既存アプリケーション５００から出力された既存パラメータに埋め込まれているテナントＩＤを取り出した後、取り出したテナントＩＤに対応するテナントのデータベースの種類をマルチテナント管理データベース３００から読み出す。そして、ＤＢ接続部２４０は、マルチテナント型データベース４００を構成する３種類のデータベースのうち、読み出した種類のデータベースに格納された当該テナントの個別のデータへのアクセスを既存アプリケーション５００に行わせる。
【００８１】
図９は、マルチテナント型データベース４００の検索結果をクライアントシステム１０１へ返す処理の流れを示すシーケンス図である。
【００８２】
Ｓ３０１において、モデル切替部２４２は、受信したマルチテナント型データベース４００の検索結果をテナント分離部２４１へ渡す。
【００８３】
Ｓ３０２において、テナント分離部２４１は、既存アプリケーション５００へモデル切替部２４２から取得したマルチテナント型データベース４００の検索結果を渡す。
【００８４】
Ｓ３０３において、既存アプリケーション５００は、受け取ったマルチテナント型データベース４００の検索結果を基に、シングルテナントの場合と同様の処理を実施する。具体的には、既存アプリケーション５００は、マルチテナント型データベース４００に対するクエリの結果に基づいて、所定の処理（例えば、ウェブサービスのための処理）を実行する。
【００８５】
Ｓ３０４において、既存アプリケーション５００は、処理の実施結果をＵＩ接続部２１０に返す。
【００８６】
Ｓ３０５において、ＵＩ接続部２１０は、処理の実施結果をテナントＡのクライアントシステム１０１に返す。
【００８７】
以上説明した動作により、マルチテナントアプリケーションからテナントＡのユーザへのサービス提供が行われる。テナントＢのクライアントシステム１０１からサービスのリクエストが送信されたときにも、同様の動作により、マルチテナントアプリケーションからテナントＢのユーザへのサービス提供が行われる。
【００８８】
以下では、図１０を用いて、テナントＣのクライアントシステム１０１からサービスのリクエストが送信されたときのアクセス制御装置１００の動作（本実施の形態に係るアクセス制御方法、本実施の形態に係るプログラムの処理手順）について説明する。
【００８９】
既存アプリケーション５００にテナントＩＤを意識させずに既存アプリケーション５００を利用するために、既存パラメータに対するテナントＩＤの結合及び分離を行う流れは、図７に示したものと同様である。
【００９０】
図１０は、スキーマ分離型データベース４２０へのアクセスの流れを示すシーケンス図である。
【００９１】
Ｓ４０１〜Ｓ４０６の処理については、図８に示したＳ２０１〜Ｓ２０６の処理と同様である。
【００９２】
Ｓ４０７において、モデル切替部２４２は、マルチテナント制御部２２０から受け取ったコネクションプール（接続先情報）を基に、接続先を切り替える。本例では、図３に示したように、テナントＣの接続先ＤＢモデルとして、スキーマ分離型データベース４２０が設定されているものとする。そのため、モデル切替部２４２は、スキーマ分離型接続部２４４に接続する。
【００９３】
Ｓ４０８において、スキーマ分離型接続部２４４は、コネクション保持部２３０より取得したコネクションプールを用いてマルチテナント型データベース４００のスキーマ分離型データベース４２０に接続し、検索要求を出す。具体的には、スキーマ分離型接続部２４４は、既存アプリケーション５００により発行されたクエリ（例えば、ＳＱＬのＳＥＬＥＣＴ文）でアクセス対象として指定されたテーブルのテーブル名に、モデル切替部２４２が取得したテナントＩＤに対応するテナント名（テナントＩＤそのものでもよい）を所定の形式で追加（連結）した上で、そのクエリをスキーマ分離型データベース４２０に対して発行する。
【００９４】
Ｓ２０９において、スキーマ分離型データベース４２０は、検索結果（具体的には、クエリの結果）をスキーマ分離型接続部２４４へ返す。
【００９５】
Ｓ２１０において、スキーマ分離型接続部２４４は、スキーマ分離型データベース４２０から返ってきた検索結果をモデル切替部２４２へ返す。モデル切替部２４２は、検索結果を受信する。
【００９６】
マルチテナント型データベース４００の検索結果をクライアントシステム１０１へ返す処理の流れは、図９に示したものと同様である。
【００９７】
以下では、図１１を用いて、テナントＤのクライアントシステム１０１からサービスのリクエストが送信されたときのアクセス制御装置１００の動作（本実施の形態に係るアクセス制御方法、本実施の形態に係るプログラムの処理手順）について説明する。
【００９８】
既存アプリケーション５００にテナントＩＤを意識させずに既存アプリケーション５００を利用するために、既存パラメータに対するテナントＩＤの結合及び分離を行う流れは、図７に示したものと同様である。
【００９９】
図１１は、インスタンス分離型データベース４３０へのアクセスの流れを示すシーケンス図である。
【０１００】
Ｓ５０１〜Ｓ５０６の処理については、図８に示したＳ２０１〜Ｓ２０６の処理と同様である。
【０１０１】
Ｓ５０７において、モデル切替部２４２は、マルチテナント制御部２２０から受け取ったコネクションプール（接続先情報）を基に、接続先を切り替える。本例では、図３に示したように、テナントＤの接続先ＤＢモデルとして、インスタンス分離型データベース４３０が設定されているものとする。そのため、モデル切替部２４２は、インスタンス分離型接続部２４５に接続する。
【０１０２】
Ｓ５０８において、インスタンス分離型接続部２４５は、コネクション保持部２３０より取得したコネクションプールを用いてマルチテナント型データベース４００のインスタンス分離型データベース４３０に接続し、検索要求を出す。具体的には、インスタンス分離型接続部２４５は、既存アプリケーション５００により発行されたクエリ（例えば、ＳＱＬのＳＥＬＥＣＴ文）を、インスタンス分離型データベース４３０のテナントＡ用インスタンスに対して発行する。
【０１０３】
Ｓ５０９において、インスタンス分離型データベース４３０は、検索結果（具体的には、クエリの結果）をインスタンス分離型接続部２４５へ返す。
【０１０４】
Ｓ５１０において、インスタンス分離型接続部２４５は、インスタンス分離型データベース４３０から返ってきた検索結果をモデル切替部２４２へ返す。モデル切替部２４２は、検索結果を受信する。
【０１０５】
マルチテナント型データベース４００の検索結果をクライアントシステム１０１へ返す処理の流れは、図９に示したものと同様である。
【０１０６】
以上説明したように、本実施の形態では、既存アプリケーション５００を可能な限り流用した状態でマルチテナント化するために、既存アプリケーション５００の前後のインタフェース部分でテナントＩＤ（テナントごとに一意に割り振られる識別子）の埋め込み／取り出しを行う。
【０１０７】
マルチテナント対応でない既存アプリケーション５００ではテナントＩＤを扱うことができない。そこで、既存アプリケーション５００で利用しているパラメータ（例えば、ユーザＩＤ）にテナントＩＤを結合する。例えば、結合元パラメータ「ユーザＩＤ、テナントＩＤ」、結合先パラメータ「ユーザＩＤ」、セパレータ「−−」のように設定された結合ルールでテナントＩＤが「Ａ」、ユーザＩＤが「ＵＳＥＲ０１」のユーザの場合、既存パラメータのユーザＩＤは「Ａ−−ＵＳＥＲ０１」となる。このとき結合ルールを固定とするのではなく、柔軟に設定可能とすることで、例えば既存アプリケーション５００のユーザＩＤの文字数に制限がある場合は、ユーザ名のパラメータを結合先にするといったことが可能となる。また、マルチテナント化する既存アプリケーション５００が複数あり、既存アプリケーション５００の利用しているパラメータが異なる場合でも、既存アプリケーション５００ごとにルールを設定することで対応可能となる。
【０１０８】
本実施の形態に係るアクセス制御装置１００は、マルチテナントアプリケーションを実現するためのソフトウェア及びそれを格納・実行するハードウェアからなり、ＵＩ接続部２１０、ＤＢ接続部２４０、テナント情報結合設定テーブル３２０を備える。ＵＩ接続部２１０は、ユーザの所属するテナントのテナントＩＤを、テナント情報結合設定を基に、既存アプリケーション５００で使用されているパラメータに埋め込む。ＤＢ接続部２４０は、データベースのアクセスに必要なテナントＩＤを、テナント情報結合設定を基に、パラメータから取り出す。テナント情報結合設定テーブル３２０は、テナント情報結合設定として、テナントＩＤを埋め込むパラメータや、埋め込むための条件を管理する。
【０１０９】
従来技術では、既存アプリケーション５００を用いてデータベースからデータを読み出す場合、セッション情報からテナントＩＤ等を取得していたため、既存アプリケーション５００を通したデータとテナントＩＤとの対応付けがうまくいかない可能性がある。既存アプリケーション５００とデータベースとの間でセッションＩＤを取得できないと、テナントＩＤを取得することはできない。これに対し、本実施の形態では、ＵＩ接続部２１０からＤＢ接続部２４０にセッション情報（セッションＩＤ）を渡していない状態であっても、既存アプリケーション５００がテナントＩＤを意識する必要なく、ＤＢ接続部２４０にてテナントＩＤを取得することが可能である。
【０１１０】
また、本実施の形態では、データベースのモデルとして、表共有型、スキーマ分離型、インスタンス分離型が混在しているマルチテナント型データベース４００を利用する。
【０１１１】
複数テナントの情報を持つデータベースのモデルは、データベースの表の構成やインスタンスの構成によって、表共有型、スキーマ分離型、インスタンス分離型に分けられる。既存アプリケーション５００をマルチテナント化するにあたって、複数テナントのそれぞれが利用しているデータベースの形式はテナントによって異なる可能性が高く、対応可能なモデルが１つの場合は、データベースを移行する手間がかかってしまう。また、「集約度を上げたい」、「独自のスキーマを使いたい」といった利用者の様々なニーズに合わせてモデルを切り替えるような方式を実現できない。これに対し、本実施の形態では、データベース接続設定テーブル３３０でテナントごとに利用するデータベースのモデルが何かを管理し、マルチテナント型データベース４００へ接続する際にモデルを切り替える。モデルの切替時には、予めテナントごとに利用可能なデータベースへのコネクションを保持するコネクションプールを用意し、マルチテナント型データベース４００への接続時にはテナントに割り当てられたコネクションを選択することで、モデルの切替が可能となる。
【０１１２】
実施の形態２．
本実施の形態について、主に実施の形態１との差異を説明する。
【０１１３】
本実施の形態に係るアクセス制御装置１００の構成は、図１に示した実施の形態１のものと同様である。
【０１１４】
以下では、図１２を用いて、マルチテナントアプリケーションを利用するテナントを追加する際のアクセス制御装置１００の動作（本実施の形態に係るアクセス制御方法、本実施の形態に係るプログラムの処理手順）について説明する。
【０１１５】
図１２は、システム管理者のクライアントシステム１０２から新規にテナントを追加する処理の流れを示すシーケンス図である。
【０１１６】
Ｓ６０１において、システム管理者のクライアントシステム１０２は、マルチテナント制御部２２０に対し、テナントの登録要求を出す。このとき、テナント名及びテナントの利用するデータベースのモデルについてマルチテナント制御部２２０に通知する。
【０１１７】
Ｓ６０２において、マルチテナント制御部２２０は、マルチテナント管理データベース３００に対し、テナント管理テーブル３１０にテナント名を登録し、テナントＩＤを発行するよう要求する。
【０１１８】
Ｓ６０３において、マルチテナント管理データベース３００は、テナントを登録し、発行したテナントＩＤを返す。
【０１１９】
Ｓ６０４において、マルチテナント制御部２２０は、コネクション保持部２３０に対し、追加したテナント用のコネクションプールを発行するように要求する。
【０１２０】
Ｓ６０５において、コネクション保持部２３０は、新規テナント用のコネクションプールを生成し、プールＩＤを返す。ただし、テナントの利用するデータベースのモデルが表共有型データベース４１０だった場合、コネクション保持部２３０は、新規コネクションプールを生成せず、表共有型データベース４１０の共通のコネクションプールに対応するプールＩＤを返す。
【０１２１】
Ｓ６０６において、マルチテナント制御部２２０は、マルチテナント管理データベース３００に対し、データベース接続設定テーブル３３０に新規テナントのテナントＩＤ、接続先ＤＢモデル、プールＩＤを追加する更新を要求する。
【０１２２】
Ｓ６０７において、マルチテナント管理データベース３００は、データベース接続設定テーブル３３０の更新を行い、結果を返す。
【０１２３】
Ｓ６０８において、マルチテナント制御部２２０は、マルチテナント型データベース４００に対し、新規テナント用のデータ領域を追加するよう要求する。
【０１２４】
Ｓ６０９において、マルチテナント型データベース４００は、新規テナントのデータ領域を追加し、成否をマルチテナント制御部２２０に通知する。
【０１２５】
Ｓ６１０において、マルチテナント制御部２２０は、システム管理者のクライアントシステム１０２に対し、登録の成否を通知する。
【０１２６】
以上の動作により、マルチテナントアプリケーションを利用したいという新規テナントに対して、即時でアプリケーションの利用を開放することが可能となる。
【０１２７】
以上説明したように、本実施の形態では、マルチテナントサービスを提供する上で、マルチテナントアプリケーションを利用していなかったテナントが利用を希望する場合に、既存アプリケーション５００の改修なく、テナントの追加が可能である。そのために、本実施の形態では、マルチテナントアプリケーションのシステム管理者が管理用アプリケーションでテナントを登録した場合、マルチテナント制御部２２０によって新規テナントが利用するのに必要な設定を自動で行う。具体的には、マルチテナント型データベース４００に新規テナント用のデータ領域を確保し、データベースアクセス用のコネクションの設定を用意する。
【０１２８】
実施の形態３．
本実施の形態について、主に実施の形態１との差異を説明する。
【０１２９】
図１３は、本実施の形態に係るアクセス制御装置１００の構成を示すブロック図である。
【０１３０】
図１３において、アクセス制御装置１００は、ＤＢ接続部２４０の表共有型接続部２４３に、表共有型データベース４１０から受信した結果の整合性を確認するためのデータチェック部２４６を備える。その他の構成は、図１に示した実施の形態１のものと同様である。
【０１３１】
図１４は、マルチテナント管理データベース３００のデータベース接続設定テーブル３３０の構成例を示す図である。
【０１３２】
図１４において、データベース接続設定テーブル３３０は、図３に示した実施の形態１のものと同様に、テナントＩＤ、接続先ＤＢモデル、プールＩＤ、ＤＢチェック情報のカラムを含む。ＤＢチェック情報は、前述したように、特定のテーブルに格納されるデータについて設定された条件を示す。この条件は、接続先ＤＢモデルが表共有型データベース４１０の場合のみ設定される。本例において、データベース接続設定テーブル３３０は、テナントＩＤ「Ａ」に対応付けて、テナントＡのデータについてのチェック条件をＤＢチェック情報として格納している。また、データベース接続設定テーブル３３０は、テナントＩＤ「Ｂ」に対応付けて、テナントＢのデータについてのチェック条件をＤＢチェック情報として格納している。
【０１３３】
上記のように、本実施の形態において、マルチテナント管理データベース３００は、表共有型データベース４１０をアクセス対象とするテナントごとに、各テナントに共通のテーブルに格納されるデータについて設定された条件を記憶装置により予め記憶する。
【０１３４】
以下では、図１５を用いて、テナントＡのクライアントシステム１０１からサービスのリクエストが送信されたときのアクセス制御装置１００の動作（本実施の形態に係るアクセス制御方法、本実施の形態に係るプログラムの処理手順）について説明する。
【０１３５】
既存アプリケーション５００にテナントＩＤを意識させずに既存アプリケーション５００を利用するために、既存パラメータに対するテナントＩＤの結合及び分離を行う流れは、図７に示した実施の形態１のものと同様である。
【０１３６】
図１５は、表共有型データベース４１０へのアクセスの流れを示すシーケンス図である。
【０１３７】
Ｓ７０１〜Ｓ７０９の処理については、図８に示したＳ２０１〜Ｓ２０９の処理と同様である。
【０１３８】
Ｓ７１０において、表共有型接続部２４３は、表共有型データベース４１０からの検索結果に対し、データチェック部２４６を用いて他のテナントの情報が混ざっていないかどうか確認する。
【０１３９】
Ｓ７１１において、データチェック部２４６は、データベース接続設定テーブル３３０のＤＢチェック情報を基に、表共有型データベース４１０からの検索結果に対し、他のテナントの情報がないかどうかを処理装置により確認する。データチェック部２４６は、他のテナントの情報が混ざっていることを検知した場合、その情報を削除するか、あるいは、エラーを通知する。
【０１４０】
Ｓ７１２の処理については、図８に示したＳ２１０の処理と同様である。なお、Ｓ７１１でデータチェック部２４６がエラーを通知した場合は、検索結果としてエラーをモデル切替部２４２へ通知する。
【０１４１】
マルチテナント型データベース４００の検索結果をクライアントシステム１０１へ返す処理の流れは、図９に示したものと同様である。
【０１４２】
以上説明した動作により、マルチテナントアプリケーションからテナントＡのユーザへのサービス提供が行われる。テナントＢのクライアントシステム１０１からサービスのリクエストが送信されたときにも、同様の動作により、マルチテナントアプリケーションからテナントＢのユーザへのサービス提供が行われる。
【０１４３】
図１６は、Ｓ７１１におけるデータチェック部２４６の動作例を示す図である。
【０１４４】
図１６において、データチェック部２４６は、既存パラメータから取り出されたテナントＩＤに対応するＤＢチェック情報により設定された条件を含むクエリ（第２のクエリ）を表共有型データベース４１０に対して発行する。データチェック部２４６は、発行したクエリ（第２のクエリ）の結果と、Ｓ７０８で表共有型接続部２４３を介して既存アプリケーション５００により発行されたクエリ（第１のクエリ）の結果とを比較する。そして、データチェック部２４６は、比較の結果に基づいて、Ｓ７０８で表共有型接続部２４３を介して既存アプリケーション５００により発行されたクエリ（第１のクエリ）の結果の正否を処理装置により判定する。
【０１４５】
ここで、第１例として、データベース接続設定テーブル３３０において、テナントＡのＤＢチェック情報により、クエリのアクセス対象とするテーブル全てのテナントＩＤが「Ａ」であることがチェック条件として設定されているとする。そして、既存アプリケーション５００が、個人情報テーブル（ユーザ一覧）、組織情報テーブル（組織一覧）、配属情報テーブル（配属一覧）をアクセス対象として指定して、テナントＩＤ、ユーザ名、組織名を抽出する第１クエリを発行したとする。この場合、Ｓ７０８において、表共有型接続部２４３は、既存アプリケーション５００により発行された第１クエリ（例えば、ＳＱＬのＳＥＬＥＣＴ文）に、個人情報テーブル（ユーザ一覧）、組織情報テーブル（組織一覧）、配属情報テーブル（配属一覧）のテナントＩＤが「Ａ」であることを条件（例えば、ＷＨＥＲＥ句）として追加した上で、その第１クエリを表共有型データベース４１０に対して発行する。Ｓ７１１において、データチェック部２４６は、データベース接続設定テーブル３３０のＤＢチェック情報に基づき、個人情報テーブル（ユーザ一覧）、組織情報テーブル（組織一覧）、配属情報テーブル（配属一覧）のテナントＩＤが「Ａ」であることを条件として含み、第１クエリと同様に、個人情報テーブル（ユーザ一覧）、組織情報テーブル（組織一覧）、配属情報テーブル（配属一覧）をアクセス対象として指定して、テナントＩＤ、ユーザ名、組織名を抽出する第２のクエリを表共有型データベース４１０に対して発行する（この第１例では、第２クエリは、表共有型接続部２４３により発行される第１クエリと同一のクエリとなる）。データチェック部２４６は、第２のクエリの結果と第１のクエリの結果とを比較する。第２のクエリの結果と第１のクエリの結果とは一致するため、データチェック部２４６は、第１のクエリの結果が正しいと判定する。
【０１４６】
また、第２例として、データベース接続設定テーブル３３０において、テナントＡのＤＢチェック情報により、ユーザＩＤが「ＵＳＥＲ０１」又は「ＵＳＥＲ０２」であることがチェック条件として設定されているとする。そして、既存アプリケーション５００が、上記第１例と同じ第１クエリを発行したとする。この場合、Ｓ７０８において、表共有型接続部２４３は、既存アプリケーション５００により発行された第１クエリ（例えば、ＳＱＬのＳＥＬＥＣＴ文）に、上記第１例と同じ条件を追加した上で、その第１クエリを表共有型データベース４１０に対して発行する。Ｓ７１１において、データチェック部２４６は、データベース接続設定テーブル３３０のＤＢチェック情報に基づき、個人情報テーブル（ユーザ一覧）、配属情報テーブル（配属一覧）のユーザＩＤが「ＵＳＥＲ０１」又は「ＵＳＥＲ０２」であることを条件として含み、第１クエリと同様に、個人情報テーブル（ユーザ一覧）、組織情報テーブル（組織一覧）、配属情報テーブル（配属一覧）をアクセス対象として指定して、テナントＩＤ、ユーザ名、組織名を抽出する第２のクエリを表共有型データベース４１０に対して発行する。データチェック部２４６は、第２のクエリの結果と第１のクエリの結果とを比較する。第２のクエリの結果と第１のクエリの結果とは一致するため、データチェック部２４６は、第１のクエリの結果が正しいと判定する。
【０１４７】
以上説明したように、本実施の形態では、表共有型データベース４１０へアクセスする際に検索結果に他のテナントの情報が混ざることなく、対象のテナントの情報のみを確実に取得するためのチェック機能を実現する。
【０１４８】
マルチテナントアプリケーションのデータベースが表共有型モデルの場合、データベースのテーブル上では複数のテナントの情報が混在しているため、検索のＳＱＬでＷＨＥＲＥ句により別のテナントが混ざらないようにする必要がある。しかしながら、検索のＳＱＬが複雑になってくる場合、単純にＷＨＥＲＥ句にテナント条件を追加するだけではテナントの情報を分離しきれないケースも考えられる。例えば、検索の際に複数のテーブルをＪＯＩＮ句により結合したＳＱＬを用いる場合、他のテナントの情報が紛れ込んでしまう可能性がある。これに対し、本実施の形態では、データベースの検索結果に対し、テナントごとの条件をＷＨＥＲＥ句に記述したＳＱＬで再度検索をかけることにより、別のテナントの情報が含まれるのを防ぐことが可能になる。
【０１４９】
以上、本発明の実施の形態について説明したが、これらの実施の形態のうち、２つ以上を組み合わせて実施しても構わない。あるいは、これらの実施の形態のうち、１つを部分的に実施しても構わない。あるいは、これらの実施の形態のうち、２つ以上を部分的に組み合わせて実施しても構わない。なお、本発明は、これらの実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【０１５０】
１００  アクセス制御装置、１０１，１０２  クライアントシステム、２００  マルチテナントアプリケーション基盤、２１０  ＵＩ接続部、２２０  マルチテナント制御部、２３０  コネクション保持部、２４０  ＤＢ接続部、２４１  テナント分離部、２４２  モデル切替部、２４３  表共有型接続部、２４４  スキーマ分離型接続部、２４５  インスタンス分離型接続部、２４６  データチェック部、３００  マルチテナント管理データベース、３１０  テナント管理テーブル、３２０  テナント情報結合設定テーブル、３３０  データベース接続設定テーブル、４００  マルチテナント型データベース、４１０  表共有型データベース、４２０  スキーマ分離型データベース、４３０  インスタンス分離型データベース、５００  既存アプリケーション、９０１  ＬＣＤ、９０２  キーボード、９０３  マウス、９０４  ＦＤＤ、９０５  ＣＤＤ、９０６  プリンタ、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信ボード、９２０  ＨＤＤ、９２１  オペレーティングシステム、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群。
【図１】
0005773910.tif 000002
【図２】
0005773910.tif 000003
【図３】
0005773910.tif 000004
【図４】
0005773910.tif 000005
【図５】
0005773910.tif 000006
【図６】
0005773910.tif 000007
【図７】
0005773910.tif 000008
【図８】
0005773910.tif 000009
【図９】
0005773910.tif 000010
【図１０】
0005773910.tif 000011
【図１１】
0005773910.tif 000012
【図１２】
0005773910.tif 000013
【図１３】
0005773910.tif 000014
【図１４】
0005773910.tif 000015
【図１５】
0005773910.tif 000016
【図１６】
0005773910.tif 000017