Программирование >>  Oracle 

1 ... 345 346 347 [ 348 ] 349 350 351 ... 469


1464

Глава 21

adams@TKYTE816> exec tkyte.hr app.updateSal 0 строк(и) изменено

PL/SQL procedure successfully completed. adams@TKYTE816> exec tkyte.hr app.deleteAll 0 строк(и) удалено

PL/SQL procedure successfully completed.

Наконец, проверим возможность выполнения оператора INSERT. B данном случае сервер выдаст сообщение об ошибке. В нашем примере для операторов UPDATE и DELETE ничего подобного не случилось. Попытки выполнить UPDATE или DELETE завершились успешно, потому что пользователю просто не дали данных, которые можно было бы изменить или удалить. При попытке вставки, однако, строка создается, нарушает правила зашиты, и удаляется. В этом случае сервер выдает сообщение об ошибке:

adams@TKYTE816> exec tkyte.hr app.insertNew(20);

BEGIN tkyte.hr app.insertNew(2 0); END;

ERROR at line 1:

ORA-28115 : policy with check option violation ORA-06512: at TKYTE.HR APP , line 36

ORA-06512: at line 1

Итак, мы убедились, что пользователь может просматривать только собственную запись. Попытки изменять данные любым способом, удалять и вставлять строки завершаются неудачно. Именно это и предполагалось, и обеспечивается автоматически. Приложение, пакет HR APP, не содержит кода, обеспечивающего реализацию этих правил. Все они автоматически реализуются сервером, с момента начала и до завершения сеанса, независимо от того, какая среда или инструментальное средство использовано для подключения.

Теперь зарегистрируемся в качестве руководителя и посмотрим, что получится. Для начала снова получим значения атрибутов контекста, а затем - список сотрудников, записи которых доступны:

adams@TKYTE816> ©connect jones/jones jones@TKYTE816>set serveroutput on jones@TKYTE816>select * from session context; NAMESPAGE ATTRIBUTE VALUE

HR APP GTX ROLENAME MGR HR APP GTX USERNAME JONES

HR APP GTX EMPNO 7566

jones@TKYTE816> exec tkyte.hr app.listEmps ename sal dname mgr dno

SMITH 800 RESEARGH 7902 20

JONES 2,975 RESEARGH 7839 20

SGOTT 9 , 999 RESEARGH 7566 20



Тщательный контроль доступа 1465

ADAMS 1,100 RESEARCH 7788 20

FORD 3,000 RESEARCH 7566 20

5строк(и) выбрано

PL/SQL procedure successfully completed.

Как видите, на этот раз мы получили из представления ЕМР несколько записей. Получена: записи для всех сотрудников отдела 20 (пользователь JONES является его руководителем, в соответствии с информацией в представлении ЕМР). Теперь выполним процедуру изменения (updateSal) и проверим, какие изменения сделаны:

jones@TKYTE816> exec tkyte.hrapp.updateSal 2 rows updated

PL/SQL procedure successfully completed. jones@TKYTE816> exec tkyte.hrapp.listEmps

ename

sal dname

SMITH

800 RESEARCH

7902

JONES

2,975 RESEARCH

7839

SCOTT

9,999 RESEARCH

7566

1,100 RESEARCH

7788

FORD

9,999 RESEARCH

7566

5 строк(и) выбрано

Предполагалось, что изменять можно только записи непосредственных подчиненных. Изменение затронуло только две записи для непосредственных подчиненных пользователя JONES. Теперь попытаемся выполнить удаление и вставку. Поскольку пользователь получил роль MGR, а не HR REP, мы не сможем удалять записи, а при выполнении оператора INSERT будет получено сообщение об ошибке:

jones@TKYTE816> exec tkyte.hr app.deleteAll 0 строк(и) удалено

PL/SQL procedure successfully completed.

jones@TKYTE816> exec tkyte.hr app.insertNew(20) BEGIN tkyte.hr app.insertNew(20); END;

ERROR at line 1:

ORA-2 8115 : policy with check option violation ORA-06512: at TKYTE.HR APP , line 44 ORA-06512: at line 1

Итак, руководитель может следующее.

Просматривать не только свои собственные данные. Руководитель получает информацию обо всех своих подчиненных.

Изменять данные. В частности, можно изменять только записи для непосредственных подчиненных, что и требовалось.

Как и требовалось, ничего удалять и вставлять руководитель не может.

Теперь зарегистрируемся в качестве ответственного за кадры (пользователь с ролью HR REP) и проверим, что позволяет сделать приложение от имени этой роли. Снова



1466

Глава 21

начнем с в]дачи информации о контексте приложения и списка доступных для чтения строк. На этот раз выдается вся таблица ЕМР, поскольку пользователь KING доступ к информации по всем трем отделам:

jones@TKYTE816> connect king/king

king@TKYTE816> select * from session context;

NAMESPAGE ATTRIBUTE VALUE

HR APP GTX ROLENAME HR REP HR APP GTX USERNAME KING HR APP GTX EMPNO 7839

king@TKYTE816> exec tkyte.hr app.listEmps

ename

dname mgr

GLARK

2,450

AGGOUNTING

7839

KING

5,000

AGGOUNTING

MILLER

1,300

AGGOUNTING

7782

SMITH

RESEARGH

7902

JONES

2,975

RESEARGH

7839

SGOTT

9 999

RESEARGH

7566

ADAMS

1,100

RESEARGH

7788

FORD

9 999

RESEARGH

7566

ALLEN

1,600

SALES

7698

HARD

1,250

SALES

7698

MARTIN

1,250

SALES

7698

BLAKE

2,850

SALES

7839

TURNER

1,500

SALES

7698

JAMES

SALES

7698

14 строк(и) выбрано

PL/SQL procedure successfully completed.

Теперь выполним изменение и посмотрим, какие данные можно изменить. В данном случае изменены все строки:

king@TKYTE816> exec tkyte.hr app.updateSal 14 строк(и) изменено

PL/SQL procedure successfully completed. king@TKYTE816> exec tkyte.hr app.listEmps

ename

dname mgr

GLARK

9,999

AGGOUNTING

7839

KING

9 999

AGGOUNTING

MILLER

9,999

AGGOUNTING

7782

SMITH

9,999

RESEARGH

7902

JONES

9 999

RESEARGH

7839

SGOTT

9,999

RESEARGH

7566

ADAMS

9 999

RESEARGH

7788

FORD

9,999

RESEARGH

7566

ALLEN

9,999

SALES

7698

WARD

9,999

SALES

7698

MARTIN

9,999

SALES

7698

BLAKE

9 999

SALES

7839



1 ... 345 346 347 [ 348 ] 349 350 351 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика