21
Практика
1. Создайте две роли (пароль должен совпадать с именем):
– employee — сотрудник магазина,
– buyer — покупатель.
Убедитесь, что созданные роли могут подключиться к БД.
2. Отзовите у роли public права выполнения всех функций
и подключения к БД.
3. Разграничьте доступ таким образом, чтобы:
– сотрудник мог только заказывать книги, а также
– добавлять авторов и книги,
– покупатель мог только приобретать книги.
Проверьте выполненные настройки в приложении.
1. Сотрудник — внутренний пользователь приложения, аутентификация
выполняется на уровне СУБД.
Покупатель — внешний пользователь. В реальном интернет-магазине
управление такими пользователями ложится на приложение, а все
запросы поступают в СУБД от одной «обобщенной» роли (buyer).
Идентификатор конкретного покупателя может передаваться как
параметр (но в нашем приложении мы этого не делаем).
3. Вообще говоря, разграничение доступа должно быть заложено,
в том числе, в приложение. В нашем учебном приложении
разграничение не сделано специально: вместо этого на веб-странице
можно явно выбрать роль, от имени которой пойдет запрос в СУБД.
Это позволяет посмотреть, как поведет себя серверная часть при
некорректной работе приложения.
Итак, пользователям нужно выдать:
●
Право подключения к БД bookstore и доступ к схеме bookstore.
●
Доступ к представлениям, к которым происходит непосредственное
обращение.
●
Доступ к функциям, которые вызываются как часть API. Если
оставить функции SECURITY INVOKER, придется выдавать доступ
и ко всем «нижележащим» объектам (таблицам, другим функциям).
Однако удобнее просто объявить API-функции как SECURITY
DEFINER.
Разумеется, ролям нужно выдать привилегии только на те объекты,
доступ к которым у них должен быть.