Der Kunde hat einen Bedarf an einer Tabelle mit mehr als 150 Feldern, der Kunde benötigt nur einige Felder, die von den Leuten der Scanfirma gesehen werden, diese Anforderung lässt sich leicht mit einer Ansicht erfüllen, der Kunde fordert auch diese Felder an, die Scanfirma kann nur einzelne Felder modifizieren, ich habe wirklich noch nie einen solchen Bedarf an Berechtigungskontrolle auf Spaltenebene erlebt, ich habe ein Experiment durchgeführt, ich finde es sehr interessant, ich schreibe es auf
Der Kunde hat eineNachfrage, eine Tabelle mit mehr als 150 Feldern, bat der Kunde, nur einige der Felder den Personen zu zeigen, die das Unternehmen gescannt hatten, diesNachfrageEs lässt sich leicht mit einer Ansicht implementieren, und der Kunde verlangt, dass diese Felder verlangt werden, das Scanfirma kann nur einzelne Felder modifizieren. Ich habe wirklich noch nie einen solchen Bedarf an Berechtigungskontrolle auf Spaltenebene erlebt, ich habe ein Experiment gemacht, ich finde es sehr interessant, ich nehme es auf.TestProzess. 1. Erstellen Sie eine Testtabelle und fügen Sie Punkttestdaten ein: SQL> Tabellentest erstellen (ID-Nummer, table_name varchar2(50), Eigentümer Varchar2(50)TABLESPACE_NAME Varchar2(50)); Tabelle erstellt. SQL> in Test auswählen, rownum,table_name,owner, TABLESPACE_NAME aus dba_tables; 5490 Reihen erstellt. SQL> Commit; Commitment abgeschlossen. 2. Erstellen Sie einen Testbenutzer und geben Sie grundlegende Berechtigungen: SQL> CONN / AS SYSDBA Verbunden. SQL> Erstellen des Benutzerstroms, der durch die Standard-Tabellenbenutzer des Stroms identifiziert wird; Vom Nutzer erstellt. SQL> verbinden, Ressource zum Stream; Grant hatte Erfolg. 3. Erteile Testnutzern Berechtigungen auf Spaltenebene: SQL> conn auth/auth Verbunden. SQL> Grant Update (id) auf Test to Stream; Grant hatte Erfolg. SQL> Insert (table_name) beim Test zum Stream; Grant hatte Erfolg. SQL> SQL> Grant Select beim Test zum Streamen; Grant hatte Erfolg. 4. Abfrage von Berechtigungseinstellungen auf Spaltenebene: SQL> select GRANTEE,OWNER,TABLE_NAME,COLUMN_NAME,GRANTOR,PRIVILEGE, VON user_col_privs VERLIEHEN; INHABER TABLE_NAME COLUMN_NAME GRANTOR PRIVILEGE GRA ------- ----- ---------- ----------- ------- --------- --- STREAM AUTH TEST TABLE_NAME AUTH INSERT NO AUT AUTH TEST ID AUTH INSERT NO AUT AUTH TEST-ID AUTH UPDATE NO STREAM-AUTHENTIFIZIERUNG TEST-ID AUTHENTIFIZIERUNGSUPDATE NEIN 5. Login-Test-Nutzer überprüft die SELECT-Berechtigung: SQL> conn stream/stream Verbunden. SQL> wählen * aus (auswählen * aus auth.test-Reihenfolge mit 1), wobei rownum< =10; ID TABLE_NAME BESITZER TABLESPACE ---------- -------------------- ---------- ---------- 1 ICOL$ SYS-SYSTEM 2 IND$ SYS SYSTEM 3 COL$ SYS-SYSTEM 4 CLU$ SYS-SYSTEM 5 TAB$ SYS-SYSTEM 6 LOB$ SYS-SYSTEM 7 COLTYPE$ SYS-SYSTEM 8 SUBCOLTYPE$ SYS-SYSTEM 9 NTAB$ SYS-SYSTEM 10 REFCON$ SYS SYSTEM 10 Reihen ausgewählt. 6. Überprüfung der UPDATE-Berechtigungskontrolle auf Spaltenebene: SQL> update auth.test set owner='STREAM', wobei id =1; update auth.test set owner='STREAM', wo id =1 * FEHLER in Zeile 1: ORA-01031: insufficient privileges Es ist zu erkennen, dass der Wert des OWNER-Feldes der Testtabelle nicht geändert werden darf, Bericht ORA-01031: Unzureichende Berechtigung, da das oben Genannte dem Testbenutzer die Berechtigung gibt, das ID-Feld der Testtabelle zu verändern, ist es möglich, das ID-Feld zu ändern. SQL> update auth.test set id=10, wobei id=1 ist; Eine Reihe aktualisiert. SQL> Rollback; Rollback abgeschlossen. 7. Überprüfen Sie die Berechtigungskontrolle auf Spaltenebene: SQL> in auth.test-Werte einfügen (1,'stream', 'stream', 'users'); Fügen Sie in auth.test die Werte ein(1,'stream','stream','users') ein) * FEHLER in Zeile 1: ORA-01031: insufficient privileges Da das oben Genannte dem Testbenutzer die Einfügungsberechtigung gibt, das TABLE_NAME Feld der Testtabelle zu ändern, ist es möglich, TABLE_NAME Feld einzufügen, aber nur, wenn die anderen Felder NICHT EINIGE Einschränkungen besitzen. SQL> in auth.test(table_name)-Werte einfügen ('stream'); 1 Reihe erstellt. SQL> Rollback; Rollback abgeschlossen.
|