次の状況があるとします。Oracleスキーマ/ユーザー:USER_TEST(「セッションの作成」権限を持つ)。 SYSDBAとしてのSYSは、スキーマUSER_TESTに結合テーブルを作成します。ユーザーUSER_TESTが自分のスキーマのテーブルにアクセスすることを禁止することはできますか?
いいえ、スキーマはOracleのユーザーです。他のデータベースでは、スキーマとユーザーが実際に異なる(そして適切に異なる)場合、ユーザー名と一致するスキーマ名を持つことができますが、ユーザーはそのスキーマの下のオブジェクトに対する権限を持っていません。
取り消すことができる特権はありませんが、別のユーザーを作成できないのはなぜでしょうか。質問に対する答えは...です。
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
を防ぐには、次の手順を実行する必要があります。