テナント
OceanBaseデータベースのテナントは論理的な概念であり、リソース割り当ての単位であり、データベースオブジェクト管理とリソース管理の基盤です。テナントは、さまざまなデータベースオブジェクトのコンテナであると同時に、リソース(CPU、メモリ、I/Oなど)のコンテナでもあります。OceanBaseデータベースでは、テナント間のデータは完全に分離されており、各テナントは従来のデータベースの1つのデータベースインスタンスに相当します。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ユーザーがこれに該当します。これら3者は相互に連携し、相互に制約し合い、データベースの管理業務を共同で遂行します。
権限
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ロールを持つユーザーは、自身のスキーマ内でのみデータベースオブジェクトを作成できます。CONNECT:Connect権限を持つユーザーはデータベースにログインできます。PUBLIC:このロールはテナント内のすべてのユーザーに適用されます。デフォルトでは権限は付与されません。STANDBY_REPLICATION:このロールは主にネットワークベースの物理スタンバイデータベースシナリオで使用されます。
機能の適用範囲
現在、OceanBaseデータベースのOracleテナントのみがロール管理をサポートしています。
Oracleモードのロール管理に関する操作については、ロール管理を参照してください。
MySQLモードでは、現在システムに組み込まれたデフォルトロールはありません。MySQLモードのロール管理に関する操作については、ロール管理を参照してください。
間接権限
ユーザーの権限には、直接付与されたシステム権限やオブジェクト権限に加え、ロールを付与された後、そのロールを通じて取得した権限も含まれます。ほとんどの操作に必要な権限は、直接付与されたものであれ、ロールを通じて間接的に保有するものであれ、条件を満たすことができます。ただし、以下のシナリオでは直接権限が必要です:
- ビューを作成する際、ビュー内のオブジェクトにアクセスするために必要な権限。
- 定義者権限を持つ有名PLブロック内のステートメントを実行するために必要な権限。
権限チェック
SQL解析段階では、SQL文で必要なすべての権限を解析し、ユーザーが対応する権限を一つずつ持っているかチェックします。システム操作の権限については、権限が不足している場合は直接「権限不足」というエラーが表示されます。オブジェクトへのアクセス権限については、ユーザーがそのオブジェクトに対して全く権限を持っていない場合は「オブジェクト不存在」というエラーが表示され、ユーザーがそのオブジェクトに対して他の権限を持っているが必要な権限だけがない場合は「権限不足」というエラーが表示されます。