|
Программирование >> Oracle
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
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
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
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |