2012-01-12 16 views
3

セキュリティ強化のため、Oracleデータベース・ユーザーからすべてのシステム権限を削除します。今、このユーザーはONLY次のシステム権限を持っていますOracleセキュリティ - ユーザーがDROP TABLEから独自の表を保護する方法

  • はSESSION
  • UNLIMITED TABLESPACE

のCREATE私は、ユーザーが文句を言わない任意のDDLコマンドを行うことができることを期待していました。しかし私の驚いたことに、ユーザーは独自のスキーマを作成することはできませんが、独自のスキーマでDROP TABLEを実行できます。

Oracle documentationは、DROP TABLEの前提条件は「自分のスキーマ内にあるか、またはDROP ANY TABLEシステム権限が必要です」と述べています。それだけ!!!私はOracleのセキュリティロジックを理解していませんが、ユーザーが自分のテーブルを削除するのを防ぐ方法はありますか?

代わりに、別のユーザーを作成してアプリケーションを実行し、オブジェクトアクセスを許可することもできます。これは、潜在的な問題があるので避けたいと思います。

+2

あなたは無制限のタブレットがユーザーを許可するのに良いことではないことに気付きますか?これは、アプリケーションによって使用されるべきではないSYSTEMやSYSAUXなどの表領域を含むすべての表領域に対して権限を付与するためです。物事をロックダウンする場合は、指定された表スペース*のクォータをユーザーに明示的に付与する必要があります。 – APC

+0

あなたの提案をありがとうAPC。はい、UNLIMITED TABLESPACEは本番システムで使用するのに最適な特権ではありません。しかし、すべてのdbユーザーにはRESOURCEロールが付与されています(これは、Oracleが無制限のTABLESPACEをあなたに伝えることなく静かに付与します)。今私は一時的な目的のためにこの特権を与える必要があるリソースの役割を削除しました。しかし後で助成枠の割り当てをさらに進めます。 – Tyn

答えて

11

ユーザは、自分が所有するオブジェクトを削除する権限を常に持ちます。特権を取り消すことでそれを防ぐことはできません。

セキュリティを強化することを考えているので、新しいユーザーを作成し、データを操作するために必要な権限をそのユーザーに付与することが正解です。プロダクションデータベースにアプリケーションオブジェクトを所有するユーザーとしてログインする必要があるのは、DBAだけで、スキーマの変更を展開するプロセスにいるときだけです。他の人は、スキーマ所有者以外のユーザーとしてデータベースにログインする必要があります。

言い換えれば、適切な解決策があなたが今実施しようとしているよりも多くの仕事をしている場合、オブジェクトに対してDROPが発行された場合、例外をスローするDDLトリガーをデータベースに作成することです指定されたスキーマ内のこれは、適切な解決策よりも安全性が低いです。トリガを実装するときに何かが恋しくなるかもしれませんが、あなたや他の人がトリガを落としたり無効にしたりして、再度有効にすることを忘れてしまいます。さまざまなセキュリティ関連のデータ・ディクショナリ・ビューで明白になるため、監査人にとって問題が発生する可能性があります。

+4

+1基本的に、スキーマ所有者は本番データベースに接続できません。 – APC

+1

現在スキーマ名を指定していないSQLクエリがたくさんある場合は、必要な古いスキーマ内のすべてのオブジェクトの新しいユーザーの同義語を作成することで、これを事実上苦にならないようにすることができます。そうすれば、クエリを変更する必要はありません。 – ivanatpr

+0

@invantprを使用しない限り、同義語のロードを作成および維持するという面倒を考慮します。 – Ben

関連する問題