テナント
OceanBaseデータベースのテナントは論理的な概念であり、リソース割り当ての単位であり、データベースオブジェクト管理とリソース管理の基盤です。テナントは、各種データベースオブジェクトのコンテナであると同時に、CPU、メモリ、I/Oなどのリソースのコンテナでもあります。OceanBaseデータベースのテナント間のデータは完全に隔離されており、各テナントは従来のデータベースの一つのインスタンスに相当します。OceanBaseデータベースのテナントには、システムテナントと一般テナントがあります。OceanBaseデータベースでは、管理用のシステムテナント(sysテナント)が事前に定義されており、その互換モードはMySQLです。一般テナントはさらに、OracleモードのテナントとMySQLモードのテナントに分かれ、それぞれOracleテナントとMySQLテナントと略称されます。
ユーザー
OceanBaseデータベースのユーザーには、システムテナントユーザーと一般テナントユーザーがあります。システムテナントの組み込みシステム管理者はrootユーザーであり、MySQLテナントの組み込みテナント管理者はrootユーザーであり、Oracleテナントの組み込みテナント管理者はsysユーザーです。ユーザーを作成する際、現在のセッションのテナントがシステムテナントである場合、新しく作成されたユーザーはシステムテナントユーザーとなり、そうでない場合は一般テナントユーザーとなります。システムテナントであっても一般テナントであっても、テナント管理者が作成したユーザーはそのテナント内でのみログインに使用できます。ユーザー名はテナント内で一意であり、異なるテナントのユーザーは同名であっても構いません。ユーザー名@テナント名の形式で、システム全体でユニークにユーザーを特定できます。
Oracleモードにおける管理ユーザー
OceanBaseデータベースのOracleモードでは、データベース管理において三権分立のセキュリティ管理体制を採用しており、セキュリティ性の高いデータベースを構築することを目指しています。MySQLモードでは、現在のところ三権分立の管理方式はサポートされていません。
現実世界においても、すべての権限を同一人物に付与すると、権限乱用のリスクが生じる可能性があります。大規模なデータベースにおいては、データベースのセキュリティ観点から、データベースシステムの権限を異なるユーザーロールに割り当てて管理し、それぞれが異なる業務責任に重点を置くことで、相互に制約し合い監督し合うことができ、システム全体のセキュリティを効果的に保証する必要があります。
三権分立体制では、管理者をデータベース管理者(DBA)、データベースセキュリティ管理者(SSO)、データベース監査員(AUDITOR)に分類します。
データベース管理者(DBA)
各データベースには少なくとも1人のデータベース管理者が必要であり、OceanBaseデータベース管理システムのインストールとアップグレード、データベースパラメータの設定、データベースオブジェクトの作成、自己アクセス権限の割り当て、データのインポート・エクスポート、およびデータベースのバックアップと復旧を担当します。OceanBaseデータベースのOracleモードでは、組み込みのSYSユーザーがこれに該当します。
データベースセキュリティ管理者(SSO)
データベースの監査設定の設定、新しいデータベース監査員の定義、データベースの監査記録の確認、システムのセキュリティレベル、範囲、グループの設定、および主体と客体に対するセキュリティマーカーの定義を担当し、システムのセキュリティを全面的に向上させます。OceanBaseデータベースのOracleモードでは、組み込みのLBACSYSユーザーがこれに該当します。
データベース監査員(AUDITOR)
システムに対する強制的アクセス制御の実施、監査対象と操作の設定、新しいデータベース監査員の定義、監査記録の確認と分析、およびシステムのポリシーとマーカーの設定を担当します。監査を設定することで、システム内で誰がどのような操作を行ったかをほぼ追跡でき、事後の調査を容易にします。OceanBaseデータベースのOracleモードでは、組み込みのORAAUDITORユーザーがこれに該当します。これら三者は相互に関連し合い、相互に制約し合いながら、共にデータベースの管理業務を遂行します。
権限
MySQLモードにはロールが存在せず、権限モデルは比較的シンプルです。権限チェックのロジックはOracleと一致しています。
権限の分類
Oracleモードの権限は2種類に分かれます:
オブジェクト権限:特定のオブジェクトに対する操作権限。例えば、あるテーブルオブジェクトに対するAlter、Select、Updateなどの権限。
システム権限:ユーザーがあるSchemaまたは任意のSchema上で特定のデータベース操作を実行することを許可する権限。
システム権限が提供する権限は、オブジェクト権限よりもはるかに広範囲です。
Oracleモードにおける詳細な権限の分類については、権限の分類を参照してください。
MySQLモードの権限は3つのレベルに分かれます:
グローバル権限:テナント全体に影響を与える権限。例えば、システム設定の変更やすべてのテーブルへのアクセスなどの権限。
データベース権限:特定のデータベース内のすべてのオブジェクトに影響を与える権限。例えば、該当するデータベース内でテーブルの作成・削除、テーブルへのアクセスなどの権限。
オブジェクト権限:特定のオブジェクトに影響を与える権限。例えば、特定のテーブル、ビュー、インデックスへのアクセス権限。
MySQLモードにおける詳細な権限の分類については、権限の分類を参照してください。
権限の委任
権限の委任は、権限付与者が集中する問題を解決します。権限付与時にwith admin/grant optionを指定することで、ユーザーに対し、その権限を他のユーザーに委任する権限を同時に付与できます。オブジェクト権限を取り消す際には、そのユーザーが他のユーザーに委任した対応する権限も同時に取り消されます。つまり、AがBに権限を付与し、BがCに権限を付与した場合、AがBの権限を取り消すと、Cの権限も取り消されます。システム権限を取り消す際には、委任された権限は階層的に取り消されません。
ロール
権限管理を容易にするため、OceanBaseデータベースではロールが設定されています。ロールとは、一連のシステム権限とオブジェクト権限の組み合わせであり、ロールには他のロールを含むこともできます。ロールをユーザーに付与すると、ユーザーはそのロールに含まれるすべての権限を持つことになります。
Oracleモードでは、システムが新しいテナントを作成する際に、以下のデフォルトロールが組み込まれています:
DBA:ほとんどすべてのシステム権限を持っています。RESOURCE:Resourceロールを持つユーザーは、自身のSchema内でのみデータベースオブジェクトを作成できます。CONNECT:Connect権限を持つユーザーはデータベースにログインできます。PUBLIC:このロールはテナント内のすべてのユーザーに適用されます。デフォルトでは権限は付与されていません。STANDBY_REPLICATION:このロールは主にネットワークベースのフィジカル・スタンバイ・データベースシナリオで使用されます。
適用対象
現在、OceanBaseデータベースのOracleテナントのみがロール管理をサポートしています。
Oracleモードにおけるロール管理の関連操作については、ロール管理を参照してください。
MySQLモードでは、システムに組み込まれたデフォルトのロールはありません。MySQLモードにおけるロール管理の関連操作については、ロール管理を参照してください。
間接権限
ユーザーの権限には、直接付与されたシステム権限やオブジェクト権限に加えて、ロールを付与後にそのロールを通じて取得する権限も含まれます。ほとんどの操作に必要な権限は、直接付与されたものであれ、ロールを通じて間接的に持つものであれ、条件を満たすことができます。ただし、以下のシナリオでは直接権限が必要です:
- ビューを作成する際、ビュー内のオブジェクトにアクセスするために必要な権限。
- 定義者権限を持つ有名PLブロック内のステートメントを実行するために必要な権限。
権限チェック
SQL解析段階では、1つのSQL文に必要なすべての権限を解析し、ユーザーがそれぞれの権限を持っているかどうかを順番にチェックします。システム操作の権限については、権限が不足している場合は直接権限不足のエラーが報告されます。オブジェクトへのアクセス権限については、ユーザーがそのオブジェクトに対して何の権限も持っていない場合は、オブジェクトが存在しないというエラーが報告されます。ユーザーがそのオブジェクトに対して他の権限を持っている場合でも、必要な権限がない場合は、権限不足のエラーが報告されます。