Клиентът има нужда, таблица с над 150 полета, клиентът изисква само някои полета, които да бъдат видяни от хората на сканиращата компания, това изискване може лесно да се реализира с изглед, клиентът също заявява, тези полета, сканиращата компания може да променя само отделни полета, наистина не съм срещал такава нужда от контрол на разрешения на ниво колони досега, направих експеримент, чувствам се много интересен, запиши го
Клиентът има такъвТърсене, маса с повече от 150 полета, клиентът поиска да покаже само някои от полетата на хората, които сканираха компанията, товаТърсенеМоже лесно да се реализира с изглед, а клиентът иска тези полета, компанията за сканиране може да променя само отделни полета, наистина не съм срещал такава нужда от контрол на разрешения на ниво колони досега, направих експеримент, чувствам се много интересен, запиши гоТестпроцес. 1. Създайте тестова таблица и вмъкнете точки от тестови данни: SQL> създам тест на таблица (ID номер,table_name varchar2(50), собственик Varchar2(50),TABLESPACE_NAME Varchar2(50)); Таблицата е създадена. SQL> вмъкни в тест избор rownum,table_name,owner, TABLESPACE_NAME от dba_tables; Създадени са 5490 реда. SQL> commit; Коммитът е завършен. 2. Създайте тестов потребител и дайте основни права: SQL> CONN / AS SYSDBA Свързани. SQL> създава потребителски поток, идентифициран от потребителите по подразбиране на таблицното пространство на потока; Създадено от потребителя. SQL> grant connect, ресурс към поток; Грант успя. 3. Дайте на тестовите потребители права на ниво колони: SQL> Conn auth/auth Свързани. SQL> актуализация на гранта (id) при тест към поток; Грант успя. SQL> grant insert (table_name) при тест за стрийм; Грант успя. SQL> SQL> избор на грант при тест за стрийминг; Грант успя. 4. Запитване на информация за задаване на разрешения на ниво колона: SQL> изберете GRANTEE, OWNER,TABLE_NAME,COLUMN_NAME,GRANTOR,PRIVILEGE, GRANTABLE от user_col_privs; ПРИТЕЖАТЕЛЯТ TABLE_NAME COLUMN_NAME ПРИВИЛЕГИЯ НА ГРАНТОПОЛУЧАТЕЛЯ GRA ------- ----- ---------- ----------- ------- --------- --- СТРИЙМ АУТЕНТИЧНИЯ ТЕСТ TABLE_NAME АВТОРИЗАЦИЯ ВМЪКНЕТЕ НЕ AUT AUTH TEST ID AUTH INSERT NO AUT AUTH TEST ID AUTH UPDATE NO СТРИЙМ АУТЕНТИКАЦИЯ ТЕСТ ID АВТЕНТИКАЦИЯ АКТУАЛИЗАЦИЯ NO 5. Потребителят за тест за вход проверява SELECT разрешение: SQL> конн поток/поток Свързани. SQL> select * from(select * от auth.test order by 1), където rownum< =10; ID TABLE_NAME СОБСТВЕНИК ПРОСТРАНСТВО ---------- -------------------- ---------- ---------- 1 ICOL$ СИСТЕМНА СИСТЕМА 2 IND$ SYS СИСТЕМА 3 COL$ SYS СИСТЕМА 4 CLU$ СИСТЕМНА СИСТЕМА 5 TAB$ СИСТЕМНА СИСТЕМА 6 LOB$ SYS СИСТЕМА 7 COLTYPE$ SYS СИСТЕМА 8 SUBCOLTYPE$ SYS СИСТЕМА 9 NTAB$ СИСТЕМА 10 REFCON$ SYS СИСТЕМА Избрани са 10 реда. 6. Проверете контрола на разрешения за UPDATE на ниво колона: SQL> обнови auth.test set owner='STREAM', където id =1; актуализирай auth.test set owner='STREAM', където id =1 * ГРЕШКА на ред 1: ORA-01031: insufficient privileges Вижда се, че стойността на полето OWNER в тестовата таблица не може да се променя, докладвайте ORA-01031: Недостатъчно разрешение, тъй като горното дава на тестовия потребител разрешение да променя ID полето на тестовата таблица, възможно е да се модифицира полето ID. SQL> обнови auth.test set id=10, където id=1; 1 ред е обновен. SQL> връщане назад; Връщането назад е завършено. 7. Проверете контрола за разрешение на INSERT на ниво колона: SQL> вмъкнете в auth.test стойностите (1,'stream','stream','users'); Вмъкнете в стойностите на auth.test (1,'stream','stream','users') * ГРЕШКА на ред 1: ORA-01031: insufficient privileges Тъй като горното дава на тестовия потребител разрешение за вмъкване да модифицира TABLE_NAME полето на тестовата таблица, е възможно да се вмъкне TABLE_NAME поле, но само ако другите полета нямат НЕ НЯКОИ ограничения. SQL> вмъкнете в auth.test(table_name) стойности ("поток"); Създаден е 1 ред. SQL> връщане назад; Връщането назад е завършено.
|