web-dev-qa-db-ja.com

OracleでSELECT ANY TABLE権限はどのように機能しますか?

権限SELECT ANY TABLEがOracleの内部でどのように機能するか知りたいのですが。

単一の特権として扱われますか?それとも、各テーブルにGRANT SELECT ON MyTable TO MyUserを作成することと同等ですか?

例として、私はこれがうまくいくかどうか知りたいです:

GRANT SELECT ANY TABLE TO PUBLIC;
REVOKE ALL ON MY_TABLE FROM PUBLIC;

これらのクエリの後でも、どのユーザーからもMY_TABLEにアクセスできますか?

2
LostReality

はい、すべてのユーザーがMY_TABLEをクエリできます。

さまざまな 特権タイプ を見ています。

ユーザー権限の主なタイプは次のとおりです。

  • システム権限-システム権限により、ユーザーは特定のアクションを実行したり、特定のタイプのスキーマオブジェクトに対してアクションを実行したりできます。たとえば、システム権限CREATE TABLEは、ユーザーがそのユーザーに関連付けられたスキーマにテーブルを作成することを許可し、システム権限CREATE USERは、ユーザーがデータベースユーザーを作成することを許可します。
  • オブジェクト権限-オブジェクト権限により、ユーザーは特定のスキーマオブジェクトに対して特定のアクションを実行できます。さまざまなタイプのスキーマオブジェクトに対して、さまざまなオブジェクト権限を使用できます。 EMPLOYEESテーブルから行を選択する権限、またはDEPARTMENTSテーブルから行を削除する権限は、オブジェクト権限の例です。

SELECT ANY TABLE は、被付与者が以下を実行できるようにするシステム権限です。

SYSを除く任意のスキーマのテーブル、ビュー、またはマテリアライズドビューをクエリします。 SELECT ... FOR UPDATEを使用して行ロックを取得します。

スタンドアロンの単一権限であることを許可すると、dba_sys_privsに表示されます。 Oracleは、ユーザーがテーブルへのアクセスを許可されているかどうかを判断すると、最初にシステム権限を確認でき、特定のオブジェクト権限(dba_tab_privsに表示されます)を探すことができます。実行中のアクション。

システム権限は、データベース内の各オブジェクトの個々の権限に変換されません。新しいオブジェクトを作成すると、システム権限に基づいてそのオブジェクトに権限を付与する必要がある人を自動的に判断する必要があるため、これを維持することは恐ろしいことです。それは、それと個別に付与された特権との違いが分からないことを意味します。したがって、たとえば、特定のテーブルでselect privsを明示的に許可した場合、ユーザーにはSELECT ANY TABLEが付与され、SELECT ANY TABLEが取り消されました-以前の明示的な付与はどうなりますか?

取り消されるオブジェクトに対するすべての特権を指定したことを除いて、シナリオは基本的に同じです。これらのコマンドが2つだけ含​​まれる場合、PUBLICMY_TABLEに対する明示的な権限を持たないため、取り消しても実際には何も起こりません。ただし、そのテーブルに対する明示的な特権が付与されている場合、それらは取り消されます。ただし、上位レベルのSELECT ANY TABLEシステム権限には影響しません。

特権は累積的です。特定のオブジェクトに対する特権を取り消しても、そのオブジェクトへのアクセスはblockされません。単に1つの可能なアクセスルートが削除されるだけです。

ちなみに、うまくいけば、このような強力なシステム権限を控えめに付与し、 本当に必要な場合のみ にする必要があるため、不自然な例を使用したこともあります。ユーザーがデータベース内の任意のテーブルをクエリできるようにすると、セキュリティモデルに大きな穴が開く可能性があります。再び ドキュメントから

信頼できるユーザーにのみANY権限を付与することをお薦めします

そして

システム権限をPUBLICに付与しないことをお勧めします。

詳細は データベースセキュリティガイド を参照してください。

3
Alex Poole