PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Има ли начин да деактивирате актуализациите/изтриванията, но все пак да позволите на тригери да ги изпълняват?

Да, това е възможно.

Тригерите се изпълняват с привилегиите на функцията за задействане, като по подразбиране е SECURITY INVOKER което означава, че функцията за задействане се изпълнява ефективно с привилегиите на current_user , във вашия случай този, който вмъква редове.

Ако текущият потребител няма необходимите привилегии за таблиците, с които работи вашата функция за задействане, първоначалната ви операция в основната таблица ще изпадне в грешка.

Въпреки това , можете да използвате SECURITY DEFINER за функцията за задействане да изпълнява тази функция с привилегиите на OWNER на функцията.

Ако имате собствен суперпотребител функцията за задействане, може да направи всичко - което би било възможна опасност за сигурността. Обърнете внимание на инструкциите в ръководството за писане на SECURITY DEFINER Функционира безопасно.

Но е по-разумно да направите обикновена роля само с необходимите привилегии OWNER на функцията за задействане. Можете дори просто да създадете роля "демон" без влизане, действаща като пакет с привилегии за такива операции. След това ще предоставите само необходимите привилегии (върху схеми, таблици, последователности ...) на тази роля на демон. За по-сложни дизайни трябва да обедините привилегиите в „групови роли“ (отново без вход) и да предоставите тези групови роли на ролите, които се нуждаят от това (на ролята на демон в този пример), като ефективно ги правите „членове на групата“. Правя го много.

Помислете за този свързан отговор на dba.SE относно привилегиите на самата функция:

  • Какви са привилегиите, необходими за изпълнение на функция за задействане в PostgreSQL 8.4?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. psycopg2.OperationalError:ФАТАЛНО:неподдържан интерфейсен протокол 1234.5679:сървърът поддържа от 2.0 до 3.0

  2. GROUP BY в клауза UPDATE FROM

  3. Големите обекти не могат да се използват в режим на автоматично записване

  4. Балансирането на натоварването в PostgreSQL в облака става лесно

  5. Глави в облака в CHAR(10)