Kunden har ett behov, en tabell med mer än 150 fält, kunden kräver bara att vissa fält ska kunna ses av personalen på det skannande företaget, detta krav kan enkelt uppfyllas med en vy, kunden begär också, dessa fält, skanningsföretaget kan bara ändra enskilda fält, jag har verkligen aldrig stött på ett sådant behov av behörighetskontroll på kolumnnivå tidigare, jag gjorde ett experiment, jag tycker det är väldigt intressant, spela in det
Kunden har enEfterfrågan, en tabell med mer än 150 fält, bad kunden att endast visa några av fälten för de som skannade företaget, dettaEfterfråganDet kan enkelt implementeras med en vy, och kunden begär att dessa fält ska vara så att skanningsföretaget bara kan ändra enskilda fält, jag har verkligen inte stött på ett sådant behov av behörighetskontroll på kolumnnivå tidigare, jag gjorde ett experiment, jag tycker det är väldigt intressant, spela in detTestprocessen. 1. Skapa en testtabell och infoga punkttestdata: SQL> skapa tabelltest( id-nummer, table_name varchar2(50), ägare varchar2(50)TABLESPACE_NAME varchar2(50)); Tabell skapad. SQL> infoga i testet, välj rownum,table_name,owner, TABLESPACE_NAME från dba_tables; 5490 rader skapade. SQL> commit; Commit slutförd. 2. Skapa en testanvändare och ge grundläggande behörigheter: SQL> CONN / AS SYSDBA Kopplade. SQL> skapa användarström identifierad av ströms standardtabellrymdsanvändare; Användaren skapad. SQL> koppla och använda resurser till ström; Grant lyckades. 3. Ge testanvändare kolumnnivåbehörigheter: SQL> conn auth/auth Kopplade. SQL> grant update (id) på test för stream; Grant lyckades. SQL> beviljade insättning (table_name) på test för ström; Grant lyckades. SQL> SQL> grant select på test för strömning; Grant lyckades. 4. Sök på kolumnnivåns behörighetsinställning: SQL> välj GRANTEE,OWNER,TABLE_NAME,COLUMN_NAME,GRANTOR,PRIVILEGE, BIDRAGSBAR FRÅN user_col_privs; GRANTER ÄGARE TABLE_NAME COLUMN_NAME GRANTOR PRIVILEGE GRA ------- ----- ---------- ----------- ------- --------- --- STRÖMAUTENTISERINGSTEST TABLE_NAME AUTENTISERINGSINFOGA NEJ AUT AUTH TEST ID AUTH INSERT NO AUT AUTH TEST ID AUTH UPPDATERING NEJ STRÖMAUTENTISERING TEST-ID AUTENTISERING UPPDATERING NEJ 5. Inloggningstestanvändaren verifierar SELECT-behörighet: SQL> conn stream/stream Kopplade. SQL> välj * från(välj * från auth.test-ordningen med 1) där rownum< = 10; ID TABLE_NAME ÄGARE TABELLUTRYMME ---------- -------------------- ---------- ---------- 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-SYSTEMET 8 SUBCOLTYPE$ SYS-SYSTEM 9 NTAB$ SYS-SYSTEM 10 REFCON$ SYS-SYSTEM 10 rader valda. 6. Verifiera kolumnnivåns UPDATE-behörighetskontroll: SQL> update auth.test set owner='STREAM' där id =1; update auth.test set owner='STREAM' där id =1 * FEL på rad 1: ORA-01031: insufficient privileges Det kan ses att värdet i OWNER-fältet i testtabellen inte får ändras, rapportera ORA-01031: Otillräcklig behörighet, eftersom ovanstående ger testanvändaren behörighet att ändra ID-fältet i testtabellen, är det möjligt att ändra ID-fältet. SQL> update auth.test set id=10 där id=1; 1 rad uppdaterad. SQL> rollback; Återställning klar. 7. Verifiera kolumnnivåns INSERT-behörighetskontroll: SQL> infoga i auth.test-värden (1,'stream', 'stream','users'); infoga i auth.test values(1,'stream','stream','users') * FEL på rad 1: ORA-01031: insufficient privileges Eftersom ovanstående ger testanvändaren insättningsbehörighet att ändra det TABLE_NAME fältet i testtabellen, är det möjligt att infoga TABLE_NAME fält, men endast om de andra fälten inte har INTE VISSA begränsningar. SQL> infoga i auth.test(table_name)-värden ("stream"); 1 rad skapad. SQL> rollback; Återställning klar.
|