権限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
にアクセスできますか?
はい、すべてのユーザーが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つだけ含まれる場合、PUBLIC
はMY_TABLE
に対する明示的な権限を持たないため、取り消しても実際には何も起こりません。ただし、そのテーブルに対する明示的な特権が付与されている場合、それらは取り消されます。ただし、上位レベルのSELECT ANY TABLE
システム権限には影響しません。
特権は累積的です。特定のオブジェクトに対する特権を取り消しても、そのオブジェクトへのアクセスはblockされません。単に1つの可能なアクセスルートが削除されるだけです。
ちなみに、うまくいけば、このような強力なシステム権限を控えめに付与し、 本当に必要な場合のみ にする必要があるため、不自然な例を使用したこともあります。ユーザーがデータベース内の任意のテーブルをクエリできるようにすると、セキュリティモデルに大きな穴が開く可能性があります。再び ドキュメントから :
信頼できるユーザーにのみ
ANY
権限を付与することをお薦めします
そして
システム権限を
PUBLIC
に付与しないことをお勧めします。
詳細は データベースセキュリティガイド を参照してください。