Kunden har et behov, en tabel med mere end 150 felter, kunden kræver kun nogle felter, som folk i scanningsfirmaet kan se, dette krav kan nemt realiseres med en visning, kunden anmoder også om disse felter, scanningsfirmaet kan kun ændre individuelle felter, jeg har virkelig ikke oplevet et sådant behov for tilladelseskontrol på kolonneniveau før, jeg lavede et eksperiment, jeg synes det er meget interessant, registrer det
Kunden har enEfterspørgsel, en tabel med mere end 150 felter, kunden bad kun om at vise nogle af felterne til de personer, der scannede virksomheden, detteEfterspørgselDet kan nemt implementeres med en visning, og kunden beder om disse felter, scanningsfirmaet kan kun ændre individuelle felter, jeg har virkelig ikke oplevet et sådant behov for tilladelseskontrol på kolonneniveau før, jeg lavede et eksperiment, jeg føler mig meget interessant, optag detTestproces. 1. Opret en testtabel og indsæt punkttestdata: SQL> oprette tabeltest(id-nummer,table_name varchar2(50), ejer Varchar2(50)TABLESPACE_NAME Varchar2(50)); Tabel oprettet. SQL> indsæt i testen vælg rownum,table_name,owner, TABLESPACE_NAME fra dba_tables; 5490 rækker oprettet. SQL> commit; Forpligtelse fuldført. 2. Opret en testbruger og giv grundlæggende tilladelser: SQL> CONN / AS SYSDBA Forbundet. SQL> oprette brugerstrøm identificeret ved strøms standard tabelpladsbrugere; Brugeroprettet. SQL> tildel, forbind, ressource til stream; Grant lykkedes. 3. Giv testbrugere kolonneniveau-tilladelser: SQL> conn auth/auth Forbundet. SQL> give opdatering (id) på test til stream; Grant lykkedes. SQL> give indsæt (table_name) på test to stream; Grant lykkedes. SQL> SQL> grant select on test to stream; Grant lykkedes. 4. Forespørg information om tilladelsesindstillinger på kolonneniveau: SQL> vælg GRANTEE, EJER, TABLE_NAME, COLUMN_NAME, GRANTOR, PRIVILEGE, UDDELES FRA user_col_privs; BEVILLINGSHAVER TABLE_NAME COLUMN_NAME GRANTOR PRIVILEGE GRA ------- ----- ---------- ----------- ------- --------- --- STREAM AUTH-TEST TABLE_NAME AUTH-INDSÆT NEJ AUT AUTH, TEST-ID, AUTENTIFICERING, INDSÆT NEJ AUT AUTH, TEST-ID, AUTENTIFICERINGSOPDATERING NEJ STREAM AUTENTIFICERING TEST-ID AUTENTIFICERING OPDATERING NEJ 5. Logintestbruger verificerer SELECT-tilladelse: SQL> conn stream/stream Forbundet. SQL> vælg * fra (vælg * fra auth.test-orden med 1) hvor rownum< =10; ID TABLE_NAME EJER 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 rækker valgt. 6. Verificér kolonneniveau UPDATE-tilladelseskontrol: SQL> update auth.test set owner='STREAM' hvor id =1; update auth.test set owner='STREAM' hvor id =1 * FEJL på linje 1: ORA-01031: insufficient privileges Det kan ses, at værdien af OWNER-feltet i testtabellen ikke må ændres, rapport ORA-01031: Utilstrækkelig tilladelse, da ovenstående giver testbrugeren tilladelse til at ændre ID-feltet i testtabellen, er det muligt at ændre ID-feltet. SQL> update auth.test set id=10 hvor id=1; 1 række opdateret. SQL> rollback; Tilbagerulning fuldført. 7. Verificér kolonneniveau INSERT tilladelseskontrol: SQL> indsæt værdier i auth.test(1,'stream','stream','users'); indsæt i auth.test values(1,'stream','stream','users') * FEJL på linje 1: ORA-01031: insufficient privileges Da ovenstående giver testbrugeren indsættelsestilladelse til at ændre det TABLE_NAME felt i testtabellen, er det muligt at indsætte TABLE_NAME felt, men kun hvis de andre felter ikke har IKKE NOGLE begrænsninger. SQL> indsæt i auth.test(table_name)-værdier ('stream'); 1 række oprettet. SQL> rollback; Tilbagerulning fuldført.
|