(57)【要約】【課題】既存のアプリケーションを変更することなく、複数ユーザがコンピュータシステムのデータベースにアクセスすることを可能とする。 【解決手段】  複数のクライアントコンピュータに接続する情報処理装置であって、第１のクライアントコンピュータより第１のリクエストを受信した場合、第１のクライアントコンピュータに関する情報を第１の管理情報に格納し、データベースにアクセスするアクセス言語を作成する場合、第１の管理情報より第１のクライアントコンピュータに関する情報を読み出し、アクセス言語に含まれるテーブル名に第１のクライアントコンピュータに関する情報を付加し、作成したアクセス言語を用いて前記データベースにアクセスする、情報処理装置である。【選択図】図３
2011113103.tif 000002
【特許請求の範囲】
【請求項１】
複数のクライアントコンピュータに接続する情報処理装置であって、
前記複数のクライアントコンピュータから受信したリクエスト毎に関連する処理を管理する複数の管理情報と、を格納するメモリと、
前記メモリに格納される前記管理情報を参照して、前記リクエストに関する処理を実行するプロセッサと、
前記複数のクライアントコンピュータに関する情報を含むテーブル名を有する複数のテーブルから構成されるデータベースを格納する記憶装置と、を含み、
前記プロセッサは、複数のクライアントコンピュータに含まれる第１のクライアントコンピュータより第１のリクエストを受信した場合、前記第１のクライアントコンピュータに関する情報を前記第１のリクエストに関連する第１の管理情報に格納し、
前記プロセッサは、前記第１のリクエストをもとに前記データベースにアクセスするアクセス言語を作成する場合、前記第１の管理情報より前記第１のクライアントコンピュータに関する情報を読み出し、前記アクセス言語に含まれるアクセス先テーブル名に前記第１のクライアントコンピュータに関する情報を付加し、
前記プロセッサは、前記作成したアクセス言語を用いて前記データベースにアクセスする、ことを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置であって、
前記プロセッサは、前記第１のクライアントコンピュータより前記第１のリクエストを受信した場合、前記複数の管理情報より管理情報を選択し、前記選択した管理情報を前記第１の管理情報とする、ことを特徴とする情報処理装置。
【請求項３】
請求項２に記載の情報処理装置であって、
前記複数の管理情報より前記管理情報を選択する際、他のクライアントコンピュータから受信したリクエストに関する処理に使用されていない管理情報を選択する、ことを特徴とする情報処理装置。
【請求項４】
請求項３に記載の情報処理装置であって、
前記プロセッサは、前記第１のクライアントコンピュータから受信した認証情報を元に、前記第１のクライアントコンピュータに関する情報を取得する、ことを特徴とする情報処理装置。
【請求項５】
請求項４に記載の情報処理装置であって、
前記第１のクライアントコンピュータに関する情報は、前記第１のクライアントコンピュータが所属する組織名である、ことを特徴とする情報処理装置。
【請求項６】
請求項５に記載の情報処理装置であって、
前記アクセス言語は、ＳＱＬ言語である、ことを特徴とする情報処理装置。
【請求項７】
請求項６に記載の情報処理装置であって、
前記アクセス言語に含まれるｉｎｆｏ、ｆｒｏｍ、ｔａｂｌｅのいずれかの単語の後ろに前記第１のクライアントコンピュータに関する情報を付加する処理により、前記アクセス言語に含まれる前記アクセス先テーブル名に前記第１のクライアントコンピュータに関する情報を付加する、ことを特徴とする情報処理装置。
【請求項８】
請求項６に記載の情報処理装置であって、
前記アクセス言語に含まれるドットの前に前記第１のクライアントコンピュータに関する情報を付加する処理により、前記アクセス言語に含まれる前記アクセス先テーブル名に前記第１のクライアントコンピュータに関する情報を付加する、ことを特徴とする情報処理装置。
【請求項９】
請求項７に記載の情報処理装置であって、
前記複数の管理情報は、それぞれ、単一のプログラムによりアクセス可能な第１の領域と、複数のプログラムによりアクセス可能な第２の領域と、を含み、
前記第１のクライアントコンピュータに関する情報を前記第１のリクエストに関連する前記第１の管理情報に格納する際、前記第１の管理情報の前記第２の領域に格納することを特徴とする情報処理装置。
【請求項１０】
請求項９に記載の情報処理装置であって、
前記複数の管理情報は、スレッド管理情報であり、
前記第１の領域は、スタック領域とＣＰＵレジスタ領域を含み、
前記第２の領域は、スレッドローカル領域を含む、
ことを特徴とする情報処理装置。
【請求項１１】
請求項１に記載の情報処理装置であって、
前記プロセッサは、前記第１のリクエストに関連する処理を実行している場合に、複数のクライアントコンピュータに含まれる第２のクライアントコンピュータより第２のリクエストを受信した場合、前記第２のクライアントコンピュータに関する情報を前記第１の管理情報とは異なり、前記第２のリクエストに関連する第２の管理情報に格納し、
前記プロセッサは、前記第２のリクエストをもとに前記データベースにアクセスするアクセス言語を作成する場合、前記第２の管理情報より前記第２のクライアントコンピュータに関する情報を読み出し、前記アクセス言語に含まれるアクセス先テーブル名に前記第２のクライアントコンピュータに関する情報を付加し、
前記プロセッサは、前記作成したアクセス言語を用いて前記データベースにアクセスする、ことを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のユーザ（組織）により利用されるコンピュータシステムに関し、特にテーブルをユーザ（組織）毎に格納するデータベースへアクセスするサーバに関する。
【背景技術】
【０００２】
これまでクライアント上で実行するデスクトップアプリケーションとして実装されてきた企業内の業務システムの多くがＷｅｂ上のサービスである、ＳａａＳ（Ｓｏｆｔｗａｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ）として提供されはじめている。
【０００３】
ＳａａＳを提供するコンピュータシステムの特徴として、マルチテナント型のコンピュータシステムが挙げられる。マルチテナントとは、複数のユーザ（組織、又はテナントとも言う。）が、１つのコンピュータシステム（例えば、サーバ及びデータベースを含む。）にアクセスする形態を意味する。マルチテナント型のコンピュータシステムを提供するためには、データを格納するデータベースにおいてユーザごとにデータを管理する必要がある。ここでデータベースとは、例えばＯｒａｃｌｅ（登録商標）  Ｄａｔａｂａｓｅ、ＭｙＳＱＬ（登録商標）、ＰｏｓｔｇｒｅＳＱＬ（米国の登録商標）などのリレーショナルデータベースのことを指す。リレーショナルデータベースは、同じ種類のデータの集合をテーブル単位で管理するデータベースを指す。例えばユーザに関するデータはｕｓｅｒｓテーブルで、本に関するデータはｂｏｏｋｓテーブルで管理する。テーブルはデータの属性を表すカラムを持っている。例えばユーザの名前属性はｕｓｅｒｓテーブルのｎａｍｅカラムに保存する。
【０００４】
特許文献１には、マルチテナントデータベース環境の構築方法に関する技術が開示されている。特許文献１に記載の技術により、１つのデータベースを複数の組織のユーザが利用することが可能となる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２００９−５１８７１３
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１に記載の技術では、次で説明するようにデータベースの構造が特殊であり、様々な問題が生じる。
【０００７】
図１乃至図２を用いて特許文献１に記載のマルチテナントデータベース環境にてアクセスされるデータベースの構造の概要を説明する。
【０００８】
図１は、データベースの構造の一例を示す図である。データベースは、Ｄａｔａテーブル１１０、Ｏｂｊｅｃｔｓテーブル１２０、Ｆｉｅｌｄｓテーブル１３０からなる。Ｄａｔａテーブル１１０は、実際の値を格納する。Ｆｉｅｌｄｓテーブル１３０は、Ｄａｔａテーブル１１０の値が、どのフィールド属するかを表す。
【０００９】
図２は、引用文献１のマルチテナントデータベース環境において管理されている統合テーブル２１０の一例を示す。「ＯｒｇＩＤ２１２」は、組織名（組織Ｘ、組織Ｙ）を示す。つまり、複数の組織のテーブルを組織ごとに管理せずに、統合テーブルとして１つのＤａｔａテーブルである統合テーブル２１０にて管理する。
他のカラムは、以下の内容を示す。ＧＵＩＤ２１１は、レコードごとに付与されるユニークなＩＤである。ＯｂｊＩＤ２１２は、レコードが所属するグループを表す。関連するレコードは同じＯｂｊＩＤを持つ。レコードの値は、Ｖａｌｕｅ１  ２１５、Ｖａｌｕｅ２  ２１６、・・・に格納され、これらがどのフィールドの値だったかは別のＦｉｅｌｄｓテーブルを参照することにより把握される。
【００１０】
このように、従来のマルチテナントデータベース環境においては、新たに組織名を示す「ＯｒｇＩＤ２１２」の列を追加して管理しなければならず、既存のアプリケーションのデータベースの構造と異なるため、構造の異なるデータベースへアクセスするための新規にアプリケーションを開発するか、既存のアプリケーションのソースコードを修正する必要があるという課題がある。
【課題を解決するための手段】
【００１１】
上記課題を解決するための情報処理装置は、複数のクライアントコンピュータに接続する情報処理装置であって、前記複数のクライアントコンピュータから受信したリクエスト毎に関連する処理を管理する複数の管理情報と、を格納するメモリと、前記メモリに格納される前記複数の管理情報を参照して、前記リクエストに関する処理を実行するプロセッサと、前記複数のクライアントコンピュータに関する情報を含むテーブル名を有する複数のテーブルから構成されるデータベースを格納する記憶装置と、を含み、前記プロセッサは、複数のクライアントコンピュータに含まれる第１のクライアントコンピュータより第１のリクエストを受信した場合、前記第１のクライアントコンピュータに関する情報を前記第１のリクエストに関連する第１の管理情報に格納し、前記プロセッサは、前記第１のリクエストをもとに前記データベースにアクセスするアクセス言語を作成する場合、前記第１の管理情報より前記第１のクライアントコンピュータに関する情報を読み出し、前記アクセス言語に含まれるアクセス先テーブル名に前記第１のクライアントコンピュータに関する情報を付加し、前記プロセッサは、前記作成したアクセス言語を用いて前記データベースにアクセスする、ことを特徴とする情報処理装置である。
【発明の効果】
【００１２】
本発明によれば、既存のアプリケーションを変更することなく、複数ユーザがコンピュータシステムのデータベースにアクセス可能となる。 
【図面の簡単な説明】
【００１３】
【図１】データベースの構造の一例を示す図である。
【図２】従来技術のマルチテナントデータベース環境において管理されてているテーブルの例を示す。
【図３】実施例１における、コンピュータシステムの全体構成を示す図である。
【図４】実施例１における、組織ごとの情報を含むテーブルの一例を示す図である。
【図５】実施例１における、スレッド管理情報の一例を示す図である。
【図６】実施例１における、スレッドスケジューリングプログラムの処理の一例を示す図である。
【図７】実施例１における、マルチテナント対応認証プログラムの処理の一例を示す図である。
【図８】実施例１における、マルチテナント対応データベース接続プログラムの処理の一例を示す図である。
【図９】実施例１における、データベース接続管理情報の一例を示す図である。
【図１０】実施例２における、コンピュータシステムの全体構成を示す図である。
【図１１】実施例２における、マルチテナント対応データベース接続プログラムＢの処理を示す図である。
【発明を実施するための形態】
【００１４】
以下、図面を参照して、本発明の実施例の一例を説明する。
【実施例１】
【００１５】
以下、本発明を実施するための第１の形態を説明する。
【００１６】
図３は、本実施例における、コンピュータシステムの全体構成図である。
本発明の実施の形態に係るコンピュータシステムには、ネットワークに接続された複数の情報処理装置３０１、３１０が含まれる。情報処理装置には、クライアントコンピュータである１台以上の情報処理装置（以下、クライアント）３１０、クライアントからのリクエストを受け付けて処理を行う情報処理装置（以下、サーバ）３０１、が含まれる。なお、クライアント３１０は、ユーザの数だけ存在しうるが、図３では説明のため２つだけ示している。従って、クライアント３１０の数はこれに限定されるものではない。
【００１７】
クライアント３１０を利用するユーザは「組織」に属している。「組織」とは、例えばA会社や、B部署などであり、その単位は限定されるものではない。そして、クライアント３１０は、本マルチテナント対応アプリケーションを利用するために、サーバ３０１に対して組織名情報を含んだ認証情報を送信する。認証情報の一例として、ユーザＩＤに、組織名を付加する方法がある。組織ｘｘｘに属するユーザａａａの場合、ａａａ＠ｘｘｘである。
【００１８】
以下、各構成要素について説明する。
サーバ３０１は、テーブルなどの情報やプログラムを格納するメモリ３０２、メモリに格納されるプログラムを読み出して実行するＣＰＵ３１１、複数のハードディスクを含みデータベースに関連するデータを格納する外部記憶装置３１２を含む。なお、外部記憶装置３１２は、ハードディスクだけでなく、データを記憶するための媒体であればよく、フラッシュメモリなどでもよい。また、本実施例では、外部記憶装置３１２として説明するが、記憶装置を意味する。
サーバ３０１のオペレータ（管理者）は、マルチテナント対応認証プログラム３０５と、マルチテナント対応データベース接続プログラム３０７と、データベース接続プログラム３０６と、アプリケーションプログラム３０９と、データベース管理プログラム３１０と、をまず外部記憶装置に格納する。ＣＰＵにより実行されるオペレーティングシステム（以下、ＯＳ：Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）３１７が、これらのプログラムを呼び出し、実行する際はメモリに格納されるため、以降、これらのプログラムはメモリに格納されているものとする。また、以下、ＯＳ３１７や各プログラムを主語にして、実行される処理を説明するが、実際にはＣＰＵ３１１がメモリ３０２からＯＳ３１７や各プログラムを読み出し、各処理を実行することを意味する。また、各プログラムにより実行される処理は、フローチャートを用いて後に詳述する。
【００１９】
外部記憶装置３１２には、アプリケーションプログラム３０９がマルチテナント対応データベース接続プログラム３０６を通してアクセスするデータベース３０８を管理し、データベース３０８に関連するテーブルの情報が格納されている。データベースのテーブルは、組織Ｘ用テーブル３２１、組織Ｙ用テーブル３２２のように組織ごとに分ける。そして、各テーブルには、「製品情報＠組織Ｘ」「製品情報＠組織Ｙ」のように、情報名と組織名とを含む名称（例えば、ＩＤ）が割り当てられる。図４は、組織ごとに、製品情報と顧客情報とを含む別々のテーブルで管理する一例を示す図である。図４は、組織Ｘの商品情報４１１（名称：製品情報＠組織Ｘ）と顧客情報４１２（名称：顧客情報＠組織Ｘ）と、組織Ｙの商品情報４２１（名称：製品情報＠組織Ｙ）と顧客情報４２２（名称：顧客情報＠組織Ｙ）と、を表すテーブルを示す。
また、図３の例では、データベース３０８はサーバ３０１に含まれる外部記憶装置３１２に格納されている、サーバ３０１が別のデータベースサーバと接続し、該別のデータベースサーバが持つ外部記憶装置にデータベースを格納するようにしてもよい。また、外部記憶装置３１２が、別筐体のストレージ装置として、サーバ３０１の外部に存在する構成であってもよい。
【００２０】
メモリ３０２には、ＯＳ３１７、スレッド管理情報３１３、マルチテナント対応プログラム３１９、データベース接続管理情報３２３が格納されている。
ＯＳ３１７はスレッドスケジューリングプログラム３１８を含む。ＯＳ３１７は、サーバ３０１がクライアント３１０からのリクエストを受け付けた場合、スレッドスケジューリングプログラム３１８を実行し、各マルチテナント対応プログラム３１９を実行することでリクエストを処理する。スレッドスケジューリングプログラム３１８は、１つのリクエストに対し１つのスレッドを作成する。スレッドとはプログラムを実行する状態のことを指し、スレッド管理情報３１３にて管理される。
【００２１】
スレッド管理情報３１３は、スタック４１４、ＣＰＵレジスタ４１５、スレッドローカル領域４１６を含む。
図５は、本実施例における、スレッド管理情報３１３の一例を示す図である。なお、図５に記載のスレッド管理情報３１３のフォーマットは一例であって、図５に示したフォーマットに限定されるものではない。ＯＳによって複数のスレッドを管理しているが、本実施例においては、各スレッドごとに該スレッド管理情報を保持する。
図４のスタック４１４に該当するのが、局所変数である。局所変数１〜ｎは、プログラムにおける関数などの局所的に使用する変数である。つまり、スタック４１４に格納されるデータは、プログラム間で共有することができず、特定のプログラムに対して特定の領域が割り当てられている。
図４のＣＰＵレジスタ４１５に該当するのが、プログラムカウンタやスタックカウンタである。プログラムカウンタはこのスレッドが現在プログラムのどこを実行しているかの情報を持つ。スタックカウンタは現在のスタックの位置である。
図４のスレッドローカル領域４１６に該当するのが、スレッドローカル変数である。スレッドローカル変数は同一スレッド内で動くプログラム間で共有できる変数である。そして、後で詳述するようにスレッドローカル領域４１６に、リクエスト発行元の組織名が格納される。
上記のように、スレッド管理情報の格納領域には、プログラム間で情報を共有できない領域と、プログラム間で情報を共有できる領域がある。スレッドローカル領域４１６に情報を格納することで、プログラム間で情報を共有できる。本実施例では、スレッドローカル領域４１６に組織名を格納することにより、マルチテナント対応認証プログラム３０５と、マルチテナントデータベース接続プログラム４０７と、アプリケーションプログラム３０９とで組織名情報を共有することができる。
【００２２】
図６は、実施例１における、スレッドスケジューリングプログラム３１８の処理の一例を示す図である。
スレッドスケジューリングプログラム３１８は、サーバ３０１がある組織からリクエストを受信した場合に、どのスレッドにて処理を行うか（どのスレッド管理情報を用いて処理を行うか）を決定する。（ステップ６００）例えば、どの処理にも利用されていないスレッド管理情報の領域がある場合には、そのスレッド管理情報の領域を用いて受信したリクエストの処理を行う、と決定する。マルチテナント認証プログラムを実行（ステップ６０１）する。その後、スレッドスケジューリングプログラム３１８は、アプリケーションプログラムを実行（ステップ６０２）する。
【００２３】
図７は、本実施例の図６のステップ６０１における、マルチテナント対応認証プログラム３０５の処理の一例を示す図である。
マルチテナント対応認証プログラム３０５は、クライアント３１０から受信したリクエストを取得する（ステップ７０１）。
マルチテナント対応認証プログラム３０５は、クライアントとサーバとの間のセッションが確立されているか確認する（ステップ７０２）。
マルチテナント対応認証プログラム３０５は、セッションが確立されていない場合、認証情報の有無を確認する（ステップ７０４）。ここで、クライアント３１０から受信する認証情報には、上記の通り組織名（ユーザ名、クライアント名等）に関する情報が含まれている。
【００２４】
マルチテナント対応認証プログラム３０５は、認証情報がない場合は、クライアント３１０に対して認証情報を要求する（ステップ７０７）。そして、その後ステップ７０５を実行する。
マルチテナント対応認証プログラム３０５は、認証情報があった場合、セッションの作成の可否を判断し、「可」の場合にはセッションを作成する（７０５）。セッションを作成する際には、セッションを確立したサーバに関する情報や、認証情報に含まれる組織名を含むセッション情報を作成する。
その後、ステップ６００で決定された受信したリクエストを実行するスレッドを管理するためのスレッド管理情報に含まれるスレッドローカル領域に、認証情報又は作成したセッション情報から取得できる組織名を格納する（７０３）。
マルチテナント対応認証プログラム３０５は、ステップ７０２でセッションが確立されている場合には、ステップ６００で決定された受信したリクエストを実行するスレッドを管理するためのスレッド管理情報に含まれるスレッドローカル領域に、セッション情報から取得した組織名を格納する（ステップ７０３）。
【００２５】
図８は、本実施例の図６のステップ６０２における、アプリケーションプログラム３０９の処理の一例を示す図である。
【００２６】
アプリケーションプログラム３０９は、図９に示すデータベース接続管理情報３２３で指定されているデータベース接続プログラムを用いてデータベースに接続する。図９は、本実施例における、データベース接続管理情報３２３の一例を示す。データベース接続管理情報３２３は、データベース接続プログラム名４２３１、データベースに接続するためのユーザ名４２３２とパスワード４２３３を格納する。
複数の組織によりサーバを介してデータベースへアクセスする構成であるマルチテナント型コンピュータシステムとする前の通常のアプリケーションでは、データベース接続管理情報３２３に通常のデータベース接続プログラム３０６を格納する。
複数の組織によりサーバを介してデータベースへアクセスする構成であるマルチテナント型のコンピュータシステムとする場合は、データベース接続管理情報３２３にマルチテナント対応データベース接続プログラム３０７を格納する。つまり、通常のデータベース接続プログラム３０６に加えて、アクセス先のテーブルの名前に組織名を付加する処理を実行するプログラムを使用する。
【００２７】
マルチテナント化後のアプリケーションでは、アプリケーションプログラム３０９はマルチテナント対応データベース接続プログラム３０７を用いてデータベース３０８へアクセスする。マルチテナント対応データベース接続プログラム３０７の処理を以下に説明する。ステップ８０２〜ステップ８０５において、マルチテナント対応データベース接続プログラム３０７は、スレッドスケジューリングプログラム４１８から受信したＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）文に含まれるテーブル名に、リクエストを実行するスレッドを管理するためのスレッド管理情報に含まれるスレッドローカル領域４１６に格納される組織名を付加する処理を行う。ここで、ＳＱＬ文とは、データベースにアクセスするための言語である。
【００２８】
マルチテナント対応データベース接続プログラム３０７は、スレッドスケジューリングプログラム４１８から受信した、リクエストを実行するスレッドを管理するためのスレッド管理情報に含まれるスレッドローカル領域４１６から組織名を取得する（ステップ８０１）。
マルチテナント対応データベース接続プログラム３０７は、アプリケーションプログラム３０９から受け取ったＳＱＬ文を空白文字で分解する（ステップ８０２）。例えば「ｓｅｌｅｃｔ  ＊  ｆｒｏｍ  ｕｓｅｒｓ」というＳＱＬ文を受信した場合、「ｓｅｌｅｃｔ」「＊」「ｆｒｏｍ」「ｕｓｅｒｓ」の４つの単語に分解する。
マルチテナント対応データベース接続プログラム３０７は、ｉｎｔｏ、ｆｒｏｍ、ｔａｂｌｅの次の単語に組織名を付加する（ステップ８０３）。ＳＱＬの構文規則によれば、これらの単語のあとに続く単語はテーブル名だからである。 
マルチテナント対応データベース接続プログラム３０７は、ドットの前の単語に組織名を付加する（ステップ８０４）。ＳＱＬの構文規則によれば、ドットの前の単語はテーブル名だからである。
マルチテナント対応データベース接続プログラム３０７は、最後に単語を空白文字で結合し（ステップ８０５）する。例えば「ｓｅｌｅｃｔ」「＊」「ｆｒｏｍ」「Ｘ＿ｕｓｅｒｓ」の各単語を空白文字で結合すると「ｓｅｌｅｃｔ  ＊  ｆｒｏｍ  Ｘ＿ｕｓｅｒｓ」となる。
【００２９】
マルチテナント対応データベース接続プログラム３０７は、組織名を付加したＳＱＬ文を用いてデータベース接続プログラム３０６を実行する（９０６）。
【００３０】
例えば組織名がＸで「ｓｅｌｅｃｔ  ｕｓｅｒｓ．ｎａｍｅ  ｆｒｏｍ  ｕｓｅｒｓ」というＳＱＬ文の場合、マルチテナント対応データベース接続プログラム３０７は、「ｓｅｌｅｃｔ  Ｘ＿ｕｓｅｒｓ．ｎａｍｅ  ｆｒｏｍ  Ｘ＿ｕｓｅｒｓ」というＳＱＬ文に変換し、変換後のＳＱＬ文を用いてデータベース接続プログラム３０６を実行する。データベース接続プログラム３０６は、データベース管理プログラム３１０にＳＱＬ文を渡し、データへのアクセスを依頼する。データベース管理プログラム３１０はＭｙＳＱＬ、ＯｒａｃｌｅＤＢ、ＰｏｓｔｇｒｅＳＱＬなどのＤＢＭＳである。データベース管理プログラム３１０は受け取ったＳＱＬ文に含まれる組織名（例えば、Ｘ）を参照して、組織名Ｘ用のテーブル４２１（製品情報＠組織Ｘ４１１や顧客情報＠組織Ｘ４１２）にアクセスすることができる。
【００３１】
以上説明したように、本実施例では、リクエストを受領した時に、スレッドごとにアクセス元の組織をスレッド管理情報により管理する。そして、該スレッドのスレッド管理情報を用いて実行されるアプリケーションがデータベースにアクセスする際に、アクセス元組織名をＳＱＬ文に追加しすることにより、既存のテーブルにアクセスすることが可能となる。これにより、単一の組織によりアクセスされていたデータベースを、複数の組織によりアクセスされる形態に変更する場合に、既存のアプリケーション、既存のテーブルを用いて運用を継続することができ、開発者や管理者の負担を軽減することができる。
【実施例２】
【００３２】
以下、本発明を実施するための第２の実施形態を説明する。
【００３３】
図１０は、実施例２における、コンピュータシステムの全体構成の一例を示す図である。マルチテナント対応データベース接続プログラムＢ１００７とアプリケーションプログラムＢ１００９以外は実施例１の図４に示すコンピュータシステムの全体構成と同じである。実施例２と実施例１とが異なる点を以下に説明する。
【００３４】
アプリケーションプログラムＢ１００９は、マルチテナント対応データベース接続プログラムＢ１００７にどのテーブル、にどのような操作をするか（参照、更新、削除、生成）の情報を入力し、マルチテナント対応デーベース接続プログラムＢ１００７を実行する。具体的には、アプリケーションプログラムＢ１００９は、マルチテナント対応データベース接続プログラムＢ１００７に組織名が付加されていないテーブル名（例えば、製品情報や顧客情報）と操作内容に関する情報を入力する。
【００３５】
マルチテナント対応データベース接続プログラムＢ１００７は、アプリケーションプログラムＢ１００９から、入力としてアクセス対象の組織名は付加されていないテーブル名と操作内容を受信する。
マルチテナント対応データベース接続プログラムＢ１００７は、組織ごとのテーブルにアクセスするＳＱＬ文を生成し、アプリケーションプログラムにＢ１００９に返す。
【００３６】
図１１は、マルチテナント対応データベース接続プログラムＢ１００７の処理フローの一例を示す。
マルチテナント対応データベース接続プログラムＢ１００７は、スレッドスケジューリングプログラム４１８から受信した、リクエストを実行するスレッドを管理するためのスレッド管理情報に含まれるスレッドローカル領域４１６から組織名を取得する（ステップ１１０１）。
マルチテナント対応データベース接続プログラムＢ１００７は、アプリケーションプログラムＢ１００９から、アクセス対象のテーブル名と、操作内容（例えば、参照、更新、削除、生成）に関する情報を受信する。そして、受信したアクセス対象のテーブル名に組織名を付加してＳＱＬ文を組み立てる（ステップ１１０２）。
このＳＱＬ文をデータベース接続プログラム４０７に渡し、データベース接続プログラム４０７を実行する。
【００３７】
実施例２はアプリケーションプログラムＢ１００９がＳＱＬ文を組み立てる必要がないため、アプリケーションプログラムＢ１００９に負担が軽減されるという効果ある。
【符号の説明】
【００３８】
４０１：サーバ、４０２：メモリ、４０５：マルチテナント対応認証プログラム、４０６：データベース接続プログラム、４０７：マルチテナント対応データベース接続プログラム、４０９：アプリケーションプログラム、４１０：クライアント、４１１：ＣＰＵ、４１２：外部記憶装置、４１３：スレッド管理情報、４１４：スタック領域、４１５：ＣＰＵレジスタ、４１６：スレッドローカル領域、３１７：ＯＳ、４１８：スレッドスケジューリングプログラム、４１９：マルチテナント対応プログラム、１００７：マルチテナント対応データベース接続プログラムＢ、１００９：アプリケーションプログラムＢ
【図１】
2011113103.tif 000003
【図２】
2011113103.tif 000004
【図３】
2011113103.tif 000005
【図４】
2011113103.tif 000006
【図５】
2011113103.tif 000007
【図６】
2011113103.tif 000008
【図７】
2011113103.tif 000009
【図８】
2011113103.tif 000010
【図９】
2011113103.tif 000011
【図１０】
2011113103.tif 000012
【図１１】
2011113103.tif 000013