De klant heeft een behoefte, een tabel met meer dan 150 velden, de klant wil dat slechts enkele velden zichtbaar zijn voor de mensen van het scanbedrijf, deze eis kan eenvoudig worden gerealiseerd met een weergave, de klant vraagt ook om deze velden, het scanbedrijf kan alleen individuele velden aanpassen, ik heb zo'n behoefte aan permissiecontrole op kolomniveau nog nooit eerder ervaren, ik heb een experiment gedaan, ik vind het erg interessant, registreer het
De klant heeft er eenVraag, een tabel met meer dan 150 velden, vroeg de klant om slechts enkele velden te tonen aan de mensen die het bedrijf scanden, ditVraagHet kan eenvoudig worden geïmplementeerd met een view, en de klant vraagt om deze velden, het scanbedrijf kan alleen individuele velden wijzigen, ik heb nog nooit zo'n behoefte aan permissiecontrole op kolomniveau ervaren, ik heb een experiment gedaan, ik vind het erg interessant, registreer hetTestproces. 1. Maak een testtabel en voeg punttestgegevens in: SQL> maak tabel test( id-nummer, table_name varchar2(50), eigenaar Varchar2(50),TABLESPACE_NAME Varchar2(50)); Tabel aangemaakt. SQL> in test invoegen selecteren rownum,table_name,owner, TABLESPACE_NAME van dba_tables; 5490 rijen aangemaakt. SQL> commit; Commit voltooid. 2. Maak een testgebruiker aan en geef basisrechten: SQL> CONN / AS SYSDBA Verbonden. SQL> een gebruikersstroom die wordt geïdentificeerd door de standaard tabelruimtegebruikers van de stroom; Gebruiker aangemaakt. SQL> connect grant en resource to stream; Grant slaagde. 3. Verleen van kolomniveau-rechten aan gebruikers van testgebruikers: SQL> conn auth/auth Verbonden. SQL> grant update (id) bij test om te streamen; Grant slaagde. SQL> invoegen (table_name) bij test om te streamen; Grant slaagde. SQL> SQL> grant select on test om te streamen; Grant slaagde. 4. Vraag naar kolomniveau-permissie-instellingen: SQL> selecteer GRANTTEE, OWNER,TABLE_NAME,COLUMN_NAME,GRANTOR,PRIVILEGE, TOEWIJZING VANUIT user_col_privs; HOUDER TABLE_NAME COLUMN_NAME SCHENKER PRIVILEGE GRA ------- ----- ---------- ----------- ------- --------- --- STREAM-AUTHENTICATIETEST TABLE_NAME AUTHENTICATIE-INSERT NEE AUT AUTH TEST ID AUTH INSERT NO AUT AUTHENTICATIE TEST-ID AUTHENTICATIE UPDATE NEE STREAM AUTH TEST-ID AUTHENTICATIE UPDATE NEE 5. Inlogtestgebruiker verifieert SELECT-toestemming: SQL> conn stream/stream Verbonden. SQL> selecteer * uit (selecteer * uit authentic.test-volgorde met 1) waarbij rownum< =10; ID TABLE_NAME EIGENAAR TABLESPACE ---------- -------------------- ---------- ---------- 1 ICOL$ SYS SYSTEEM 2 IND$ SYS-SYSTEEM 3 COL$ SYS-SYSTEEM 4 CLU$ SYS-SYSTEEM 5 TAB$ SYS-SYSTEEM 6 LOB$ SYS-SYSTEEM 7 COLTYPE$ SYS-SYSTEEM 8 SUBCOLTYPE$ SYS-SYSTEEM 9 NTAB$ SYS-SYSTEEM 10 REFCON$ SYS-SYSTEEM 10 rijen geselecteerd. 6. Verifieer kolomniveau UPDATE-permissiecontrole: SQL> update auth.test set owner='STREAM' waarbij id =1; update auth.test set owner='STREAM' waarbij id =1 * FOUT op regel 1: ORA-01031: insufficient privileges Hieruit blijkt dat de waarde van het OWNER-veld van de testtabel niet mag worden gewijzigd, rapporteer ORA-01031: Onvoldoende toestemming, aangezien bovenstaande de testgebruiker toestemming geeft om het ID-veld van de testtabel te wijzigen, is het mogelijk het ID-veld aan te passen. SQL> update auth.test set id=10 waarbij id=1; 1 rij bijgewerkt. SQL> rollback; Terugrol voltooid. 7. Verifieer kolomniveau INSERT-toestemmingscontrole: SQL> invoegen in auth.test-waarden (1,'stream','stream','users'); Insert in auth.test values(1,'stream','stream','users') * FOUT op regel 1: ORA-01031: insufficient privileges Aangezien bovenstaande de testgebruiker de invoegrechten geeft om het TABLE_NAME veld van de testtabel te wijzigen, is het mogelijk om TABLE_NAME veld in te voegen, maar alleen als de andere velden GEEN BEPAALDE beperkingen hebben. SQL> invoegen in auth.test(table_name)-waarden ('stream'); 1 rij aangemaakt. SQL> rollback; Terugrol voltooid.
|