0

PUBLICロールのすべての特権を持つ新しいロールを作成し、その後、PUBLICロールからすべての特権を削除しようとしました。これはセキュリティ上の目的です。

これが問題です。SYS./1005bd30_LnkdConstantや、同じ形式の他のユーザーに新しい役割を付与できませんでした。

サンプル:

SYS./10076b23_OraCustomDatumClosurSYS./100c1606_StandardMidiFileReadORDSYS./1013c29d_PlanarImageServerPro。。。

私は本当にこれらが必要ですか、それとも私の新しい「パブリック」ロールはそれらなしで実行できますか?

どんな助けでも大歓迎です。

4

1 に答える 1

0

ここで簡単に推測させてください。問題は、オブジェクト名で大文字と小文字が区別されることです。簡単な修正は、このようにオブジェクト名を二重引用符で囲むことです。

GRANT EXECUTE ON SYS."/1005bd30_LnkdConstant" TO mynewpublicrole;

ロールに「[EXECUTEON]SYS./1005bd30_LnkdConstantを付与できなかった」ことを示します。
これは、GRANTステートメントを実行したときに、Oracleが例外を発生させたことを意味します。

  ORA-00903: invalid table name

オブジェクト名を二重引用符で囲むと(例に示すように)、その問題が解決するはずです。

新しい役割にこれらのオブジェクトに対するEXECUTE特権が必要かどうかという質問に答えることはできません。まあ、役割は必ずしもそれらを必要としません。問題は、ユーザーがそれらを必要としているかどうか(直接付与されているか、ロールを介して間接的に付与されているか)です。これは、徹底的なテストによって判断できます。


他のいくつかのコメント。

新しい役割を作成し、その役割をすべてのユーザーに付与することを意図している場合、セキュリティが変更または改善されているとは思いません。ですから、そうではないと思います。

「最小特権」の原則を適用しようとしているように見えます。その努力に拍手を送ります。

アプリケーション開発者が従う最も一般的なパターンの1つは、スキーマオブジェクトの所有者としてアプリケーションをデータベースに接続させることです。つまり、アプリケーションには、DROP TABLE、ALTER PROCEDUREなど、おそらく必要のないあらゆる種類の特権があります。

使用するパターンは、スキーマオブジェクトを所有する「OWNER」ユーザーと、「OWNER」オブジェクトに対して必要な特定の権限を持つ別の「APP」ユーザー、および「OWNER」オブジェクトの同義語を使用することです。(同義語を使用すると、OWNER.objectをOWNERで修飾せずに参照できます。)言うまでもなく、PUBLICには特権を付与せず、必要に応じてロールに付与します。

これは、「最小特権」の原則を実装するために使用するパターンであるためです。


その他のセキュリティ上の懸念については、「Oracleセキュリティチェックリスト」ホワイトペーパーを確認することをお勧めします。

http://www.oracle.com/technology/deploy/security/database-security/pdf/twp_security_checklist_database.pdf


GRANTステートメントの実行時に発生した可能性のあるその他の例外:

  ORA-01031: insufficient privileges

また

  ORA-04042: procedure, function, package, or package body does not exist.

いずれの場合も、必ずSYS(SYSDBA)としてデータベースに接続し、特権を付与してください。ほとんどの場合、GRANTEEとして他のユーザーを使用するのではなく、オブジェクトの所有者として特権を付与します。オブジェクト特権で「WITHGRANTOPTION」を使用することはほとんどありません。これはより単純なモデルであり、依存関係ツリーに関する潜在的な問題を回避します。

于 2009-05-27T16:58:52.163 に答える