テナント
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ユーザーがこれに該当します。これら三者は相互に関連し、相互に制約し合い、共同でデータベースの管理業務を遂行します。
権限
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解析段階では、SQL文で必要なすべての権限を解析し、ユーザーが対応する権限を持っているかどうかを順次チェックします。システム操作の権限については、権限が不足している場合は直接「権限不足」というエラーが表示されます。オブジェクトへのアクセス権限については、ユーザーがそのオブジェクトに対して全く権限を持っていない場合は「オブジェクト不存在」というエラーが表示され、ユーザーがそのオブジェクトに対して他の権限を持っているが必要な権限だけがない場合は「権限不足」というエラーが表示されます。