0

Oracle では、MYTABLE所有者はUSER1であり、権限を に割り当てUSER2ます。しかし、C# コードでは、USER2まだテーブルにアクセスできません。

所有者であるを使用USER1して C# コードでこのテーブルをクエリすると、次のように表示されました。

クエリを実行できません

GRANTEE                      OWNER               TABLE_NAME       GRANTOR              PRIVILEGE                              GRANTABLE HIERARCHY 
------------------------------ ------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --------- --------- 
USER2                       USER1                MYTABLE         USER1                DELETE                                   NO        NO        
USER2                       USER1                MYTABLE         USER1                SELECT                                   NO        NO        
USER2                       USER1                MYTABLE         USER1                UPDATE                                   NO        NO        
4

1 に答える 1

1

User2 がテーブルをクエリしようとしたときのエラーは何ですか? User2 が発行している正確なクエリは何ですか?

最も一般的な問題は、User2 がテーブル名をスキーマ名で修飾していないことです。デフォルトでは、User2 は次のようなことをする必要があります。

SELECT *
  FROM User1.MyTable

テーブル名を修飾したくない場合は、User1 の MyTable の User2 のスキーマにシノニムを作成することができます。

CREATE SYNONYM myTable
   FOR User1.MyTable

または、パブリック シノニムを作成することもできます (パブリック シノニムはすべてのユーザーに表示されますが、権限には影響しません)。

CREATE PUBLIC SYNONYM myTable
   FOR User1.MyTable

current_schemaまたは、接続後にセッションに設定できます

ALTER SESSION SET current_schema = User1

これらのいずれかを行うと、User2 はクエリを実行できます。

SELECT *
  FROM MyTable

MyTable決心していUser2.MyTableます。プライベート シノニムはフットプリントが最も小さく、User2 と のみに適用されますMyTable。パブリック シノニムとは、特権を付与された人なら誰でもUser1.MyTable、テーブル名をスキーマ名で修飾しなくてもクエリできることを意味します。を変更するcurrent_schemaと、そのセッションの将来のすべての修飾されていないオブジェクト参照はUser1、現在のユーザーのスキーマではなくスキーマで解決されます。

于 2012-05-23T21:35:44.397 に答える