Klient ma potrzebę tabeli z ponad 150 pól, klient potrzebuje, aby tylko niektóre pola były widoczne przez osoby firmy skanującej, co można łatwo zrealizować za pomocą widoku, klient również prosi, te pola firma może modyfikować tylko poszczególne pola, naprawdę nigdy wcześniej nie spotkałem się z taką potrzebą kontroli uprawnień na poziomie kolumn, przeprowadziłem eksperyment, czuję się bardzo interesująco, nagrałem to
Klient ma takiPopyt, tabeli z ponad 150 polami, klient poprosił, by pokazać tylko część pól osobom skanującym firmę, coPopytMożna to łatwo zaimplementować za pomocą widoku, a klient prosi, aby te pola – firma skanująca może modyfikować tylko poszczególne pola, naprawdę nigdy wcześniej nie spotkałem się z taką potrzebą kontroli uprawnień na poziomie kolumn, przeprowadziłem eksperyment, czuję się bardzo interesująco, nagraj toTestProces. 1. Stwórz tabelę testową i wstaw dane testowe punktowe: SQL> Create table test (id number,table_name varchar2(50), właściciel varchar2(50),TABLESPACE_NAME varchar2(50)); Tabela utworzona. SQL> wstaw do testu wybierz rownum,table_name,owner, TABLESPACE_NAME z dba_tables; Utworzono 5490 wierszy. SQL> commit; Zobowiązanie zakończone. 2. Utworzenie użytkownika testowego i nadanie podstawowych uprawnień: SQL> CONN / AS SYSDBA Połączony. SQL> tworzenie strumienia użytkownika identyfikowanego przez domyślnych użytkowników przestrzeni tabelowej strumienia; Stworzony przez użytkownika. SQL> grant connect, resource to stream; Grant odniósł sukces. 3. Przyznaj użytkownikom testowym uprawnienia na poziomie kolumny: SQL> conn auth/auth Połączony. SQL> aktualizacja (id) na test to stream; Grant odniósł sukces. SQL> przyznaj insert (table_name) na test to stream; Grant odniósł sukces. SQL> SQL> wybiór podczas testu do streamowania; Grant odniósł sukces. 4. Pytaj o informacje o ustawieniach uprawnień na poziomie kolumn: SQL> wybierz BENEFICJENTA, WŁAŚCICIELA, TABLE_NAME, COLUMN_NAME, GRANTOR, PRZYWILEJ, PRZYZNAWANA od user_col_privs; WŁAŚCICIEL GRANTORA TABLE_NAME COLUMN_NAME PRZYWILEJ GRANTORA GRA ------- ----- ---------- ----------- ------- --------- --- TEST UWIERZYTELNIANIA STRUMIENIOWEGO TABLE_NAME WSTAW NUMER UWIERZYTELNIANIA AUT AUT TEST TEST ID AUTH WSTAW NR AUT TEST AUTH TEST ID AKTUALIZACJA AUTORYZACJI NR STREAM AUTH TEST ID AKTUALIZACJA AUTYZACJI 5. Użytkownik testu logowania weryfikuje uprawnienia SELECT: SQL> conn stream/stream Połączony. SQL> wybierz * from(wybierz * z auth.test order przez 1) gdzie rownum< =10; ID TABLE_NAME WŁAŚCICIEL STOŁU ---------- -------------------- ---------- ---------- 1 ICOL$ SYS SYSTEM 2 IND$ SYSTEM SYS 3 COL$ SYSTEM SYS SYSTEM 4 CLU$ SYS SYSTEM 5 TAB$ SYS 6 LOB$ SYSTEM SYS 7 COLTYPE$ SYSTEM SYS 8 SYSTEM SYS SUBCOLTYPE$ 9 NTAB$ SYSTEM SYS 10 REFCON$ SYSTEM SYS Wybrano 10 wierszy. 6. Weryfikacja kontroli uprawnień UPDATE na poziomie kolumnowym: SQL> aktualizacja auth.test set owner='STREAM', gdzie id =1; aktualizacja auth.test set owner='STREAM', gdzie id =1 * BŁĄD na linii 1: ORA-01031: insufficient privileges Widać, że wartość pola OWNER tabeli testowej nie może być modyfikowana, raport ORA-01031: Niewystarczające uprawnienia, ponieważ powyższe daje użytkownikowi testowemu uprawnienia do modyfikacji pola ID tabeli testowej, możliwe jest zmodyfikowanie pola ID. SQL> aktualizacja auth.test set id=10 gdzie id=1; Zaktualizowano 1 wiersz. SQL> rollback; Cofanie zakończone. 7. Weryfikacja kontroli uprawnień INSERT na poziomie kolumny: SQL> wstaw do auth.test values (1,'stream','stream', 'stream', 'users'); Wprowadź do auth.test wartości (1,'stream', 'stream', 'users') * BŁĄD na linii 1: ORA-01031: insufficient privileges Ponieważ powyższe daje użytkownikowi testowemu uprawnienia do modyfikacji pola TABLE_NAME w tabeli testowej, możliwe jest wstawienie TABLE_NAME pola, ale tylko wtedy, gdy pozostałe pola nie mają ŻADNYCH ograniczeń. SQL> wstaw do auth.test(table_name) wartości ("stream"), Utworzono 1 wiersz. SQL> rollback; Cofanie zakończone.
|