Il cliente ha un bisogno, una tabella con più di 150 campi, il cliente richiede solo alcuni campi che siano visti dalle persone dell'azienda di scansione, questo requisito può essere facilmente realizzato con una visualizzazione, anche il cliente richiede questi campi, l'azienda di scansione può modificare solo singoli campi, non ho mai incontrato una tale necessità di controllo dei permessi a livello di colonna prima, ho fatto un esperimento, mi sento molto interessante, registralo
Il cliente ne ha unoDomanda, una tabella con più di 150 campi, il cliente ha chiesto di mostrare solo alcuni campi alle persone che hanno scansionato l'azienda, questoDomandaPuò essere facilmente implementato con una visualizzazione, e il cliente richiede che questi campi, l'azienda di scansione possa modificare solo singoli campi, non avevo mai incontrato una tale necessità di controllo dei permessi a livello di colonna prima, ho fatto un esperimento, mi sento molto interessante, registraloTestprocesso. 1. Creare una tabella di test e inserire dati di test puntuale: SQL> creare table test( id number,table_name varchar2(50), proprietario Varchar2(50), TABLESPACE_NAME Varchar2(50)); Tavolo creato. SQL> inserisci in test seleziona rownum, table_name, proprietario, TABLESPACE_NAME da dba_tables; 5490 righe create. SQL> commit; Commit completato. 2. Crea un utente di prova e fornisci permessi di base: SQL> CONN / AS SYSDBA Connesso. SQL> creare flussi utente identificati dagli utenti predefiniti dello spazio tabellario del flusso; Creato dall'utente. SQL> concedere connettersi, risorsa a stream; Grant ci riuscì. 3. Concedere permessi a livello di colonna agli utenti di test: SQL> autenticazione/autenticazione conn Connesso. SQL> concede aggiornamento (id) dal test allo stream; Grant ci riuscì. SQL> concedere insert (table_name) dal test allo stream; Grant ci riuscì. SQL> SQL> concedere la selezione al test per lo streaming; Grant ci riuscì. 4. Informazioni di impostazione dei permessi a livello di colonna per interrogazione: SQL> seleziona GRANTEE, PROPRIETARIO,TABLE_NAME,COLUMN_NAME,CONCEDENTE,PRIVILEGIO, CONCESSO da user_col_privs; PROPRIETARIO GENEROSO TABLE_NAME COLUMN_NAME PRIVILEGIO DEL CONCEDENTE GRA ------- ----- ---------- ----------- ------- --------- --- TEST DI AUTENTICAZIONE IN FLUSSO TABLE_NAME INSERIMENTO AUTENTICAZIONE NO AUT AUTH TEST ID AUTH INSERT NO AUTENTICAZIONE AUT, ID AUTENTICAZIONE, AGGIORNAMENTO AUTENTICAZIONE: NO STREAM AUTENTICAZIONE ID AUTENTICAZIONE AGGIORNAMENTO AUTENTICAZIONE NO 5. L'utente del test di accesso verifica il permesso SELECT: SQL> stream/flusso conn Connesso. SQL> selezionare * da(seleziona * dall'ordine auth.test di 1) dove rownum< =10; ID TABLE_NAME PROPRIETARIO DELLO SPAZIO DELLA TABELLA ---------- -------------------- ---------- ---------- 1 SISTEMA SYS ICOL$ SISTEMA SYS 2 IND$ 3 SISTEMA SYS COL$ 4 CLU$ SISTEMA SYS SISTEMA SYS 5 TAB$ 6 SISTEMA SYS LOB$ 7 SISTEMA SYS COLTYPE$ 8 SISTEMA SYS: SUBCOLTYPE$ 9 NTAB$ SISTEMA SYS 10 SISTEMA SYS REFCON$ 10 righe selezionate. 6. Verifica controllo dei permessi UPDATE a livello di colonna: SQL> update auth.test set owner='STREAM' dove id =1; update auth.test set owner='STREAM' dove id = 1 * ERRORE alla riga 1: ORA-01031: insufficient privileges Si può vedere che il valore del campo OWNER della tabella di test non può essere modificato, report ORA-01031: Permesso insufficiente, poiché quanto sopra dà all'utente di test il permesso di modificare il campo ID della tabella di test, è possibile modificare il campo ID. SQL> update auth.test set id=10 dove id=1; 1 riga aggiornata. Rollback SQL>; Rollback completato. 7. Verifica controllo dei permessi INSERT a livello di colonna: SQL> inserire nei valori del test auth(1, 'stream', 'stream', 'users'); inserire in auth.test valori (1,'stream', 'stream', 'users') * ERRORE alla riga 1: ORA-01031: insufficient privileges Poiché quanto sopra dà all'utente di test il permesso di inserimento per modificare il campo TABLE_NAME della tabella di test, è possibile inserire TABLE_NAME campo, ma solo se gli altri campi non hanno NON ALCUNI vincoli. SQL> inserire valori in auth.test(table_name) ('stream'); 1 riga creata. Rollback SQL>; Rollback completato.
|