2016-05-28 11 views
0

Table Emp besteht aus 10 Spalten.Wie überschreiben * um nicht alle Spalten zu erhalten, just 3, mit Rollen? Zum Beispiel AbfrageWie überschreiben Sie * in Oracle SQL mithilfe von Rollen?

SELECT * FROM EMP 

gibt nur 3 Spalten für Benutzer zurück.

+0

gibt es keine Möglichkeit, die Anzahl der Spalten zu beschränken zurückgegeben auf Rollen basieren. Sie können stattdessen Ansichten verwenden. – dnoeth

+0

Sie könnten vielleicht [die Spaltenwerte mit VPD maskieren] (https://docs.oracle.com/cd/E11882_01/network.112/e36292/vpd.htm#i1014682), aber das ist nicht ganz das, was Sie wollen. Die Verwendung von '*' ist sowieso keine gute Methode, aber wenn Sie möchten, dass Benutzer aus Datenschutzgründen nicht in der Lage sind, einige Daten zu sehen, wenn sie sie verwenden, ist VPD möglicherweise Teil der Lösung. –

Antwort

2

Nur INSERT-, UPDATE- und REFERENCES-Privilegien können auf Spaltenebene erteilt werden. Stattdessen können Sie View wie unten gezeigt erstellen.

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

Und der Benutzer someone können die Ansicht zugreifen wie:

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

Was ist hr bedeutet? –

+0

'hr' ist ein Benutzer, der die Tabelle' emp' besitzt. :) – JSapkota

+1

@ I.James - hr ist ein "Benutzer", der standardmäßig in jeder Oracle-Installation erstellt wird. Es ist für Lernzwecke da, und die Leute können es verwenden und in Diskussionen wie diesem auf Beispiele verweisen. – mathguy