2016-05-28 16 views
0

Table Empは10個の列で構成されています。すべての列を取得するために*をオーバーライドするには、just 3、役割を使用しますか?たとえば、クエリロールを使用してOracle SQLで*をオーバーライドする方法は?

SELECT * FROM EMP 

は、ユーザーに対して3列しか返しません。

+0

。代わりにビューを使用することができます。 – dnoeth

+0

「VPDを使用して列値をマスクする」(https://docs.oracle.com/cd/E11882_01/network.112/e36292/vpd.htm#i1014682)こともできますが、それはあなたが望むものではありません。とにかく '*'を使うのは良いことではありませんが、プライバシー上の理由からユーザーがデータを見ることができないようにするには、VPDがソリューションの一部になるかもしれません。 –

答えて

2

列レベルでは、INSERT、UPDATEおよびREFERENCES権限のみを付与できます。代わりに、以下のようにViewを作成することができます。

SQL> create view temp as select col1,col2,col3 from emp; 
SQL> grant select on temp to someone; 

としてユーザーsomeoneがビューにアクセスすることができます。役割に基づいて返される列の数を制限する方法はありません

SQL> conn someone/***** 
SQL> select * from hr.temp; 
+0

hrとは何ですか? –

+0

'hr'は' emp'テーブルを所有するユーザです。 :) – JSapkota

+1

@ I.James - hrは、Oracleのすべてのインストールでデフォルトで作成される「ユーザー」です。学習目的のためにそこにあり、人々はそれを使用してこのような議論の例についてそれを参照することができます。 – mathguy

関連する問題