У клієнта є потреба, таблиця з понад 150 полів, клієнту потрібні лише деякі поля, щоб їх бачили працівники скануючої компанії, цю вимогу легко реалізувати за допомогою перегляду, клієнт також запитує, ці поля компанія може змінювати лише окремі поля, я раніше не стикався з такою потребою в контролі дозволу на рівні стовпців, я провів експеримент, мені дуже цікаво, запишіть це
У клієнта є одинПопит, на столі з понад 150 полями, клієнт попросив показати лише деякі поля тим, хто сканував компанію, цеПопитЦе легко реалізувати за допомогою view, і клієнт просить, щоб ці поля могли змінювати лише окремі поля, я раніше не стикався з такою потребою в контролі дозволу на рівні стовпців, я провів експеримент, мені дуже цікаво, запишіть цеТестпроцес. 1. Створіть тестову таблицю та вставте точкові тестові дані: SQL> створити тест таблиці (ідентифікаційний номер,table_name varchar2(50), власник Варчар2(50),TABLESPACE_NAME Варчар2(50)); Таблиця створена. SQL> вставити у вибір тесту rownum,table_name,owner, TABLESPACE_NAME з dba_tables; Створено 5490 рядків. SQL> комміт; Комміт завершено. 2. Створіть тестового користувача та надайте базові дозволи: SQL> CONN / ЯК SYSDBA Пов'язано. SQL> створювати користувацький потік, ідентифікований за замовчуваними користувачами tablespace потоку; Створено користувачем. SQL> Grant Connect, ресурс до потоку; Грант досяг успіху. 3. Надайте користувачам права на рівні стовпців: SQL> CONN автентифікація/автентифікація Пов'язано. SQL> оновлення гранту (id) при тестуванні в поток; Грант досяг успіху. SQL> вставка гранту (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 ВСТАВИТИ АВТОРІЗАЦІЙНИЙ ТЕСТ NO AUT AUTH TEST ID AUTH INSERT NO AUT AUTH TEST ID АВТЕНТИФІКАЦІЯ ОНОВЛЕННЯ NO ТРАНСЛЯЦІЯ AUTH TEST ID AUTH UPDATE AUTH NO 5. Користувач тесту входу перевіряє дозвіл SELECT: SQL> конн потік/потік Пов'язано. SQL> вибрати * з(вибрати * з auth.test order by 1), де rownum< =10; ID TABLE_NAME TABLE OWNER ---------- -------------------- ---------- ---------- 1 СИСТЕМНА СИСТЕМА ICOL$ 2 IND$ SYS СИСТЕМИ 3 СИСТЕМНА СИСТЕМА COL$ 4 СИСТЕМНА СИСТЕМА CLU$ 5 TAB$ SYS СИСТЕМА 6 LOB$ СИСТЕМНА СИСТЕМА 7 СИСТЕМНА СИСТЕМА COLTYPE$ 8 СИСТЕМНА СИСТЕМА SUBCOLTYPE$ 9 NTAB$ СИСТЕМНА СИСТЕМА 10 СИСТЕМНА СИСТЕМА REFCON$ Вибрано 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; Оновлено один рядок. 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> відкат; Відкат завершено.
|