優れたデータベースシステムでは、ユーザーの管理に加えて、一般ユーザーによるデータベースオブジェクトの操作も必要です。しかし、一般ユーザーは対象となるデータベースオブジェクトへのアクセスおよび操作権限を持っていなければならず、それがなければ何の操作も行うことができません。
Oracleモードの権限
権限の分類
Oracleモードの権限は、次の2つのカテゴリに分類されます:
オブジェクト権限:特定のオブジェクトに対する操作権限。例:特定のテーブルオブジェクトに対するAlter、Select、Updateなどの権限。
システム権限:ユーザーがあるスキーマまたは任意のスキーマ上で特定のデータベース操作を実行することを許可する権限。
システム権限は、オブジェクト権限よりもはるかに広範な権限を提供します。
権限の委譲
権限の委譲は、権限付与者が集中する問題を解決します。権限付与時にwith admin/grant optionを指定することで、ユーザーに対してその権限を他のユーザーに委譲する権限を同時に付与できます。オブジェクト権限を回収する際は、そのユーザーが他のユーザーに委譲した対応する権限も同時に回収する必要があります。例えば、AがBに権限を付与し、BがCに権限を付与した場合、AがBの権限を回収すると、Cの権限も回収されます。システム権限を回収する際は、委譲された権限は連鎖して回収されません。
ロール
権限の管理を容易にするために、ロールが設定されています。ロールはシステム権限とオブジェクト権限の組み合わせであり、ロールには他のロールを含めることもできます。ロールをユーザーに付与すると、ユーザーはそのロールに含まれるすべての権限を取得します。システムは新しいテナントを作成する際に、以下のデフォルトロールを組み込んでいます:
DBA:ほとんどすべてのシステム権限を持ちます。RESOURCE:Resourceロールを持つユーザーは、自身のスキーマ内でのみデータベースオブジェクトを作成できます。CONNECT:Connect権限を持つユーザーはデータベースにログインできます。PUBLIC:このロールはテナント内のすべてのユーザーに適用されます。デフォルトでは権限は付与されません。STANDBY_REPLICATION:このロールは主にネットワークベースの物理スタンバイデータベースシナリオで使用されます。
間接権限
ユーザーの権限には、直接付与されたシステム権限やオブジェクト権限に加え、ロールを付与された後、そのロールを通じて得られる権限も含まれます。ほとんどの操作に必要な権限は、直接付与されたものであれ、ロールを通じて間接的に持っているものであれ、条件を満たすことができます。ただし、以下のシナリオでは直接権限が必要です:
ビューを作成する際、ビュー内のオブジェクトにアクセスするために必要な権限。
定義者権限を持つ名前付きPL/SQLブロック内のステートメントを実行するために必要な権限。
権限チェック
Resolverフェーズでは、SQL文で必要なすべての権限を解析し、ユーザーが対応する権限を持っているかどうかを順にチェックします。システム操作の権限が不足している場合は、直接権限不足のエラーを返します。アクセス対象の権限については、ユーザーがその対象に対して全く権限を持っていない場合は「オブジェクト不存在」のエラーを返し、ユーザーがその対象に対して他の権限はあるが必要な権限がない場合は「権限不足」のエラーを返します。
MySQLモードの権限
Oracleモードとの相違点と共通点
MySQLモードもロールをサポートしていますが、現在システムに組み込まれたデフォルトのロールはありません。権限チェックのロジックはOracleと一致しています。
権限の分類
MySQLモードの権限は3つのレベルに分かれています:
グローバル権限:テナント全体に影響を及ぼす権限です。例えば、システム設定の変更やすべてのテーブルへのアクセスなどの権限がこれに該当します。
データベース権限:特定のデータベース内のすべてのオブジェクトに影響を及ぼす権限です。例えば、対応するデータベース内でテーブルの作成・削除、テーブルへのアクセスなどの権限がこれに該当します。
オブジェクト権限:特定のオブジェクトに影響を及ぼす権限です。例えば、特定のテーブル、ビュー、またはインデックスへのアクセス権限がこれに該当します。
ネットワークセキュリティアクセス制御
OceanBaseデータベースは、ネットワークセキュリティアクセス制御を実現するためのホワイトリストポリシーを提供します。テナントのホワイトリストはシステム変数ob_tcp_invited_nodesで制御され、リスト形式の値をサポートしており、リストの値は半角カンマ(,)で区切られます。例:A,B,C,D。
ユーザーがログインする際、OBServerノードはユーザーのIPアドレスをA、B、C、Dと順次照合検証します。すべて一致しない場合はアクセスを拒否します。いずれか一つでも一致した場合は、ホワイトリストを通過したことになります。
リスト値は以下の値をサポートします:
IPアドレス。例:192.168.1.1。照合時は等価照合を採用し、ユーザーClient IPがそのIP値と等しい場合に一致となります。
パーセント記号(%)またはアンダースコア()を含むIPアドレス。例:192.168.1.% または 192.168.1.。照合時はあいまい照合を採用し、LIKE構文に似ています。
IP/NETMASKアドレス。例:192.168.x.x/24 または 192.168.x.x/255.255.xxx.x。照合時はマスク照合を採用し、Client_IP & NetMask == IP を満たす場合に一致となります。これはMySQLのマスク照合に似ています。
行レベルアクセス権限制御
OceanBaseデータベースはOracleのLabel Security機能に対応しており、行レベルでアクセスを制御することで、データの読み書きのセキュリティを確保します。
Label Securityは強制アクセス制御の一方式であり、テーブルにLabel列を追加して各行のLabel値を記録し、アクセス時にユーザーのLabelとデータのLabelを比較することで、主体(ユーザー)が客体(テーブル内のデータ)にアクセスすることを制約する目的を達成します。
OceanBaseデータベースは、この機能の管理と使用を行うための組み込みセキュリティ管理者 LBACSYS を提供しています。セキュリティ管理者は、セキュリティポリシーの作成、ポリシー内のLabelの定義、ユーザーのLabelの設定を通じて、独自のセキュリティポリシーをカスタマイズできます。一つのセキュリティポリシーを複数のテーブルに適用することも、一つのテーブルに複数のセキュリティポリシーを適用することも可能です。セキュリティポリシーが適用されるたびに、そのテーブルには自動的にそのセキュリティポリシーのアクセス制御用の列が追加されます。
注意
現在、Label SecurityはOracleモードのみでサポートされています。