(57)【要約】  開示される主題事項のシステム及び方法は、マルチテナントデータベースシステムに結合されたメモリストレージで、第１テナント識別子に基づいて第１テナントの第１テナントデータを少なくとも第２テナントの第２テナントデータから分離することを提供する。第１テナントデータの１つ以上のフラグメントを暗号化するために、第１テナントに関連づけられた第１暗号化鍵を、第１テナント識別子に基づいて鍵キャッシュメモリから取り出すことができる。第１テナントデータのフラグメントは、取り出された暗号化鍵に基づいて暗号化することができる。第１テナントデータの暗号化されたフラグメントの各々について、非暗号化ヘッダ情報を生成することができ、このヘッダ情報は、第１テナント識別子を含むメタデータを有することができる。第１テナントデータの暗号化されたフラグメント及び対応する非暗号化ヘッダ情報は、不変ストレージに記憶することができる。
2021533619.tif 000002
【特許請求の範囲】
【請求項１】
第１テナントの第１テナントデータと第２テナントの第２テナントデータとを少なくとも記憶するマルチテナントデータベースシステムの前記第１テナントの前記第１テナントデータの少なくとも一部のセキュリティを管理するコンピュータ化された方法であって、前記第１テナントの前記第１テナントデータは、第１テナント識別子に関連づけられた前記マルチテナントデータベースシステムの不変ストレージに記憶され、前記第２テナントの第２テナントデータは、第２テナント識別子に関連づけられた前記マルチテナントデータベースシステムの前記不変ストレージに記憶され、前記第１テナントデータ及び前記第２テナントデータの任意の部分が、前記マルチテナントデータベースシステム内の同じデータベースオブジェクトの少なくとも１つに論理的に属し、当該方法は、
前記マルチテナントデータベースシステムに結合されたメモリストレージで、前記第１テナント識別子に基づいて、前記第１テナントの前記第１テナントデータを少なくとも前記第２テナントの前記第２テナントデータから分離するステップと、
前記第１テナント識別子に基づいて、鍵キャッシュメモリから、前記第１テナントデータの１つ以上のフラグメントを暗号化するための前記第１テナントに関連づけられた第１暗号化鍵を取り出すステップであり、前記第１暗号化鍵は、前記第２テナントに関連づけられた第２暗号化鍵と異なる、ステップと、
前記マルチテナントデータベースシステムで、前記取り出された第１暗号化鍵に基づいて前記第１テナントデータの前記１つ以上のフラグメントのうち少なくとも１つを暗号化するステップと、
前記マルチテナントデータベースシステムで、前記第１テナントデータの前記暗号化された１つ以上のフラグメントの各々について非暗号化ヘッダ情報を生成するステップであり、前記ヘッダ情報は前記第１テナント識別子を含むメタデータを有する、ステップと、
前記不変ストレージに、前記第１テナントデータの前記暗号化された１つ以上のフラグメント及び対応する非暗号化ヘッダ情報を記憶するステップと、
を含む方法。
【請求項２】
前記第１テナントデータは、コミットされたトランザクションに関する、請求項１に記載の方法。
【請求項３】
要求元が認証されたとき、前記第１テナントに関連づけられた前記第１暗号化鍵へのアクセスを許可するステップ
をさらに含む請求項１に記載の方法。
【請求項４】
前記マルチテナントデータベースシステムで、前記第１テナントデータの前記１つ以上のフラグメントの要求を受信するステップと、
前記マルチテナントデータベースシステムで、前記マルチテナントデータベースシステムに通信上結合されたブロックキャッシュメモリが前記第１テナントデータの前記要求された１つ以上のフラグメントを含むかどうかを判定するステップと、
前記ブロックキャッシュメモリ内にあると判定されたとき前記第１テナントデータの前記要求された１つ以上のフラグメントを前記マルチテナントデータベースシステムに提供するステップと、
をさらに含む請求項１に記載の方法。
【請求項５】
前記第１テナントデータの前記要求された１つ以上のフラグメントが前記ブロックキャッシュメモリ内に存在しないと判定されたとき、前記第１テナントデータの前記１つ以上のフラグメントについての前記非暗号化ヘッダ情報の前記メタデータを使用することにより、暗号化された前記第１テナントデータの前記要求された１つ以上のフラグメントを識別するステップと、
前記非暗号化ヘッダ情報の前記メタデータに基づいて、前記第１テナントデータの前記１つ以上のフラグメントを復号するために、前記鍵キャッシュメモリ又は鍵管理システム（ＫＭＳ）から前記第１暗号化鍵を取り出すステップと、
前記取り出された第１暗号化鍵を使用して前記第１テナントデータの前記１つ以上のフラグメントを復号するステップと、
前記第１テナントデータの前記復号された１つ以上のフラグメントを前記ブロックキャッシュメモリに提供するステップと、
さらに含む請求項４に記載の方法。
【請求項６】
要求元が認証されたとき、前記鍵キャッシュメモリで、前記第１テナントに関連づけられた前記第１暗号化鍵へのアクセスを許可するステップ
をさらに含む請求項５に記載の方法。
【請求項７】
前記第１暗号化鍵は、前記第１暗号化鍵が前記鍵キャッシュメモリで入手できないとき、前記ＫＭＳから取り出される、請求項５に記載の方法。
【請求項８】
前記マルチテナントデータベースシステムで、前記ブロックキャッシュメモリにおいて前記第１テナントデータの前記１つ以上のフラグメントをフィルタリングすること、ソートすること、及びインデキシングすることを含む群から選択された動作のうち少なくとも１つを実行するステップ
をさらに含む請求項４に記載の方法。
【請求項９】
前記マルチテナントデータベースシステムで、前記第１暗号化鍵及び前記第２暗号化鍵と別個であって前記第１テナント及び前記第２テナントに関連づけられていないシステム鍵を使用して、前記マルチテナントデータベースシステムのインデックス及びトランザクションログを含む群からの少なくとも１つを暗号化するステップ
をさらに含む請求項１に記載の方法。
【請求項１０】
前記マルチテナントデータベースシステムで、所定の期間で、又は鍵変更要求を受信したとき、前記第１暗号化鍵を変更するステップと、
前記マルチテナントデータベースシステムの前記不変ストレージに、前記第１テナントデータを前記変更された鍵に基づいて新しいバージョンとして記憶するステップと、
をさらに含む請求項１に記載の方法。
【請求項１１】
前記マルチテナントデータベースシステムで、サンドボックステナントを、サンドボックステナント識別子を前記第１テナントデータの仮想スナップショットに、及びサンドボックス作成時点の後に前記サンドボックステナントにより作成されたサンドボックステナントデータに関連づけることにより、作成するステップ
をさらに含み、
前記サンドボックステナントデータは、前記第１暗号化鍵で暗号化される、請求項１に記載の方法。
【請求項１２】
前記マルチテナントデータベースシステムで、前記サンドボックステナントが作成された後、前記サンドボックステナントに対して新しい鍵を選択するステップ
をさらに含む請求項１１に記載の方法。
【請求項１３】
ソースデータベースインスタンスから移行されるべき前記第１テナントのメタデータを宛先データベースインスタンスに送信するステップであり、前記宛先データベースインスタンスは、前記ソースデータベースインスタンスと異なる物理的サーバ又は仮想化サーバに位置する、ステップと、
前記宛先データベースインスタンスで、前記第１テナントの前記メタデータを、前記宛先データベースインスタンスが前記第１テナントデータにアクセスするための宛先データベースのストレージ内のデータのグルーピングを指し示す情報を有するように、修正するステップと、
をさらに含む請求項１に記載の方法。
【請求項１４】
第１テナントの第１テナントデータと第２テナントの第２テナントデータとを少なくとも記憶するマルチテナントデータベースシステムの前記第１テナントの前記第１テナントデータの少なくとも一部のセキュリティを管理するシステムであって、前記第１テナントの前記第１テナントデータは、第１テナント識別子に関連づけられた前記マルチテナントデータベースシステムの不変ストレージに記憶され、前記第２テナントの前記第２テナントデータは、第２テナント識別子に関連づけられた前記マルチテナントデータベースシステムの前記不変ストレージに記憶され、前記第１テナントデータ及び前記第２テナントデータの任意の部分が、同じデータベースオブジェクトの少なくとも１つに論理的に属し、当該システムは、
前記マルチテナントデータベースシステムに結合されたメモリストレージで、前記第１テナント識別子に基づいて、前記第１テナントの前記第１テナントデータを少なくとも前記第２テナントの前記第２テナントデータから分離するメモリストレージと、
前記第１テナント識別子に基づいて、前記第１テナントデータの１つ以上のフラグメントを暗号化するための前記第１テナントに関連づけられた第１暗号化鍵を記憶する鍵キャッシュメモリであり、前記第１暗号化鍵は、前記第２テナントに関連づけられた第２暗号化鍵と異なる、鍵キャッシュメモリと、
前記メモリストレージ及び前記鍵キャッシュメモリに通信上結合され、取り出された第１暗号化鍵に基づいて前記第１テナントデータの前記１つ以上のフラグメントのうち少なくとも１つを暗号化し、前記第１テナントデータの前記暗号化された１つ以上のフラグメントの各々について非暗号化ヘッダ情報を生成することであって、前記ヘッダ情報は前記第１テナント識別子を含むメタデータを有し、前記不変ストレージに、前記第１テナントデータの前記暗号化された１つ以上のフラグメント及び対応する非暗号化ヘッダ情報を記憶する前記マルチテナントデータベースシステムの１つ以上のサーバと、
を備えたシステム。
【請求項１５】
前記第１テナントデータは、コミットされたトランザクションに関する、請求項１４に記載のシステム。
【請求項１６】
前記マルチテナントデータベースシステムの前記１つ以上のサーバは、要求元が認証されたとき、前記第１テナントに関連づけられた前記第１暗号化鍵へのアクセスを許可する、請求項１４に記載のシステム。
【請求項１７】
前記マルチテナントデータベースシステムの前記１つ以上のサーバに通信上結合されたブロックキャッシュメモリ、をさらに備え、
前記マルチテナントデータベースシステムの前記１つ以上のサーバは、前記第１テナントデータの前記１つ以上のフラグメントの要求を受信し、前記ブロックキャッシュメモリが前記第１テナントデータの前記要求された１つ以上のフラグメントを含むかどうかを判定し、
前記ブロックキャッシュメモリは、前記ブロックキャッシュメモリ内にあると判定されたとき前記第１テナントデータの前記要求された１つ以上のフラグメントを前記マルチテナントデータベースシステムに提供する、請求項１４に記載のシステム。
【請求項１８】
前記マルチテナントデータベースシステムの前記１つ以上のサーバは、前記第１テナントデータの前記要求された１つ以上のフラグメントが前記ブロックキャッシュメモリ内に存在しないと判定されたとき、前記第１テナントデータの前記１つ以上のフラグメントについての前記非暗号化ヘッダ情報の前記メタデータを使用することにより、暗号化された前記第１テナントデータの前記要求された１つ以上のフラグメントを識別し、前記非暗号化ヘッダ情報の前記メタデータに基づいて、前記第１テナントデータの前記１つ以上のフラグメントを復号するために、前記鍵キャッシュメモリ又は鍵管理システム（ＫＭＳ）から前記第１暗号化鍵を取り出し、前記取り出された第１暗号化鍵を使用して前記第１テナントデータの前記１つ以上のフラグメントを復号し、前記第１テナントデータの前記復号された１つ以上のフラグメントを前記ブロックキャッシュメモリに提供する、請求項１７に記載のシステム。
【請求項１９】
前記鍵キャッシュメモリは、要求元が認証されたとき、前記第１テナントに関連づけられた前記第１暗号化鍵へのアクセスを許可する、請求項１８に記載のシステム。
【請求項２０】
前記第１暗号化鍵は、前記第１暗号化鍵が前記鍵キャッシュメモリで入手できないとき、前記ＫＭＳから取り出される、請求項１８に記載のシステム。
【請求項２１】
前記マルチテナントデータベースシステムの前記１つ以上のサーバは、前記ブロックキャッシュメモリにおいて前記第１テナントデータの前記１つ以上のフラグメントをフィルタリングすること、ソートすること、及びインデキシングすることを含む群から選択された動作のうち少なくとも１つを実行する、請求項１７に記載のシステム。
【請求項２２】
前記マルチテナントデータベースシステムの前記１つ以上のサーバは、前記第１暗号化鍵及び前記第２暗号化鍵と別個であって前記第１テナント及び前記第２テナントに関連づけられていないシステム鍵を使用して、前記マルチテナントデータベースシステムのインデックス及びトランザクションログを含む群からの少なくとも１つを暗号化する、請求項１４に記載のシステム。
【請求項２３】
前記マルチテナントデータベースシステムの前記１つ以上のサーバは、所定の期間で、又は鍵変更要求を受信したとき、前記第１暗号化鍵を変更し、
前記マルチテナントデータベースシステムの前記不変ストレージは、前記第１テナントデータを前記変更された鍵に基づいて新しいバージョンとして記憶する、請求項１４に記載のシステム。
【請求項２４】
前記マルチテナントデータベースシステムの前記１つ以上のサーバは、サンドボックステナントを、サンドボックステナント識別子を前記第１テナントデータの仮想スナップショットに、及びサンドボックス作成時点の後に前記サンドボックステナントにより作成されたサンドボックステナントデータに関連づけることにより、作成し、
前記サンドボックステナントデータは、前記第１暗号化鍵で暗号化される、請求項１４に記載のシステム。
【請求項２５】
前記マルチテナントデータベースシステムの前記１つ以上のサーバは、前記サンドボックステナントが作成された後、前記サンドボックステナントに対して新しい鍵を選択する、請求項２４に記載のシステム。
【請求項２６】
前記マルチテナントデータベースシステムの前記１つ以上のサーバは、ソースデータベースインスタンスから移行されるべき前記第１テナントのメタデータを宛先データベースインスタンスに送信することであって、前記宛先データベースインスタンスは、前記ソースデータベースインスタンスと異なる物理的サーバ又は仮想化サーバに位置し、前記宛先データベースインスタンスで、前記第１テナントの前記メタデータを、前記宛先データベースインスタンスが前記第１テナントデータにアクセスするための宛先データベースのストレージ内のデータのグルーピングを指し示す情報を有するように、修正する、請求項１４に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
いくつかの現在のマルチテナントデータベースシステムは、テナントデータの暗号化を提供することがある。しかしながら、このような暗号化は、データベースとは別個のアプリケーションにより実行される。すなわち、アプリケーションがテナントデータを暗号化し、暗号化されたテナントデータが記憶のためにデータベースに送信される。この構成では、フィルタリング、ソート、インデキシングなどの典型的なデータベース機能は、暗号化されたデータに対して実行することができない。すなわち、現在のマルチテナントデータベースシステムでは、マルチテナントデータベース内の特定のデータの暗号化は、データベースの使用に制限を課すことになる。いくつかの例において、暗号化されたデータを用いて典型的なデータベース機能を実行する試みは、使用されているアプリケーションの機能を壊すことになる。従来のシングルテナントデータベースシステムは、テナントデータの暗号化を可能にし得るが、異なるテナントに対して異なる暗号化を取り扱うことはできない。いくつかのデータベースシステムは、テナント暗号化を提供するが、テナントデータが異なるデータベース、表領域などに論理的に分けられる必要がある。
【図面の簡単な説明】
【０００２】
開示される主題事項のさらなる理解を提供するために含まれる添付の図面は、本明細書に組み込まれ、本明細書の一部を構成する。図面はまた、開示される主題事項の実装を例示し、詳細な説明と共に、開示される主題事項の実装の原理を説明するのに役立つ。開示される主題事項及びそれが実施され得る様々な方法の基本的理解のために必要であり得る以上に詳細な構造的詳細を示す試みは行われない。
【図１】開示される主題事項の一実装による、第１及び第２のテナントデータを分離し、第１テナントデータの１つ以上のフラグメントを暗号化する一例示的な方法を示す。
【図２Ａ】開示される主題事項の一実装による、データベースクエリ要求に応答して第１テナントデータの非暗号化フラグメントを取り出す一例示的な方法を示す。
【図２Ｂ】開示される主題事項の一実装による、要求されたフラグメントがブロックキャッシュメモリに存在しないときにデータベースクエリに応答して第１テナントデータのフラグメントを取り出して復号する一例示的な方法を示す。
【図３】開示される主題事項の一実装による、第１テナントデータに関連づけられた第１暗号化鍵を変更し、変更された鍵に基づいて第１テナントデータを新しいバージョンとして不変ストレージに記憶する一例示的な方法を示す。
【図４】開示される主題事項の一実装による、第１テナントの第１テナントデータからの少なくとも１つの新しいサンドボックステナントデータのための少なくとも１つの新しいサンドボックスを作成し、サンドボックステナントデータを暗号化する一例示的な方法を示す。
【図５】開示される主題事項の一実装による、第１テナントデータのメタデータを使用してソースデータベースインスタンスから宛先データベースインスタンスに第１テナントデータを移行する一例示的な方法を示す。
【図６】開示される主題事項の実装による、図１〜図５に示す例示的な方法の分離に関連して使用され得るシステムアーキテクチャの一例を示す。
【図７】開示される主題事項の一実装による、図４に示す例示的な方法を使用して第１テナントデータの異なるフラグメントに対して異なるサンドボックスを作成する一例示的なアーキテクチャを示す。
【図８】開示される主題事項の実装による、鍵管理のための一例示的なアーキテクチャを示す。
【図９】開示される主題事項の一実装によるコンピュータを示す。
【図１０】開示される主題事項の一実装によるネットワーク構成を示す。
【発明を実施するための形態】
【０００３】
開示される主題事項の実装は、暗号化された形式で記憶されるテナントデータのフィルタリング、ソート、及びインデキシングなどのデータベース動作がサポートされる、マルチテナントデータベースシステムの暗号化を提供する。テナントデータの暗号化は、アプリケーションサーバでなくマルチテナントデータベースシステムにより実行することができ、それにより、データベース動作（例えば、フィルタリング、ソートなど）を利用することができる。マルチテナントデータベースシステムの各テナントは、各テナントがその独自のテナント識別子と暗号化鍵を有する場合、別個に暗号化されてもよい。マルチテナントデータベースシステムにおいて、異なるテナントデータの部分は、同じデータベースオブジェクトの少なくとも１つに論理的に属することができる。
【０００４】
特に、特定のテナントのテナントデータのレコードを含むフラグメント（fragments）を暗号化することができる。フラグメントは、開示される主題事項のマルチテナントデータベースシステムにおける基本データ単位であり得、複数のフラグメントがエクステント（extent）を構成する。データエクステントは、テナントデータの１つ以上のフラグメント及びブロックインデックスを含むことができる。フラグメントは、テナント識別子に基づいて分離することができ、分離されたフラグメントは、そのフラグメントのテナントの暗号化鍵を使用して個々に暗号化することができる。
【０００５】
開示される主題事項の実装は、テナント暗号化がアプリケーションレベルで（すなわち、アプリケーションサーバで）実行される現在のマルチテナントデータベースシステムを向上させる。すなわち、このようなシステムにおいて、テナントデータの暗号化は、テナントデータが別個のデータベースシステムに記憶される前にアプリケーションにより実行される。アプリケーションでデータを暗号化することの欠点は、フィルタリング、ソート、インデキシングなどのデータベース動作を典型的に実行できないことである。アプリケーションは、テナントデータがアプリケーションにより符号化されてマルチテナントデータベースに記憶されているときにデータベース動作（例えば、フィルタリング、ソート等）を試みたとき、失敗及び／又はエラーを経験する可能性がある。すなわち、現在のマルチテナントデータベースシステムでは、マルチテナントデータベース内の特定のデータの暗号化は、データベースの使用に制限を課すことになる。いくつかの従来のシングルテナントデータベースシステムは、テナントデータの暗号化を可能にする場合があるが、異なるテナントに対して異なる暗号化を取り扱うことはできない。
【０００６】
開示される主題事項の実装において、開示される主題事項のマルチテナントデータベースシステムのメモリストレージ（memory  storage）は、マルチテナントデータベース内に永続化するように（to  persistence）書き込まれていないコミットされたトランザクション及びコミットされていないトランザクションの双方を含み得る。コミットされたトランザクションは、マルチテナントデータベースシステムの不変ストレージ（immutable  storage）に永続化するように書き込まれる前に、暗号化することができる。いくつかの実装において、マルチテナントデータベースシステムは、デーモンを使用して、コミットされるべきトランザクションのテナントデータの、フラグメントへの分離を管理する。すなわち、異なるテナント（すなわち、異なるテナント識別子を有するテナント）を分離することができる。鍵キャッシュは、各テナントの暗号化鍵を記憶することができる。鍵キャッシュに暗号化鍵のコピーを保持することで、鍵管理システム（Key  Management  System、ＫＭＳ）から暗号化鍵を取り出すことの時間オーバーヘッドを低減させることができる。
【０００７】
マルチテナントデータベースシステムのデーモンは、特定のテナントのデータのフラグメントの暗号化を管理するために、テナントの暗号化鍵を取り出すことができる。非暗号化ヘッダが、テナントデータの暗号化されたフラグメントの各々に生成され、関連づけられてもよく、このヘッダは、（認可されたとき、テナントの暗号化鍵を取り出すために使用され得る）テナント識別子を有するメタデータを含むことができる。デーモンは、マルチテナントデータベースシステムの不変ストレージにおいて永続化するようにテナントデータの暗号化されたフラグメント及び読取可能なヘッダの書き込みを管理することができる。
【０００８】
特定のテナントデータに関してマルチテナントデータベースシステムによりクエリを受信したとき、マルチテナントデータベースシステムのクエリエンジンによりブロックキャッシュが最初にチェックされて、データが暗号化されておらず入手できるかどうかを判定する。これは、それをデータベースから取り出すよりも速いためである。マルチテナントデータベースシステムのクエリエンジンは、ブロックキャッシュ内のデータが暗号化されていない（すなわち、データが平文であり、暗号文でない）とき、テナントデータを取り出すように動作することができる。データがブロックキャッシュで入手できない場合、要求されたテナントデータは、それが暗号化された形式で記憶されている不変ストレージから取り出すことができる。テナントデータは、復号し、ブロックキャッシュに提供することができ、それにより、それをクエリエンジンにより使用してデータベース動作（例えば、フィルタ、ソート等）を実行することができる。特に、マルチテナントデータベースシステムは、クエリエンジンにより識別されたテナントデータのデータフラグメントのヘッダからテナント識別子を有するメタデータを取り出すことができ、鍵キャッシュ又はＫＭＳから暗号化鍵を取り出して、取り出されたメタデータに基づいてデータフラグメントを復号することができる。要求元は、それが鍵キャッシュ又はＫＭＳから特定のテナントの暗号化鍵を取り出し得る前に、（例えば、証明書を介して）認証されてもよい。（暗号文から平文に復号されている）復号されたデータフラグメントは、データベース動作を行うためにブロックキャッシュに提供することができる。
【０００９】
すなわち、開示される主題事項の実装は、各テナントに特有の暗号化鍵でテナントデータを暗号化することができる。テナントデータのフラグメントは、暗号化され、マルチテナントデータベースシステムの不変ストレージに記憶することができる。暗号化されたテナントデータは、非暗号化ヘッダ内のメタデータに基づいて不変ストレージから取り出すことができる。取り出された暗号化されたデータは、鍵キャッシュ又はＫＭＳから取り出された鍵を使用して復号することができ、復号されたデータは、ブロックキャッシュに提供することができ、そこでは、データベース動作を実行することができる。テナント間（Cross-tenant）データ（例えば、１つ以上のテナントを含むブロックインデックス、トランザクションログなど）は、テナント暗号化鍵のいずれとも異なるシステム暗号化鍵を使用して暗号化及び復号することができる。開示される主題事項の実装は、個々のテナントデータの暗号化を提供し、フィルタリング、ソートなどのデータベース動作を、典型的には標準的なマルチテナントデータベースシステムに関連づけられるエラー又は失敗なしにマルチテナントデータベースシステムにより実行することを可能にする。
【００１０】
開示される主題事項の実装は、テナント暗号化のための鍵管理、例えば、マルチテナントデータベースシステムにより管理される鍵のローテーションなどを提供することができる。鍵管理には、テナント暗号化鍵、テナント間データを暗号化するシステム暗号化鍵の管理、及び／又は暗号化鍵の作成と削除を含むことができる。いくつかの実装において、暗号化鍵（例えば、テナント暗号化鍵及び／又はシステム暗号化鍵）は、セキュリティを維持するために、所定の頻度でローテートされ（rotated）（すなわち、変更され）てもよい。いくつかの実装において、ユーザは、（セキュリティ目的のために）鍵のローテーションを要求することができ、データは、別個のデータエクステントに新しい鍵を用いて新しいバージョンとして再書き込みすることができる。
【００１１】
開示される主題事項の実装は、１つ以上のサンドボックステナントのためのデータの暗号化を提供することができる。サンドボックス化されたデータがオリジナルテナントの物理的データに裏打ちされるとき、サンドボックスとオリジナルテナントは同じ暗号化鍵を共有することができる。作成後、サンドボックスに対して異なる鍵が選択されてもよい。１つ以上のサンドボックステナントは、オリジナルテナントデータから、又は別のサンドボックステナントデータから形成することができる。
【００１２】
開示される主題事項の実装は、暗号化されたテナントデータをあるマルチテナントデータベースインスタンスから異なるマルチテナントデータベースインスタンスに転送することができる、テナント移行（migration）のための暗号化を提供することができる。データの暗号化は、暗号化鍵複製を提供することにより維持することができる。すなわち、移行されるテナントの暗号化鍵も移行することができる。
【００１３】
図１は、開示される主題事項の一実装による、マルチテナントデータベースシステムにおいて第１及び第２のテナントデータを分離し、第１テナントデータの１つ以上のフラグメントを暗号化する一例示的な方法１０を示す。方法１０は、第１テナントの第１テナントデータと第２テナントの第２テナントデータを少なくとも記憶することができるマルチテナントデータベースシステム（例えば、図６に示すマルチテナントデータベースシステム１００、図８に示すマルチテナントデータベースシステム２００、及び図９に示す中央コンポーネント７００及び／又は第２コンピュータ８００、及び／又は図１０に示すデータベースシステム１２００ａ〜１２００ｄ）の第１テナントの第１テナントデータの少なくとも一部のセキュリティを管理することができる。
【００１４】
第１テナントの第１テナントデータは、典型的には、第１テナント識別子に関連づけられたマルチテナントデータベースシステムの不変ストレージ（例えば、図６及び図８に示す不変ストレージ１０８）に記憶することができ、第２テナントの第２テナントデータは、典型的には、第２テナント識別子に関連づけられたマルチテナントデータベースシステムの不変ストレージに記憶することができる。いくつかの実装において、第１テナントデータ及び第２テナントデータは、図６に示すメモリストレージ１０２及び／又はブロックキャッシュ１１８、図８に示すデータベースサーバ２０８、２１０、図９に示す固定ストレージ６３０、メモリ６７０、リムーバブル媒体６５０、中央コンポーネント７００、及び／又はストレージ８１０、及び／又は図１０に示すデータベースシステム１２００ａ〜１２００ｄに記憶することができる。
【００１５】
コミットされたトランザクション及び／又はコミットされていないトランザクションの双方のための第１テナントデータ及び／又は第２テナントデータが、マルチテナントデータベースシステムに結合されたメモリストレージ（例えば、図６に示すメモリストレージ１０２）に記憶され得る。動作１２において、少なくとも第２テナントの第２テナントデータから第１テナントの第１テナントデータが、第１テナント識別子に基づいて、マルチテナントデータベースシステムに結合されたメモリストレージにおいて分離され得る。第１テナントデータのコミットされたトランザクションは、コミットされた及び／又はコミットされていない可能性のある第１テナント及び／又は第２テナントデータのコミットされていないトランザクションデータから分離することができる。
【００１６】
いくつかの実装において、第１テナントデータのコミットされたトランザクションは、不変ストレージで永続化するように書き込まれる前に暗号化されてもよい。マルチテナントデータベースシステムのデーモンが、第１テナントデータの第２テナントデータからの分離と、第１テナントデータの１つ以上のフラグメントの形成を管理することができる。デーモンは、図６に示すマルチテナントデータベースシステム１００、図８に示すマルチテナントデータベースシステム２００のデータベースサーバ２０８、２１０、図９に示す中央コンポーネント７００及び／又は第２コンピュータ８００、及び／又は図１０に示すデータベースシステム１２００ａ〜１２００ｄにより実行されてもよい。
【００１７】
図１に示す動作１４において、第１テナントに関連づけられた第１暗号化鍵が、第１テナント識別子に基づいて、鍵キャッシュメモリ（例えば、図８に示す鍵キャッシュ２０８、２１２）から取り出され得る。取り出された第１暗号化鍵は、第１テナントデータの１つ以上のフラグメントを暗号化するために使用することができる。第１テナントに関連づけられた第１暗号化鍵は、第２テナントに関連づけられた第２暗号化鍵とは異なり得る。鍵キャッシュ内に暗号化鍵のコピーを保持することで、鍵管理システム（ＫＭＳ）（例えば、図６及び図８に示すＫＭＳ１２８）から鍵を取り出すことの時間オーバーヘッドを低減させることができる。デーモンは、第１テナントデータのフラグメントの暗号化を管理するために、第１テナントのための暗号化鍵を取り出すことができる。
【００１８】
いくつかの実装において、キャッシュメモリから第１暗号化鍵を取り出すために、第１テナントに関連づけられた第１暗号化鍵の要求元にアクセスが許可される必要があり得る。要求元は、例えば、図８に示すアプリケーションサーバ２０２、２０４、及び／又は図９に示すコンピュータ６００でもよい。例えば、要求元は、認証されるべき証明書又は他の識別情報を提供することができる。要求元が認証されたとき、要求元は、第１テナントデータの１つ以上のフラグメントを暗号化するための第１暗号化鍵を受け取ることができる。いくつかの実装において、図８に示すデータベースサーバ２０８、２１０、図９に示す中央コンポーネント７００及び／又は第２コンピュータ８００、及び／又は図１０に示すデータベースシステム１２００ａ〜１２００ｄが、要求元を認証してもよい。
【００１９】
動作１６において、マルチテナントデータベースシステムが、取り出された暗号化鍵に基づいて、第１テナントデータの１つ以上のフラグメントのうち１つを暗号化し得る。いくつかの実装において、デーモンが、取り出された第１暗号化鍵を使用する第１テナントデータの１つ以上のフラグメントの暗号化を管理してもよい。
【００２０】
動作１８において、第１テナントデータの暗号化された１つ以上のフラグメントの各々についての非暗号化ヘッダ情報が、マルチテナントデータベースシステムにおいて生成され得る。第１テナントのヘッダ情報は、第１テナント識別子を含むメタデータを有し得る。各々の生成された非暗号化ヘッダ情報は、第１テナントデータの各フラグメントに関連づけることができる。動作２０において、第１テナントデータの暗号化された１つ以上のフラグメント及び対応する非暗号化ヘッダ情報が、不変ストレージ（例えば、図６及び図８に示す不変ストレージ、図９に示す第２コンピュータ８００のストレージ８１０、図１０のデータベースシステム１２００ａ〜ｄなど）に記憶され得る。いくつかの実装において、動作２０は、（例えば、図６に示すフラッシャ１０６による）「フラッシュ」動作の一部でもよく、これにおいて、メモリストレージ（例えば、図６に示すメモリストレージ１０２）における利用可能な記憶領域を増加させるために、第１テナントデータのコミットされたトランザクションが識別され、暗号化され、マルチテナントデータベースシステムの不変ストレージに記憶される。
【００２１】
図２Ａは、開示される主題事項の一実装による、データベースクエリ要求に応答して第１テナントデータの非暗号化フラグメントを取り出す一例示的な方法３０を示す。動作３２において、マルチテナントデータベースシステム（図６に示すマルチテナントデータベースシステム１００、図８に示すマルチテナントデータベースシステム２００、及び図９に示す中央コンポーネント７００及び／又は第２コンピュータ８００、及び／又は図１０に示すデータベースシステム１２００ａ〜１２００ｄ）が、第１テナントデータの１つ以上のフラグメントの要求を受信し得る。要求は、図８に示すアプリケーションサーバ２０２、２０４、及び／又は図９に示すコンピュータ６００からでもよく、図６に示すクエリ１２６により受信されてもよい。動作３４において、マルチテナントデータベースシステムが、マルチテナントデータベースシステムに通信上結合されたブロックキャッシュメモリ（例えば、図６に示すブロックキャッシュ１２２）が第１テナントデータの要求された１つ以上のフラグメントを含むかどうかを判定し得る。動作３６において、ブロックキャッシュメモリが、第１テナントデータの要求された１つ以上のフラグメントを、ブロックキャッシュメモリ内にあると判定されたとき、マルチテナントデータベースシステムに提供し得る。開示される主題事項の実装において、ブロックキャッシュメモリの内容は、暗号化されていなくてもよい（すなわち、暗号文でなく、平文であり得る）。第１テナントデータの１つ以上のフラグメントがブロックキャッシュ内に存在するとき、データベース動作が第１テナントデータのフラグメントに対して実行されてもよく、復号が実行される必要はない。ブロックキャッシュからの１つ以上のフラグメントの取り出しは、不変ストレージにおいて暗号化された１つ以上のフラグメントの位置を特定し、第１テナントの暗号化鍵を取り出し、１つ以上のフラグメントを復号し、復号されたフラグメントをブロックキャッシュに提供するより速いという利点を有し得る。
【００２２】
図２Ｂは、開示される主題事項の一実装による、要求されたフラグメントがブロックキャッシュメモリに存在しないときにデータベースクエリに応答して第１テナントデータのフラグメントを取り出して復号する一例示的な方法４０を示す。第１テナントデータの要求された１つ以上のフラグメントがブロックキャッシュメモリに存在しないと判定されたとき（例えば、図２Ａに示す例示的な方法３０が、キャッシュメモリにおいて第１テナントデータの暗号化されていないフラグメントを見つけることができないとき）、動作４２において、暗号化された第１テナントデータの要求された１つ以上のフラグメントが、第１テナントデータの１つ以上のフラグメントについての非暗号化ヘッダ情報のメタデータを使用することにより不変ストレージ（例えば、図６及び図８に示す不変ストレージ１０８）において識別され得る。
【００２３】
動作４４において、第１暗号化鍵が、非暗号化ヘッダ情報のメタデータに基づいて、第１テナントデータの１つ以上のフラグメントを復号するために鍵キャッシュメモリ（例えば、図８に示す鍵キャッシュ）又は鍵管理システム（ＫＭＳ）（例えば、図６に示すＫＭＳ）から取り出され得る。いくつかの実装において、鍵キャッシュメモリ（例えば、図８に示す鍵キャッシュ２０８、２１２）からの第１暗号化鍵の取り出しを試みることができる。第１暗号化鍵は、鍵キャッシュメモリに存在しないとき、ＫＭＳ（例えば、図６及び図８に示すＫＭＳ１２８）から取り出されてもよい。鍵キャッシュメモリ又はＫＭＳは、要求元が認証されたとき、第１テナントに関連づけられた第１暗号化鍵へのアクセスを許可することができる。例えば、要求元は、認証されるべき証明書又は他の識別情報を提供してもよい。要求元が認証されたとき、要求元は、第１テナントデータの１つ以上のフラグメントを復号するための第１暗号化鍵を受け取ることができる。
【００２４】
動作４６において、第１テナントデータの１つ以上のフラグメントが、鍵キャッシュメモリ又はＫＭＳから取り出された第１暗号化鍵を使用して復号され得る。動作４８において、第１テナントデータの復号された１つ以上のフラグメントが、ブロックキャッシュメモリ（例えば、図６に示すブロックキャッシュ１１８）に提供され得る。
【００２５】
１つ以上のフラグメントが復号され（例えば、データは平文形式である）、ブロックキャッシュメモリに存在するとき、フィルタリング、ソート、及び／又はインデキシングなどの１つ以上のデータベース動作が、マルチテナントデータベースシステムにより第１テナントデータの１つ以上のフラグメントに対して実行され得る。すなわち、開示される主題事項の実装は、テナントデータが暗号化されるときにデータベース動作が制限されるか又は利用できない可能性のあるいくつかの従来のマルチテナントシステムと異なり、マルチテナントデータベースシステム内のテナントデータを暗号化し、データベース動作を実行することができる。いくつかの従来のデータベースは、テナントの暗号化をサポートし得るが、テナントが異なるデータベース又は表領域（tablespaces）に論理的に分けられることを要する。開示される主題事項のマルチテナントデータベースシステムにおいて、テナントは、同じデータベース内にコロケートされ（collocated）てもよく、あるいは（例えば、同じテーブル及び／又はインデックス内に）データベースオブジェクトとしてコロケートされてもよく、暗号化された形式で記憶され得るデータに対してデータベース動作を実行してもよい。
【００２６】
いくつかの実装において、マルチテナントデータベースシステムは、第１暗号化鍵及び第２暗号化鍵とは別個であって第１テナント及び第２テナントに関連づけられていないシステム鍵を使用して、マルチテナントデータベースのインデックス（例えば、図６に示すデータエクステント１１０のブロックインデックス１１４及び／又はブロックキャッシュ１１８のブロックインデックス１２２）及び／又はトランザクションログ（例えば、図６に示すトランザクションログ１０４）のうち１つ以上を暗号化することができる。以下に詳細に論じるように、図６に示すストレージカタログ１１６及び一時スピル１２４も、テナント暗号化鍵とは別個のシステム鍵を使用して暗号化されてもよい。
【００２７】
図３は、開示される主題事項の一実装による、第１テナントデータに関連づけられた第１暗号化鍵を変更し、変更された鍵に基づいて第１テナントデータを新しいバージョンとして不変ストレージに記憶する一例示的な方法５０を示す。動作５２において、マルチテナントデータベースシステム（例えば、図６に示すマルチテナントデータベースシステム１００、図８に示すマルチテナントデータベースシステム２００、及び図９に示す中央コンポーネント７００及び／又は第２コンピュータ８００、及び／又は図１０に示すデータベースシステム１２００ａ〜１２００ｄ）が、所定の期間で、又は鍵変更要求を受信したとき、第１暗号化鍵を変更し得る。動作５４において、マルチテナントデータベースシステムの不変ストレージ（例えば、図６及び図８に示す不変ストレージ１０８）が、変更された鍵に基いて第１テナントデータを新しいバージョンとして記憶し得る。暗号化されたテナントデータのセキュリティを維持するために、暗号化鍵の定期的な変更が用いられてもよい。
【００２８】
開示される主題事項の実装において、サンドボックステナントが、既存の非サンドボックステナントデータに基づいて、例えば米国特許公開第2018/0129585号に開示されているように作成されてもよく、該特許公開の開示は、その全体を参照により組み込まれる。いくつかの実装において、１つ以上の新しいサンドボックスが、オリジナルサンドボックスから、例えば米国特許出願第16/133,106号に開示されているように作成されてもよく、該特許出願の開示は、その全体を参照により組み込まれる。例えば、オリジナルサンドボックスは、オリジナルテナントのオリジナルテナントデータから作成されるサンドボックスでもよい。オリジナルサンドボックスは、少なくとも１つのデータソースからのコード、スキーマ、レコード、及びテストデータのうち１つ以上を含むようにテンプレートから形成されてもよい。コード及び／又はテストデータの検証テストが、サンドボックスの複製前に実行されてもよい。１つ以上の複製サンドボックスが、同じ内容を有して作成されてもよい。
【００２９】
記載される主題事項の実装において、ハードウェア及びソフトウェアの組み合わせが、特定のサンドボックステナント識別子とオリジナルテナント識別子との間の対応を作成して、サンドボックステナントに、オリジナルテナントに関連づけられた時点データへの読み取りアクセスを提供することができる。このように、サンドボックステナントは、オリジナルテナントデータをサンドボックステナントの名前空間（namespace）にコピーする必要なく、オリジナルテナントデータを利用することができる。同様に、１つ以上の新しいサンドボックステナント識別子とオリジナルサンドボックステナント識別子との間の対応は、新しいサンドボックステナントに、オリジナルサンドボックステナントに関連づけられた時点データへの読み取りアクセスを提供することができる。
【００３０】
サンドボックステナントにより生成された新しいトランザクションデータは、オリジナルテナントがアクセスできないサンドボックステナント名前空間に書き込むことができる。オリジナルテナントにより生成された新しいトランザクションデータは、サンドボックステナントがアクセスできないオリジナルテナント名前空間に書き込むことができる。このように、新しいサンドボックステナントデータは、オリジナルテナントデータを破壊せず、新しいオリジナルテナントデータ（例えば、これは、後の不変オリジナルテナントデータと呼ばれることがある）は、アプリケーションをテストするためにサンドボックスにより読み書きされるテストデータを破壊しない。同様に、少なくとも１つのサンドボックステナントにより生成された新しいトランザクションデータは、オリジナルサンドボックステナントがアクセスできない少なくとも１つのサンドボックステナント名前空間に書き込むことができる。オリジナルサンドボックステナントにより生成された新しいトランザクションデータは、少なくとも１つの新しいサンドボックステナントがアクセスできないオリジナルサンドボックステナント名前空間に書き込むことができる。少なくとも１つの新しいサンドボックステナントデータは、オリジナルサンドボックステナントデータを破壊せず、新しいオリジナルサンドボックステナントデータは、アプリケーションをテストするために少なくとも１つの新しいサンドボックスにより読み書きされるテストデータを破壊しない。これらの実装は、レコードの永続的な内容を例えばログ構造マージ（Log  Structured  Merge、ＬＳＭ）ツリーに記憶する関係データベースと共に使用することができる。
【００３１】
図４は、開示される主題事項の一実装による、第１テナントの第１テナントデータから少なくとも１つの新しいサンドボックステナントデータのための少なくとも１つの新しいサンドボックスを作成し、サンドボックステナントデータを暗号化する一例示的な方法６０を示す。動作６２において、マルチテナントデータベースシステム（例えば、図６に示すマルチテナントデータベースシステム１００、図８に示すマルチテナントデータベースシステム２００、及び図９に示す中央コンポーネント７００及び／又は第２コンピュータ８００、及び／又は図１０に示すデータベースシステム１２００ａ〜１２００ｄ）が、サンドボックステナントを、サンドボックステナント識別子を第１テナントデータの仮想スナップショットに、及びサンドボックス作成時点の後にサンドボックステナントにより作成されたサンドボックステナントデータに関連づけることにより、作成し得る。動作６４において、サンドボックステナントデータが、第１暗号化鍵で暗号化され得る。サンドボックステナント及び／又は暗号化されたサンドボックステナントデータは、不変ストレージ（例えば、図６及び図８に示す不変ストレージ１０８）に記憶することができる。いくつかの実装において、マルチテナントデータベースシステムは、サンドボックステナントが作成された後、サンドボックステナントのための新しい鍵を選択してもよい。
【００３２】
図５は、第１テナントデータのメタデータを使用してソースデータベースインスタンスから宛先データベースインスタンスに第１テナントデータを移行する一例示的な方法を示す。開示される主題事項の実装は、マルチテナントデータベースシステムのテナントをソースデータベースインスタンスから宛先データベースインスタンスへ、行ごとのデータコピー、本番（production）データの複製、又は複製された本番データに対する操作を要することなく移行させることができる。この移行は、従来のテナント移行手法より速く、プロセッサリソース、データ記憶及び永続リソース、及び／又はデータパス（例えば、通信ネットワーク）リソースの観点でより低コストで完了することができる。多くの場合、移行されたデータに関して一貫性チェック又は他の修正措置が行われる必要はなく、それにより、さらなる時間及びシステムリソースを節約する。ソースデータベースインスタンスから宛先データベースへのテナントデータの移行は、例えば米国特許公開第2018/0373708号で詳細に説明され得、該特許公開の開示は、その全体を参照により組み込まれる。
【００３３】
図５に示す動作７２において、ソースデータベースインスタンス（例えば、図８に示すデータベースサーバ２０８）から移行されるべき第１テナントのメタデータが、宛先データベースインスタンス（例えば、図８に示すデータベースサーバ２１０）に送信され得る。宛先データベースインスタンスは、ソースデータベースインスタンスと異なる物理的サーバ又は仮想化サーバ上に位置してもよい。動作７４において、宛先データベースインスタンスにおける第１テナントのメタデータが、宛先データベースインスタンスが第１テナントデータにアクセスするための宛先データベースのストレージ内のデータのグルーピングを指し示す情報を有するように、修正され得る。移行テナントデータは、その暗号化を保持することができ、暗号化鍵は、テナントデータと共に移行することができる。移行テナントデータは、不変ストレージ（例えば、図８に示す不変ストレージ１０８）に記憶されてもよい。いくつかの実装において、マルチテナントデータベースシステムは、データが移行された後、移行されたテナントデータのための新しい鍵を選択してもよい。
【００３４】
図６は、開示される主題事項の実装による、図１〜図５に示す例示的な方法の分離に関連して使用され得るマルチテナントデータベースシステム１００のシステムアーキテクチャの一例を示す。
【００３５】
マルチテナントデータベースシステム１００は、データベースシステム、サーバシステム、クラウドサーバシステムなどでもよい。メモリストレージ（memory  storage）１０２は、第１テナント及び／又は第２テナントのコミットされた及び／又はコミットされていないトランザクションデータ（例えば、第１テナントデータ及び／又は第２テナントデータ）を記憶するためのシステム１００のハードウェア及びソフトウェアの任意の適切な組み合わせであり得る。いくつかの実装において、メモリストレージ１０２は、半導体メモリ、ソリッドステートドライブ（ＳＳＤ）、ハードディスクドライブ、光学メモリ、光学記憶デバイス、又は任意の他の適切な物理的データ記憶媒体、又はこれらの何らかの組み合わせでもよい。メモリストレージ１０２に記憶されたテナントデータは、暗号化されていないデータであり得る。
【００３６】
トランザクションログ１０４は、データベースシステムに対する任意の動作及び／又は変更（例えば、データの取り出し、トランザクションのコミット、データのフラッシュ、データの記憶など）を記憶するためのシステム１００のハードウェア及びソフトウェアの任意の適切な組み合わせであり得る。メモリストレージ１０２内のテナントデータに対して実行される各トランザクションは、トランザクションログ１０４に記憶され得る。トランザクションログ１０４は、いかなる特定テナントにも属し得ないシステム暗号化鍵を使用して暗号化されてもよい。
【００３７】
フラッシャ（Flusher）１０６は、メモリストレージ１０２に記憶されたコミットされたトランザクションを不変ストレージ（immutable  storage）１０８に対してデータエクステント（例えば、データエクステント１１０）に記憶するためのシステム１００のハードウェア及びソフトウェアの任意の適切な組み合わせであり得る。不変ストレージ１０８は、物理的データストレージ、例えば半導体メモリ、ソリッドステートドライブ（ＳＳＤ）、ハードディスクドライブ、光学メモリ、光学記憶デバイス、又は任意の他の適切な物理的データ記憶媒体、又はこれらの何らかの組み合わせなどでもよい。
【００３８】
メモリストレージ１０２に記憶されたコミットされたテナントデータ（例えば、第１テナントデータ）が、不変ストレージ１０８に記憶されるべきとき、フラッシャ１０６は、データを暗号化し、それを不変ストレージ１０８のデータエクステント（例えば、データエクステント１１０）に記憶するために、鍵キャッシュ（例えば、図８に示す鍵キャッシュ）又は鍵管理システム１２８から暗号化鍵（例えば、第１暗号化鍵）を取り出すことができる。いくつかの実装において、テナントデータは、暗号化されて不変ストレージ１１８に記憶される前に、圧縮されてもよい。
【００３９】
データエクステント（data  extent）１１０は、テナントデータのフラグメント１１１、１１２、及び１１３を含み得る。図６に示すように、テナントデータのフラグメント１１１及びテナントデータのフラグメント１１２は、第１テナント（例えば、テナントＡ）に関してもよく、テナントデータのフラグメント１１３は、第２テナント（例えば、テナントＢ）に関してもよい。テナントデータのフラグメント１１１、１１２、及び１１３の各々は、単一のテナントのレコードのみを含んでもよい。第１テナントのテナントデータのフラグメント１１１及び１１２は、第１暗号化鍵で暗号化されてもよく、第２テナントのテナントデータのフラグメント１１３は、第２暗号化鍵で暗号化されてもよい。ブロックインデックス１１４は、テナントデータのフラグメント１１１、１１２、及び１１３の不変ストレージ１０８内のデータベーステーブルのインデックス番号を含み、データベーステーブルにおけるそれらの位置を示し得る。ブロックインデックス１１４は、いかなる特定テナントにも属し得ないシステム暗号化鍵で暗号化されてもよい。
【００４０】
ストレージカタログ（storage  catalog）１１６は、不変ストレージに通信上結合され得、データエクステント（データエクステント１１０など）及びエクステント参照（extent  references）を記憶するためのシステム１００のハードウェア及びソフトウェアの任意の適切な組み合わせであり得る。例えば、ストレージカタログは、メモリストレージ１０２は、半導体メモリ、ソリッドステートドライブ（ＳＳＤ）、ハードディスクドライブ、光学メモリ、光学記憶デバイス、又は任意の他の適切な物理的データ記憶媒体、又はこれらの何らかの組み合わせでもよい。エクステント参照は、物理的ストレージ（例えば、記憶デバイス）に記憶された物理的エクステントへの論理的参照として使用することができ、物理的ストレージへのアクセスを仮想化するために使用することができる。データエクステントは、テナントデータの１つ以上のフラグメント（例えば、テナントデータのフラグメント１１１、１１２、１１３など）及びブロックインデックスを含み得る。ストレージカタログ１１６は、いかなる特定テナントにも属し得ないシステム暗号化鍵を使用して暗号化されてもよい。
【００４１】
ブロックキャッシュ１１８は、半導体メモリ、ソリッドステートドライブ（ＳＳＤ）、ハードディスクドライブ、光学メモリ、光学記憶デバイス、又は任意の他の適切な物理的データ記憶媒体、又はこれらの何らかの組み合わせであり得る。ブロックキャッシュ１１８は、テナントデータのフラグメント１１９、１２０、及び１２１を含むことができる。テナントデータのフラグメント１１９、１２０、及び１２１の各々は、単一のテナントのレコードのみを含んでもよい。テナントデータのフラグメント１１９、１２０、及び１２１は、暗号化されていなくてもよい（すなわち、平文でもよい）。ブロックインデックス１２２は、テナントデータのフラグメント１１９、１２０、及び１２０のインデックス番号を含み、テーブル内のそれらの位置を示し得る。ブロックインデックス１２２は、暗号化されていなくてもよい。図１〜図２Ｂに関連して上述したように、フィルタリング、ソート、インデキシングなどのデータベース動作は、ブロックキャッシュ１１８内の非暗号化データに対して実行され得る。
【００４２】
一時スピル（Temp  spills）１２４は、ブロックキャッシュ１１８に記憶されたデータのオーバーフローを取り扱うための半導体メモリ、ソリッドステートドライブ（ＳＳＤ）、ハードディスクドライブ、光学メモリ、光学記憶デバイス、又は任意の他の適切な物理的データ記憶媒体、又はこれらの何らかの組み合わせであり得る。すなわち、テナントデータのフラグメント１１９、１２０、及び１２１、及び／又はブロックインデックス１２２のデータサイズが、ブロックキャッシュ１１８のデータキャパシティを超えるとき、一時スピル１２４は、オーバーフローデータ（例えば、データキャパシティを超える可能性があるためブロックキャッシュ１１８に適合しないデータ）を記憶することができる。ブロックキャッシュ１１８のデータキャパシティは、トランザクションがメモリストレージ１０２に書き込まれるとき（ここで、コミットされたトランザクションは不変ストレージ１０８にフラッシュされ得る）、増加されてもよい。一時スピルに記憶されたテナントデータのフラグメント及び／又はブロックインデックスデータは、暗号化されていなくてもよい。
【００４３】
クエリ１２６は、マルチテナントデータベースシステム１００により、例えば、１つ以上のアプリケーション及び／又はアプリケーションサーバ（例えば、図８に示すアプリケーションサーバ２０２及び／又はアプリケーションサーバ２０４）により受信することができ、メモリストレージ１０２及び／又はブロックキャッシュ１１８内に暗号化されていないテナントデータとして記憶され得る及び／又は不変ストレージ１０８内に暗号化されたテナントデータとして記憶され得るテナントデータを要求する。いくつかの実装において、マルチテナントデータベースシステム１００のデーモンが、要求されたテナントデータがブロックキャッシュ１１８に存在するかどうかを判定することができる。要求されたテナントデータがブロックキャッシュ１１８に存在せず、暗号化されて不変ストレージ１１８に記憶されている場合、図２Ａ〜図２Ｂに関連して上述したように、テナントデータを復号し、それをブロックキャッシュ１１８に提供するために、暗号化鍵（例えば、第１データの第１暗号化鍵）が鍵キャッシュ（例えば、図８に示す鍵キャッシュ）から、又は鍵管理システム１２８から取り出され得る。
【００４４】
マージ器（Merger）１３０は、既存のレコードを更新し（かつ、それらを新しいレコードとして書き込み）、かつ／あるいはマルチテナントデータベースシステム１００において新しいレコードを生成し得る。
【００４５】
図７は、開示される主題事項の一実装による、図４に示す例示的な方法を使用して第１テナントデータの異なるフラグメントに対して異なるサンドボックスを作成する一例示的なアーキテクチャを示す。いくつかの実装において、図４に示す動作６２において、マルチテナントデータベースシステム１００は、サンドボックステナントを、サンドボックステナント識別子を第１テナントデータ（例えば、図７に示す第１テナントデータのフラグメント１１１）の仮想スナップショットに、及びサンドボックス作成時点の後にサンドボックステナント（例えば、サンドボックステナント１ａ１ａ）により作成されたサンドボックステナントデータ（第１テナントの第１サンドボックス１１１ａのサンドボックステナントデータ）に関連づけることにより、作成することができる。サンドボックステナント１１１ａのサンドボックステナントデータは、図４の動作６４において、第１暗号化鍵（例えば、第１テナントのテナントデータのフラグメント１１１を暗号化するために使用されるのと同じ暗号化鍵）で暗号化されてもよい。
【００４６】
いくつかの実装において、マルチテナントデータベースシステムは、サンドボックステナントが作成された後、サンドボックステナント（例えば、サンドボックステナント１１１ａ）に対して新しい鍵を選択することができる。マルチテナントデータベースシステム１００は、新しい暗号化鍵を使用してサンドボックステナント１１１ａのサンドボックステナントデータを暗号化してもよく、再暗号化されたデータは、不変ストレージ１０８内のデータエクステントに記憶されてもよい。新たに暗号化されたデータは、サンドボックスが開始した際のデータのテナントデータと、サンドボックス作成時点の後に生成された任意のサンドボックスデータを含み得る。
【００４７】
いくつかの実装において、第１テナントデータのフラグメント１１１から複数のサンドボックスを作成することができる。他の実装において、マルチテナントデータベースシステム１００は、同じテナント（例えば、第１テナント）の異なるデータフラグメントに対して異なるサンドボックスを作成することができる。図７に示すように、第１テナントデータのフラグメント１１１を使用して、サンドボックステナント１１１ａを作成してもよく、第１テナントの異なるフラグメント１１２を使用して、サンドボックステナント１１２ａを作成してもよい。
【００４８】
図８は、開示される主題事項の実装による、鍵管理を備えた一例示的なマルチテナントデータベースシステム２００を示す。システム２００は、アプリケーションサーバ２０２及び／又はアプリケーションサーバ２０４などの１つ以上のアプリケーションサーバを含むことができる。アプリケーションサーバ２０２及び／又はアプリケーションサーバ２０４は、物理的サーバ、仮想化サーバ、及び／又はクラウドサーバシステムでもよい。
【００４９】
アプリケーションサーバ２０２、２０４は、１つ以上のアプリケーションを実行し、データベースサーバ２０６及び／又はデータベースサーバ２１０などの１つ以上のデータベースサーバに対してクエリ及び／又は書き込み要求を発行することができる。データベースサーバ２０６、２１０は、物理的サーバ、仮想化サーバ、及び／又はクラウドサーバシステムでもよい。いくつかの実装において、データベースサーバ２０６、２１０は、上述した図６に示すシステム１００のメモリストレージ１０２、トランザクションログ１０４、フラッシャ１０６、ブロックキャッシュ１１８、及び／又は一時スピル１２４のうち１つ以上を含むことができる。
【００５０】
データベースサーバ２０６は鍵キャッシュ２０８を含んでもよく、データベースサーバ２１０は鍵キャッシュ２１２を含んでもよい。上述のように、鍵キャッシュ２０８、２１２は、テナントデータを暗号化及び／又は復号するための１つ以上の暗号化鍵を記憶することができる。データベースサーバ２０６、２１０は、図６に関連して詳細に上述した不変ストレージ１０８に通信上結合することができる。
【００５１】
ＫＭＳ１２８は、テナントデータを暗号化及び／又は復号するための暗号化鍵を生成し、割り当て、記憶し、管理し、及び／又は取り出すためのハードウェア及びソフトウェアの任意の適切な組み合わせであり得る。例えば、ＫＭＳ１２８は、第１テナントに関連づけられた第１暗号化鍵又は第２テナントに関連づけられた第２暗号化鍵などの暗号化鍵を生成し、割り当て、記憶し、及び／又は取り出すことができる。ＫＭＳ１２８は、テナント暗号化鍵及び／又はシステム暗号化鍵（すなわち、インスタンス鍵）を管理することができ、該システム暗号化鍵は、テナント間データを暗号化するために使用され得る（例えば、トランザクションログ１０４、一時スピル１２４、ストレージカタログ１１６、及び／又はブロックインデックス１１４を暗号化するために使用される暗号化鍵）。いくつかの実装において、第１暗号化鍵及び／又は第２暗号化鍵などの暗号化鍵は、ＫＭＳ１２８に記憶することができ、ＫＭＳ１２８は、半導体メモリ、ソリッドステートドライブ（ＳＳＤ）、ハードディスクドライブ、光学メモリ、光学記憶デバイス、又は任意の他の適切な物理的データ記憶媒体、又はこれらの何らかの組み合わせを含み、かつ／あるいはこれらに通信上結合され得る。ＫＭＳ１２８は、鍵のローテーション、鍵の削除、鍵の使用監視などの鍵ライフサイクル管理を提供することができる。ＫＭＳ１２８は、アプリケーションサーバ２０２、２０４により提供され得る１つ以上のテナントに対して独自鍵持ち込み（bring-your-own-key、ＢＹＯＫ）をサポートしてもよい。
【００５２】
本開示の主題事項の実装は、様々なコンポーネント及びネットワークアーキテクチャにおいて実装され、それらと共に使用され得る。いくつかの実装において、図６及び図８に示すシステムアーキテクチャは、上述のように、図９〜図１０に示すコンポーネント及びネットワークアーキテクチャを使用して実装することができる。
【００５３】
図９は、本開示の主題事項の実装を実施するのに適した一例示的なコンピュータ６００である。本明細書でさらに詳細に論じるように、コンピュータ６００は、複数のコンピュータのネットワーク内の単一のコンピュータでもよい。図９に示すように、コンピュータ６００は、中央又は分散コンポーネント７００（例えば、サーバ、クラウドサーバ、データベース、クラスタ、アプリケーションサーバなど）と通信することができる。中央コンポーネント７００は、第２コンピュータ８００などの１つ以上の他のコンピュータと通信することができ、第２コンピュータ８００は、ストレージ８１０を含み得る。第２コンピュータ８００は、サーバ、クラウドサーバなどでもよい。ストレージ８１０は、例えば、ハードディスクドライブ、ソリッドステートドライブ、光学媒体、フラッシュメモリ、テープドライブ、レジスタ、及びランダムアクセスメモリ等、又はこれらの任意の組み合わせを含む、任意の適切な揮発性及び不揮発性物理記憶媒体の任意の適切な組み合わせを使用することができる。
【００５４】
データは、任意の適切なファイルシステム又は記憶スキーム又は階層を使用して、任意の適切なフォーマットで、例えばストレージ８１０に記憶することができる。例えば、ストレージ８１０は、複数のレベルを有するログ構造マージ（ＬＳＭ）ツリーを使用してデータを記憶することができる。さらに、図９〜図１０に示すシステムがマルチテナントシステムである場合、ストレージは、テナントのためのデータベースの各インスタンスについて別個のログ構造マージツリーに編成することができる。あるいは、特定のサーバ又はシステム上の全てのレコードの内容が、単一のログ構造マージツリー内に記憶されてもよく、その場合、レコードのバージョンに関連づけられた一意のテナント識別子を、本明細書に開示されるように、各テナントのデータを区別するために使用することができる。例えば、ある一意テナント識別子が第１テナントに関連づけられてもよく、異なる識別子が第２テナントに関連づけられてもよい。より最近のトランザクションは、ツリーの最も高いレベル又は上位レベルに記憶することができ、より古いトランザクションは、ツリーのより低いレベルに記憶することができる。あるいは、各レコードの最も最近のトランザクション又はバージョン（すなわち、各レコードの内容）が、ツリーの最も高いレベルに記憶され、前のバージョン又は前のトランザクションが、ツリーのより低いレベルに記憶されてもよい。
【００５５】
中央コンポーネント７００に対して、及び／又は中央コンポーネント７００から得られる情報は、コンピュータ６００がコンピュータ８００と情報を共有し得ないように、各コンピュータについて分離することができる。あるいは又はさらに、コンピュータ６００は、第２コンピュータ８００と直接通信してもよい。
【００５６】
コンピュータ（例えば、ユーザコンピュータ、エンタープライズコンピュータ等）６００は、中央プロセッサ６４０、メモリ６７０（典型的にはＲＡＭだが、ＲＯＭ、フラッシュＲＡＭ等も含むことができる）、入力／出力コントローラ６８０、ディスプレイ又はタッチスクリーンなどのユーザディスプレイ６２０、ユーザ入力インターフェース６６０などのコンピュータ６００の主要コンポーネントを相互接続するバス６１０を含み、ユーザ入力インターフェース６６０は、１つ以上のコントローラと、キーボード、マウス、ＷｉＦｉ／セルラ無線機、タッチスクリーン、マイクロフォン／スピーカなどの関連するユーザ入力又は装置を含み得、Ｉ／Ｏコントローラ６８０と、ハードドライブ、フラッシュストレージ、ファイバチャネルネットワーク、ＳＡＮ装置、ＳＣＳＩ装置などの固定ストレージ６３０と、光ディスク、フラッシュドライブ等を制御し及び受けるように動作するリムーバブル媒体コンポーネント６５０に密に結合され得る。
【００５７】
バス６１０は、前述したように、中央プロセッサ６４０とメモリ６７０との間のデータ通信を可能にし、メモリ６７０には、読取専用メモリ（ＲＯＭ）又はフラッシュメモリ（いずれも図示せず）、及びランダムアクセスメモリ（ＲＡＭ）（図示せず）を含んでもよい。ＲＡＭは、オペレーティングシステム及びアプリケーションプログラムがロードされるメインメモリを含むことができる。ＲＯＭ又はフラッシュメモリは、他のコードの中でも、周辺コンポーネントとの相互作用などの基本的なハードウェア動作を制御する基本入出力システム（ＢＩＯＳ）を含むことができる。コンピュータ６００に存在するアプリケーションは、ハードディスクドライブ（例えば、固定ストレージ６３０）、光学ドライブ、フロッピーディスク、又は他の記憶媒体６５０などのコンピュータ読取可能媒体に記憶され、これを介してアクセスすることができる。
【００５８】
固定ストレージ６３０は、コンピュータ６００と一体的でもよく、あるいは別個で、他のインターフェースを通じてアクセスされてもよい。ネットワークインターフェース６９０は、インターネットサービスプロバイダ（ＩＳＰ）を介したインターネットへの電話リンクを介したリモートサーバへの直接接続、又はＰＯＰ（プレゼンスポイント（point  of  presence））又は他の手法を介したインターネットへの直接ネットワークリンクを介したリモートサーバへの直接接続を提供することができる。ネットワークインターフェース６９０は、デジタルセルラー電話接続、セルラーデジタルパケットデータ（ＣＤＰＤ）接続、デジタル衛星データ接続などを含む無線技術を使用して、そのような接続を提供することができる。例えば、ネットワークインターフェース６９０は、図１０に示すように、コンピュータが１つ以上のローカル、ワイドエリア、又は他のネットワークを介して他のコンピュータと通信することを可能にし得る。
【００５９】
多くの他のデバイス又はコンポーネント（図示せず）を、同様の方法で接続することができる（例えば、データキャッシュシステム、アプリケーションサーバ、通信ネットワークスイッチ、ファイアウォールデバイス、認証及び／又は認可サーバ、コンピュータ及び／又はネットワークセキュリティシステムなど）。反対に、本開示を実施するために、図１０に示されるコンポーネントの全てが存在する必要はない。コンポーネントは、図示のものと異なる方法で相互接続することができる。図９〜図１０に示すようなコンピュータの動作は、当該分野で容易にわかり、本出願では詳細に論じない。本開示を実装するためのコードは、メモリ６７０、固定ストレージ６３０、リムーバブル媒体６５０のうち１つ以上などのコンピュータ読取可能記憶媒体に、又はリモートのストレージ位置に記憶することができる。
【００６０】
図１０は、開示される主題事項の一実装による一例示的なネットワーク構成を示す。クラウド１２０２により表されるネットワーク内の異なるノードにおける４つの別個のデータベースシステム１２００ａ〜ｄは、ネットワークリンク１２０４を通じて互いに、及びユーザ（図示せず）と通信する。データベースシステム１２００の各々は、データベースの複数のインスタンスをホストするように動作可能であり得、各インスタンスは、特定のテナント（例えば、第１テナント、第２テナントなど）に関連づけられたユーザのみがアクセス可能である。データベースシステムの各々は、ストレージエリアネットワーク（図示せず）、ロードバランサ、及びバックアップサーバと共に、ファイアウォール、他のセキュリティシステム、及び認証システムと共に、コンピュータのクラスタを構成することができる。システム１２００のうちいずれかのインスタンスのうちいくつかが、データを取り込んでインスタンス内のストレージに提供するために、ユーザから、又はコンピューティング要素（図示せず）から受け取ったトランザクションを処理及びコミットするライブ又は本番インスタンスでもよい。
【００６１】
さらに、マルチテナントシステムは、各ノードにコンピューティングシステムを有するネットワーク全体に分散されたサーバシステム上に様々なテナントインスタンスを有することができる。各テナントのライブ又は本番データベースインスタンスは、そのトランザクションを１つのコンピュータシステムでのみ処理させてもよい。そのインスタンスのトランザクションを処理するコンピューティングシステムは、他のテナントのための他のインスタンスのトランザクションをさらに処理してもよい。
【００６２】
より一般的には、本開示の主題事項の様々な実装は、コンピュータにより実装されたプロセス及びこれらのプロセスを実施する装置の形態を含んでもよく、あるいは該形態で実装されてもよい。また、実装は、フロッピーディスケット、ＣＤ−ＲＯＭ、ハードドライブ、ＵＳＢ（ユニバーサルシリアルバス）ドライブ、又は任意の他のマシン読取可能記憶媒体などの非一時的及び／又は有形媒体に実装された命令を含むコンピュータプログラムコードを有するコンピュータプログラムプロダクトの形態で実施されてもよく、コンピュータプログラムコードがコンピュータにロードされ、コンピュータにより実行されたとき、コンピュータは、開示される主題事項の実装を実施する装置になる。また、実装は、例えば、記憶媒体に記憶され、コンピュータにロードされ、及び／又はコンピュータにより実行されるか、あるいは電気配線若しくはケーブル接続を通じて、光ファイバを通じて、又は電磁放射を介してなどで何らかの伝送媒体を通じて伝送されるかにかかわらず、コンピュータプログラムコードの形態で実施されてもよく、コンピュータプログラムコードがコンピュータにロードされ、コンピュータにより実行されたとき、コンピュータは、開示される主題事項の実装を実施する装置になる。汎用マイクロプロセッサ上に実装されたとき、コンピュータプログラムコードセグメントが、特定の論理回路を作り出すようにマイクロプロセッサを構成する。いくつかの構成において、コンピュータ読取可能記憶媒体に記憶されたコンピュータ読取可能命令のセットは、汎用プロセッサにより実施されてもよく、これは、汎用プロセッサ又は汎用プロセッサを含むデバイスを、命令を実施又は実行するように構成された専用デバイスに変換することができる。実装は、ハードウェア及び／又はファームウェアにおける開示される主題事項の実装による手法の全部又は一部を実施する汎用マイクロプロセッサ及び／又は特定用途向け集積回路（ＡＳＩＣ）などの、プロセッサを含み得るハードウェアを使用して実施されてもよい。プロセッサは、ＲＡＭ、ＲＯＭ、フラッシュメモリ、ハードディスク、又は電子情報を記憶することができる任意の他のデバイスなどのメモリに結合されてもよい。メモリは、開示される主題事項の実装による手法を実行するために、プロセッサにより実行されるように適合された命令を記憶することができる。
【００６３】
上述の記載は、説明の目的で、特定の実装を参照して記載された。しかしながら、上記の例示的な議論は、網羅的であること、又は開示される主題事項の実装を開示された正確な形態に限定することを意図したものではない。上記の教示を考慮し、多くの修正及びバリエーションが可能である。実装は、開示される主題事項の実装の原理及びそれらの実際の適用を説明し、それにより、当業者がそれらの実装と企図された特定の用途に適し得る様々な修正を備えた様々な実装を利用できるように選択され、記載されている。
【図１】
2021533619.tif 000003
【図２Ａ】
2021533619.tif 000004
【図２Ｂ】
2021533619.tif 000005
【図３】
2021533619.tif 000006
【図４】
2021533619.tif 000007
【図５】
2021533619.tif 000008
【図６】
2021533619.tif 000009
【図７】
2021533619.tif 000010
【図８】
2021533619.tif 000011
【図９】
2021533619.tif 000012
【図１０】
2021533619.tif 000013
【国際調査報告】
2021533619.tif 000014
2021533619.tif 000015