(57)【要約】  マルチテナント型でサービスを提供する仕組みにおいて、各テナントで固有のデータを個別に分離して保持するとともに、各テナントで共通となるデータを一元的に保持し、これらのデータを各テナントがシームレスに取り扱うことを可能とするサービス提供システムである。データベースは共通スキーマと各テナントにそれぞれ対応した個別スキーマとを有し、共通スキーマには、各テナントが共通にアクセス可能な共通データと、各テナントのみがそれぞれアクセス可能な固有データとを保持する。各個別スキーマにはそれぞれ、共通スキーマ上の実データにアクセスするためのビューを有し、ビューは、テナントの識別情報をパラメータとし、共通データおよび識別情報に対応するテナントに係る固有データのみにアクセス可能である。アプリケーションは、ユーザが利用するテナントを判別し、対応する個別スキーマのビューを介してデータベースにアクセスする。
2017090142.tif 000002
【特許請求の範囲】
【請求項１】
複数のテナントが相乗りでユーザに対してネットワークを介して個別にサービスを提供するサービス提供システムであって、
前記サービスに係る処理を実行するアプリケーションを有するアプリケーションサーバと、
前記処理に用いられるデータをデータベース上に保持するデータベースサーバと、を有し、
前記データベースは、共通スキーマと、前記各テナントにそれぞれ対応した個別スキーマと、を有し、
前記共通スキーマには、前記各テナントが共通にアクセス可能な共通データと、対応する前記各テナントのみがそれぞれアクセス可能な固有データと、を保持し、
前記各個別スキーマには、それぞれ、前記共通スキーマ上の実データにアクセスするためのビューを有し、
前記ビューは、前記テナントの識別情報をパラメータとし、前記共通データおよび前記識別情報に対応する前記テナントに係る前記固有データのみにアクセス可能であり、
前記アプリケーションは、前記ユーザが利用する前記テナントを判別し、判別した前記テナントに対応する前記個別スキーマの前記ビューを介して前記データベース上のデータにアクセスする、サービス提供システム。
【請求項２】
請求項１に記載のサービス提供システムにおいて、
前記アプリケーションサーバは、前記アプリケーションが前記データベースにアクセスするためのコネクションを複数プーリングしたコネクションプールを前記個別スキーマ毎に有し、
前記アプリケーションは、前記ユーザが利用するものとして判別した前記テナントに対応する前記個別スキーマに係る前記コネクションプールを特定し、特定した前記コネクションプールに含まれる前記コネクションを利用して前記データベースにアクセスする、サービス提供システム。
【請求項３】
請求項２に記載のサービス提供システムにおいて、
前記コネクションの属性値には、前記コネクションに係る前記個別スキーマに対応する前記テナントの識別情報が設定されている、サービス提供システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークを介してユーザにサービスを提供する技術に関し、特に、個別にサービスを提供する事業者が複数相乗りで利用するマルチテナント型のサービス提供システムに適用して有効な技術に関するものである。
【背景技術】
【０００２】
ＡＳＰ（Application Service Provider）やＳａａＳ（Software as a Service）などにより、企業などの事業者がソフトウェアやアプリケーションの機能をネットワークを介してサービスとして利用者に提供する形態が広く用いられてきている。特に、ＳａａＳのように、システムベンダがデータセンターやクラウド環境上に構築して運用するシステム上に同種のサービスを提供する複数の企業や事業者が相乗りしてサービスを提供する形態のマルチテナント型の仕組みの利用も広がってきている。【０００３】
マルチテナント型においても、セキュリティ等の観点から、相乗りする個々のテナントは分離独立して取り扱われる必要があり、各テナントが利用・参照することができるデータは自身に関するものに限られ、他のテナントに関するデータは利用・参照できないようにアクセス制御がされる必要がある。【０００４】
マルチテナント型でのサービス提供に関する技術として、例えば、特開２０１０−２６６５３号公報（特許文献１）には、ログイン要求に基づいてユーザＩＤを取得し、該ユーザＩＤに対応するテナントＩＤをテナントＩＤ管理テーブルから取得して識別情報記憶手段に記録するとともに、アプリケーションソフトウェアからデータベースへのアクセス要求を受け付けると、識別情報記憶手段に記録されているテナントＩＤに基づいて、データベースにおける複数のデータ領域のうち該テナントＩＤに対応するデータ領域に対するアクセス要求をデータベース管理部に送信することで、利用者ごとに異なるデータ領域を有するデータベースにアクセスするアプリケーションの開発を簡便化させる技術が記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−２６６５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１に記載されたような技術を用いることで、マルチテナント型のＳａａＳ等の仕組みにおいて、テナント毎に固有のデータをデータベース上の異なる領域（テーブル等）に保持した上で、アプリケーションがデータベースにアクセスする際のテナント毎の各テーブルへのアクセス制御に係る部分をアプリケーションから隠蔽することができる。また、テナント毎にテーブルを異なるスキーマで構成することについても記載されている。【０００７】
しかしながら、特許文献１に記載された技術では、上記のアクセス制御に係る部分をアプリケーションから隠蔽するための機能（特許文献１における図１のマルチテナント制御部１４）を開発・実装することが必要となる。【０００８】
また、例えば証券会社などの金融機関における業務では、証券取引所や日本銀行等の決済機関など、公共的な役割を有する機関との間で授受されるデータや、通貨に係るデータなど、各社において共通となるデータを取り扱うことが他の業種と比べて多い傾向にある。したがって、マルチテナント型のＳａａＳ等の仕組みにおいて、全てのデータを各テナントで個別に分離して保持するのではなく、各テナントで共通となるデータは一元的に保持して各テナントが利用可能とする方がより効率的である。【０００９】
しかしながら、特許文献１に記載された技術を含む従来技術では、このような共通データを含むデータベースの構成を考慮しておらず、各テナントが利用するデータは全て個別に分離して保持する構成となっている。【００１０】
そこで本発明の目的は、マルチテナント型でサービスを提供する仕組みにおいて、各テナントで固有のデータを個別に分離して保持するとともに、各テナントで共通となるデータを一元的に保持し、これらのデータを各テナントがシームレスに取り扱うことを可能とするサービス提供システムを提供することにある。【００１１】
本発明の前記ならびにその他の目的と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１２】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、以下のとおりである。【００１３】
本発明の代表的な実施の形態によるサービス提供システムは、複数のテナントが相乗りでユーザに対してネットワークを介して個別にサービスを提供するサービス提供システムであって、前記サービスに係る処理を実行するアプリケーションを有するアプリケーションサーバと、前記処理に用いられるデータをデータベース上に保持するデータベースサーバと、を有する。【００１４】
前記データベースは、共通スキーマと、前記各テナントにそれぞれ対応した個別スキーマと、を有し、前記共通スキーマには、前記各テナントが共通にアクセス可能な共通データと、対応する前記各テナントのみがそれぞれアクセス可能な固有データと、を保持し、前記各個別スキーマには、それぞれ、前記共通スキーマ上の実データにアクセスするためのビューを有し、前記ビューは、前記テナントの識別情報をパラメータとし、前記共通データおよび前記識別情報に対応する前記テナントに係る前記固有データのみにアクセス可能である。また、前記アプリケーションは、前記ユーザが利用する前記テナントを判別し、判別した前記テナントに対応する前記個別スキーマの前記ビューを介して前記データベース上のデータにアクセスする。
【発明の効果】
【００１５】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば以下のとおりである。【００１６】
すなわち、本発明の代表的な実施の形態によれば、マルチテナント型でサービスを提供する仕組みにおいて、各テナントで固有のデータを個別に分離して保持するとともに、各テナントで共通となるデータを一元的に保持し、これらのデータを各テナントがシームレスに取り扱うことが可能となる。
【図面の簡単な説明】
【００１７】
【図１】本発明の一実施の形態であるサービス提供システムの構成例について概要を示した図である。
【発明を実施するための形態】
【００１８】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一部には原則として同一の符号を付し、その繰り返しの説明は省略する。一方で、ある図において符号を付して説明した部位について、他の図の説明の際に再度の図示はしないが同一の符号を付して言及する場合がある。
【００１９】
図１は、本発明の一実施の形態であるサービス提供システムの構成例について概要を示した図である。本実施の形態のサービス提供システム１は、例えば、データセンター内のサーバ機器や、クラウドコンピューティング環境上に構築された仮想サーバにより実装された１つ以上のアプリケーションサーバ１０および１つ以上のデータベース（ＤＢ）サーバ２０により構成される。このサービス提供システム１上に複数のテナントが相乗りして共同利用する形で、顧客等のユーザが利用する情報処理端末であるユーザ端末３に対してインターネット等のネットワーク（ＮＷ）２を介して各テナントがサービスを提供する。
【００２０】
アプリケーションサーバ１０とＤＢサーバ２０は図示しないネットワークを介して相互に通信することが可能であるが、アプリケーションサーバ１０とＤＢサーバ２０とを同一のサーバシステム上に構築してネットワークを介さずにプロセス間通信等により通信する構成とすることも可能である。また、アプリケーションサーバ１０とＤＢサーバ２０以外にも、例えば、図示しないＷｅｂサーバや負荷分散サーバなどを有していてもよい。
【００２１】
アプリケーションサーバ１０は、図示しないＯＳ（Operating System）やＤＢＭＳ（DataBase Management System）などのミドルウェア上で稼働するソフトウェアプログラムとして実装されたアプリケーション１１や認証部１２などの各部を有する。さらに、後述するように一般的なＤＢＭＳが有するコネクションプールの機能を利用しており、ＤＢＭＳの構成要素として実装されているコネクションプール管理部１３を有している。
【００２２】
アプリケーション１１は、サービス提供システム１がユーザ端末３に対して提供することができるサービスや業務に係る処理を実装したソフトウェアプログラムである。アプリケーション１１の実行により提供するサービス等の内容に応じて具体的な処理内容は様々であるが、少なくともＤＢサーバ２０上に保持されたデータにアクセスする機能を有する。基本的には当該サービス提供システム１を共同利用する各テナント間で共通のプログラムやモジュールによって実装されているものとする。
【００２３】
認証部１２は、例えばアプリケーション１１からの要求に応じて、図示しないユーザ管理テーブル等を参照し、ユーザ端末３を利用するユーザがサービス提供システム１により提供されるサービスを利用する権限を有するか否かのユーザ認証を行う。その際に、いずれのテナントのユーザであるかについても判別し、利用対象のテナントの識別情報（例えば「会社コード」や「テナントＩＤ」等）についてもアプリケーション１１に応答する。アプリケーション１１は、サービスに係るトランザクションを発生させる際に、対象のユーザに係るテナントの識別情報を入力パラメータとして指定する。
【００２４】
コネクションプール管理部１３の設定内容については後述する。
【００２５】
一方、ＤＢサーバ２０は、図示しないＯＳやＤＢＭＳなどのミドルウェア上で稼働するデータベースとして、各テナントの固有のデータ（固有データ）を分離して個別のテーブル上に保持するとともに、上述したように、各テナントで共通となるデータ（共通データ）を一元的に保持する。本実施の形態では、一般的なＤＢＭＳが有するスキーマ機能によりデータベース上に複数のスキーマを定義することで上記のようなデータ構成を実現する。
【００２６】
図１の例では、各テナントのデータへのアクセスに対応した個別のスキーマ（図中ではＡ〜Ｄの４つのテナントに対応したスキーマＡ（２１ａ）〜スキーマＤ（２１ｄ）で示され、以下ではこれらを個別スキーマ２１と総称する場合がある）と、共通スキーマ２３が定義されている。個別スキーマ２１は、図１の例では４つ定義されているが、実際にはサービス提供システム１によりサービスを提供するテナントの数だけ定義される。
【００２７】
共通スキーマ２３には、共通データ２４および固有データ（図中ではＡ〜Ｄの４つのテナントに対応したＡ固有データ２５ａ〜Ｄ固有データ２５ｄで示され、以下ではこれらを固有データ２５と総称する場合がある）の実体をそれぞれ保持している。これらのデータは、それぞれ別のテーブル等として異なる領域に保持してもよいし、１つのテーブルに共通データ２４や複数の固有データ２５をまとめて保持してもよい。いずれの場合も、各固有データ２５はそれぞれ、対象のテナントを一意に識別する会社コード等の識別情報により特定してアクセスすることができるものとする。
【００２８】
そして、各個別スキーマ２１では、共通スキーマ２３上に保持されたデータの実体にアクセスするためのビュー２２が定義されている。本実施の形態では、ビュー２２は、テナントの識別情報の指定をパラメータとして受け付けることで、テナントに関わらずにアクセス可能な共通データ２４と、対象のテナントに係る固有データ２５にのみアクセス可能となるように定義されている。
【００２９】
具体的には、例えば、テナントＡに対応したスキーマＡ（２１ａ）では、テナントＡの会社コード等の識別情報が指定されることにより、共通データ２４、およびテナントＡの識別情報で特定されるＡ固有データ２５ａにのみアクセス可能となるよう、ＤＢＭＳのレイヤーでアクセス範囲が制限される。他のテナントに対応した個別スキーマ２１についても同様であり、共通データ２４および対象のテナントに対応する固有データ２５のみアクセス可能となるようアクセス範囲が制限される。本実施の形態では、アプリケーション１１は、このビュー２２を介してのみデータベースにアクセスするように実装されているものとする。
【００３０】
このように、共通スキーマ２３上に保持されたデータの実体に対して、アプリケーション１１がテナント毎の個別スキーマ２１のビュー２２を介してのみアクセスするように制限することで、データのアクセス範囲を自身のテナントに関連するもののみに制限することができる。これにより、セキュリティを向上させるとともに、テナント毎のデータ量の相違による他のテナントの処理性能への影響を抑止する。例えば、テナントＡの保持するデータ量がテナントＢの保持するデータ量の１００倍や１０００倍などの場合に、テナントＡに関連するデータに対する大量のアクセスによってテナントＢに関連するデータに対するアクセスが遅延する等の影響が生じ得ることを可能な限り抑止する。
【００３１】
本実施の形態では、テナント毎にスキーマ（個別スキーマ２１）を分けたことに対応して、さらに、アプリケーションサーバ１０のコネクションプール管理部１３において、個別スキーマ２１毎に確立した複数のコネクション（図中ではスキーマＡ（２１ａ）、スキーマＢ（２１ｂ）にそれぞれ対応したコネクション（スキーマＡ）（１５ａ）、コネクション（スキーマＢ）（１５ｂ）で示され、以下ではこれらをコネクション１５と総称する場合がある）をプーリングしたコネクションプール（図中ではスキーマＡ（２１ａ）、スキーマＢ（２１ｂ）にそれぞれ対応したコネクションプール（スキーマＡ）（１４ａ）、コネクションプール（スキーマＢ）（１４ｂ）で示され、以下ではこれらをコネクションプール１４と総称する場合がある）を作成するものとしている。
【００３２】
アプリケーション１１は、データベースにアクセスする際に、対象のテナントに対応する個別スキーマ２１のコネクションプール１４にプーリングされているコネクション１５を用いるものとする。これにより、アプリケーション１１は、テナントの相違によるアクセス可能なデータの範囲を特に意識することなく、自動的に対象の個別スキーマ２１のビュー２２にアクセスし、当該ビュー２２を介して共通スキーマ２３上の共通データ２４および自社の固有データ２５にのみアクセス可能となるようアクセス制御がされる。
【００３３】
具体的には、アプリケーション１１が使用する各コネクション１５には、その属性値として、属する個別スキーマ２１に対応するテナントの会社コード等の識別情報が予め設定されており、対象の個別スキーマ２１のビュー２２では、使用するコネクション１５の属性値からテナントの識別情報を取得してパラメータとして用いる。図１の例では、コネクション（スキーマＡ）１５ａには属性値に会社コード「００１」が設定されており、スキーマＡ（２１ａ）では、ビュー２２がコネクション（スキーマＡ）１５ａの属性値からこの会社コード「００１」の値を取得してパラメータとして用いる。これにより、アクセス可能なデータの範囲は、共通データ２４および自身の会社コード「００１」に対応する固有データ２５のみに制限される。
【００３４】
アプリケーション１１は、例えば、トランザクションにおける入力情報（テナントを識別することができる情報）に基づいて、利用するコネクションプール１４を判定する。例えば、ユーザがアプリケーション１１の利用開始時に認証部１２を介してユーザ認証を行ったときに、認証部１２が当該ユーザが属するテナントの識別情報を併せて応答し、この情報をアプリケーション１１のセッションに関連する情報として保持しておく。アプリケーション１１は、当該識別情報をトランザクションにおける入力情報として利用する。
【００３５】
また、アプリケーション１１が利用するコネクションプール１４の判定については、例えば、アプリケーションサーバ１０の起動時にコネクションプール１４の識別情報とテナントの識別情報との対応関係を予め作成してメモリテーブル等に保持しておき、アプリケーション１１がこれを参照して、ユーザが属するテナントの識別情報に基づいて対応するコネクションプール１４を特定する。
【００３６】
アプリケーション１１が実際に使用する各コネクション１５には、上述したように属性値にテナントの会社コード等の識別情報が予め設定されている。コネクション１５の属性値への識別情報の設定は、例えば、アプリケーションサーバ１０の起動時におけるコネクションプール１４およびコネクション１５の作成時に、ＤＢＭＳのログオントリガ機能を用いて各コネクション１５に対して自動的に設定することができる。
【００３７】
このように、本実施の形態では、テナント毎にスキーマを分けて、共通データ２４と固有データ２５でデータのアクセス範囲を制限するのに加えて、スキーマ毎に個別にコネクションプール１４を設ける。これにより、アプリケーション１１の実装からデータベースアクセスにおけるマルチテナントに係る部分をＤＢＭＳのレイヤーで隠蔽して、共通データ２４と固有データ２５に対するシームレスなアクセスを容易に実現することが可能となる。また、テナント間のセキュリティを向上させるとともに、テナント毎のデータ量の相違に基づく全体の処理性能への影響を低減し、性能向上を図ることができる。
【００３８】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は上記の実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。例えば、上記の実施の形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、上記の実施の形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【産業上の利用可能性】
【００３９】
本発明は、個別にサービスを提供する事業者が複数相乗りで利用するマルチテナント型のサービス提供システムに利用可能である。
【符号の説明】
【００４０】
１…サービス提供システム、２…ネットワーク、３…ユーザ端末、
１０…アプリケーションサーバ、１１…アプリケーション、１２…認証部、１３…コネクションプール管理部、１４…コネクションプール、１４ａ、ｂ…コネクションプール（スキーマＡ、Ｂ）、１５…コネクション、１５ａ、ｂ…コネクション（スキーマＡ、Ｂ）、
２０…ＤＢサーバ、２１…個別スキーマ、２１ａ〜ｄ…スキーマＡ〜Ｄ、２２…ビュー、２３…共通スキーマ、２４…共通データ、２５…固有データ、２５ａ〜ｄ…Ａ〜Ｄ固有データ
【図１】
2017090142.tif 000003
【国際調査報告】
2017090142.tif 000004
2017090142.tif 000005
2017090142.tif 000006
2017090142.tif 000007