2016-11-23 3 views
1

ユーザー「dbaUserA」の下に作成されたビューがあります。ビュー照会は、別のユーザー「dbaUserB」の表を使用します。どちらのユーザーもdbaです。Oracle:別のスキーマにテーブルをリンクしている別のスキーマのビューを照会することはできません

ビュー名:

Select trx_no,trx_date,order_item 
from trx_table a left outer join dbaUserB.cancelled_trx b on a.trx_no=b.trx_no 
where b.trx_no is null; 

のクエリでv_valid_trx 私はあまり特権ユーザー "よびUserC" を作成しましたが、

dbaUserA.trx_table 
dbaUserB.cancelled_trx. 
dbaUserA.v_valid_trx 

に対するSELECT権限で私が直接trx_table選択することができますこれらの異なるスキーマからcancelled_trxしかし、私はビューで選択することはできませんv_valid_trx。権限が不足 01031. 00000 - "権限が不足" *原因:

Oracleは

ORA-01031を促し試みが適切な権限なしに、現在のユーザー名やパスワード を変更しようとしました。また、このエラーは、 のシステム権限を必要とせずにデータベースをインストールしようとした場合にも発生します。 Trusted OracleがDBMS MACで構成されている場合、ユーザーに現在のログインより上位のラベル で必要な権限が付与されている場合、このエラーが発生することがあります( )。 *処置:データベース管理者に操作を依頼するか、 に必要な権限を付与してください。 Trusted Oracleユーザーに、 の上位ラベルに適切な権限が付与されていても、このエラーが発生する場合は、データベース の管理者に、適切なラベルで権限を再委任するよう依頼してください。 1行目のエラー:1列目:21

これまで何時間も苦労していました。私はベーステーブルを自由に選択することができるときに、エラーの原因を理解できないようです。

助けてください:)あなたが最初よびUserCが実際にビューdbaUserB.v_valid_trxに対するselect権限を持っていることを確認するかもしれないもの

+1

私は、dbaUserBが 'grantオプション付きでdbauseraにcanceled_trxで選択を許可する '必要があると思いますが、これは完全なテストケースなしでは少しの推測です。 dbaUserBは照会する権限をdbaUserAに与えましたが、誰とも共有することはできません。 –

+0

また、ベース・テーブルへのコマンドライン・アクセスは、ビュー内のベース・テーブルには使用されないロール(DBAなど)を介して行われる場合があります。 –

+0

私はいつもsysdbaとしてコンソールにあったビューの許可をしました。私は、ベーステーブルのselectをdbauserAにgrantオプションで再付与しました。正しい推測のためにWilliamに多く感謝します。 :)オラクル特権がそのように機能することは知らなかった。 – yonas

答えて

0

ユーザAがテーブルの権限をユーザBに許可すると、ビューを経由しても他の人にそのデータを公開するB権限が与えられません。これを可能にするには、拡張許可構文WITH GRANT OPTIONを使用する必要があります。

たとえば、USER_Aはテーブルを作成し、USER_BにSELECTを与えます。(私は>はユーザー名を反映するよう求められ、そのSQLを作った各コマンドを実行している人、それを明確にする)

USER_A> create table cancelled_trx(dummy varchar2(1)); 

USER_A> grant select on cancelled_trx to USER_B; 

USER_Cへに助成金を渡すためにUser_Bへのアクセス許可を与えていないこと:

USER_B> grant select on USER_A.cancelled_trx to USER_C; 
           * 
ERROR at line 1: 
ORA-01031: insufficient privileges 

エラーメッセージは、ビューに対してより特異的である:

USER_B> create or replace view test_view as select * from USER_A.cancelled_trx; 

View created. 

USER_B> grant select on test_view to USER_C 
         * 
ERROR at line 1: 
ORA-01720: grant option does not exist for 'USER_A.CANCELLED_TRX' 

これを可能にするために、所有者(USER_A)は

しなければなりません3210
USER_A> grant select on cancelled_trx to USER_B with grant option; 

あなたの質問によって提起されたもう一つの点は、役割の範囲です。役割に付与された助成金は、見解や決定者権限の手続きには適用されません。したがって、USER_Aがcanceled_trxをROLE_Xに選択し、USER_BがROLE_Xを選択した場合、USER_Bはcanceled_trxを照会できますが、ビューまたはストアド・プロシージャでは使用しません。

0

権限はSYSTABLEPERMSに保存されていると思います。

私は、grant文​​が無意味であっても、権限を適用するときにエラーになることのない少なくとも1つの他のRDBMSについて知っています。

また、私は基本表のuserCにselect権限を与える必要があるとは思っていませんが、それはビューの目的ではありませんか?

あなたがどのように乗っているかをお知らせください。

+0

これはOracleのため、 'DBA | ALL | USER_TAB_PRIVS%'ビューであり、userCは権限を付与する必要があります。 –