2016-05-28 11 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特權。相反,您可以創建視圖,如下所示。

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