Обложка канала

Oracle Developer👨🏻‍💻

Все о разработке в СУБД "Oracle" SQL, PL/SQL, оптимизация, архитектура, сертификации и многое другое.

Oracle Developer👨🏻‍💻

3 года назад
Открыть в
Система прав и привилегий 🔐 Да, она отличается от Oracle. Как минимум бросается в глаза выдача грантов на объекты. Рассмотрим на простом примере. 1️⃣ Создадим функцию, которая использует внутри себя таблицу my_tab (пару постов назад мы её создавали и наполняли).
create or replace function get_note(p_id my_tab.id%type)
returns my_tab.note %type as $$
  select note from my_tab t where t.id = p_id;
$$ language sql;

2️⃣ Создадим еще одного юзера в нашей БД
create user mydb_app password 'apppass';

3️⃣ Попробуем выполнить функцию под новым пользователем
select my_schema.getNote(1);

ERROR: permission denied for schema my_schema LINE 1: select my_schema.getNote(1); Упс… не хватает прав на использование схемы my_schema 🤷🏻‍♂️ 4️⃣ Дадим грант на схему
grant usage on schema my_schema to mydb_app;

Вызовем функцию, получим следующую ошибку: ERROR: permission denied for table my_tab CONTEXT: SQL function "getnote" statement 1 5️⃣ Дадим грант на таблицу
grant select on my_tab to mydb_app;

Выполним и получим результат: mydb=> select my_schema.getNote(1); getnote --------- text 1 (1 row) Ура! Все работает 👍 Получилось немного витиевато. В Oracle: 🔹не требуется выдавать отдельно грант на использование схемы; 🔹нужно выдать грант на execute функции; 🔹не нужны гранты на каждый объект, который используется внутри функции (за некоторыми исключениями). Если окунуться в документацию, то можно обнаружить множество отличий в системе прав от Oracle. Продолжение следует 🎓 #postgresql Oracle Developer