web-dev-qa-db-ja.com

自分のスキーマのテーブルへのアクセスを禁止することは可能ですか-Oracle?

次の状況があるとします。Oracleスキーマ/ユーザー:USER_TEST(「セッションの作成」権限を持つ)。 SYSDBAとしてのSYSは、スキーマUSER_TESTに結合テーブルを作成します。ユーザーUSER_TESTが自分のスキーマのテーブルにアクセスすることを禁止することはできますか?

3
xiatus

いいえ、スキーマはOracleのユーザーです。他のデータベースでは、スキーマとユーザーが実際に異なる(そして適切に異なる)場合、ユーザー名と一致するスキーマ名を持つことができますが、ユーザーはそのスキーマの下のオブジェクトに対する権限を持っていません。

4
gsiems

取り消すことができる特権はありませんが、別のユーザーを作成できないのはなぜでしょうか。質問に対する答えは...です。

はい

Enterprise EditionのOracleを使用している場合は、Virtual Private Database機能を使用して、テーブルが選択されないようにすることができます。 Oracle Database Security Guide 11g Release 2 の概要は次のとおりです。

Oracle Virtual Private Database(VPD)を使用すると、行および列レベルでデータベースアクセスを制御するセキュリティポリシーを作成できます。基本的に、Oracle Virtual Private Databaseは、Oracle Virtual Private Databaseのセキュリティポリシーが適用されたテーブル、ビュー、またはシノニムに対して発行されるSQLステートメントに動的なWHERE句を追加します。

Oracle Virtual Private Databaseは、データベースの表、ビューまたはシノニムに直接、細かいレベルのセキュリティを実施します。セキュリティポリシーをこれらのデータベースオブジェクトに直接アタッチし、ユーザーがデータにアクセスするたびにポリシーが自動的に適用されるため、セキュリティを回避する方法はありません。

ユーザーがOracle Virtual Private Databaseポリシーで保護されている表、ビューまたはシノニムに直接または間接的にアクセスすると、Oracle DatabaseはユーザーのSQL文を動的に変更します。この変更により、セキュリティポリシーを実装する関数によって返されるWHERE条件(述語と呼ばれる)が作成されます。 Oracle Databaseは、関数で表されるか、または関数によって戻される条件を使用して、ユーザーに対して透過的に文を動的に変更します。 Oracle Virtual Private DatabaseポリシーをSELECT、INSERT、UPDATE、INDEXおよびDELETE文に適用できます。

テーブルでSELECTを防ぐには、次の手順を実行する必要があります。

  1. スキーマ/オブジェクト名を受け入れ、WHERE句スタイルのVarchar2を返す関数を作成します。この場合、ユーザーが自分のオブジェクトにアクセスしたくないユーザーである場合は、「1 = 2」のようなものを返します。
  2. ユーザーが所有するテーブルごとに、DBMS_RLSパッケージのAdd_Policy関数を呼び出します。これにより、保護するテーブルに関数をアタッチするポリシーが作成されます。
5
Leigh Riffel