私は管理の初心者であり、Oracle データベースのセキュリティを改善しようとしています。
現在、権限のないユーザーは、データベース・ナビゲーション・ツリーで「その他のユーザー」アイコンを展開することにより、SQL Developerで他のすべてのユーザーのリストを表示できます。
権限を制限して、権限が付与されているかどうかに関係なく、すべてのユーザーではなく、オブジェクトに対する権限を付与した (他の) ユーザーのみがユーザーに表示されるようにするにはどうすればよいですか。
ありがとう。
私は管理の初心者であり、Oracle データベースのセキュリティを改善しようとしています。
現在、権限のないユーザーは、データベース・ナビゲーション・ツリーで「その他のユーザー」アイコンを展開することにより、SQL Developerで他のすべてのユーザーのリストを表示できます。
権限を制限して、権限が付与されているかどうかに関係なく、すべてのユーザーではなく、オブジェクトに対する権限を付与した (他の) ユーザーのみがユーザーに表示されるようにするにはどうすればよいですか。
ありがとう。
おそらくできません(少なくとも合理的ではありません)。SQL Developer などのツールは、クエリを実行ALL_USERSしてユーザーのリストを取得し、データベース内のすべてのユーザーを、ログインできるすべてのユーザーに表示します。A がユーザー B の存在を知ることは、本当にセキュリティ上のリスクですか? AがBについて他に何も見えない場合は?
ALL_USERS強くお勧めしませんが、特権のないユーザーのスキーマにビューを作成する (または別のスキーマにビューのプライベート シノニムを作成する) ことで、同じ構造をALL_USERS持つがデータが少ないビューを回避できる場合があります。 . SYS.ALL_USERSほとんどのツールは、データ ディクショナリ テーブルの名前だけではなく名前を修飾しないためALL_USERS、このトリックは通常有効です。ただし、かなりのリスクがあります。必然的に、一部のインストール スクリプトがデータ ディクショナリが「通常」であることを期待している場合、予期しない欠点があり、最終的に誰かがデータ ディクショナリ テーブル名を完全に修飾するツールを使用するなどです。
おそらくSQL Developerがテーブル(または覚えていないビュー)をクエリしますall_users。したがって、この付与を (sysdba として) 取り消す必要があります。
revoke select on ALL_USERS from PUBLIC;
また、選択を許可するユーザーにこれを付与します。
編集:
@Justin Caveの回答に同意します。これにはリスクがあり、また、彼は良い質問をもたらします。
A がユーザー B について他に何も見ることができない場合に、A がユーザー B が存在することを知ることは本当にセキュリティ上のリスクでしょうか?