Намерихте стенограмата за задаване на привилегии за всички съществуващи таблици в дадена схема. Ръководството пояснява:
(но имайте предвид, че
ALL TABLES
счита се, че включва прегледи ичужди масии ).
Удебелен акцент мой. serial
колоните се изпълняват с nextval()
на последователност като колона по подразбиране и, цитирайки ръководството:
За последователности тази привилегия позволява използването на
currval
иnextval
функции.
Така че, ако има serial
колони, ще искате също да предоставите USAGE
(или ALL PRIVILEGES
) напоследователности
GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;
Забележка:колоните за идентичност в Postgres 10 или по-нова версия използват имплицитни последователности, които не изискват допълнителни привилегии. (Помислете за надграждане на serial
колони.)
Какво ще кажете за ново обекти?
Ще се интересувате и от DEFAULT PRIVILEGES
за потребители или схеми:
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT USAGE ON SEQUENCES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo REVOKE ...;
Това автоматично задава привилегии за обекти, създадени в бъдеще, но не и за вече съществуващи обекти.
Привилегиите по подразбиране са само прилага се към обекти, създадени от целевия потребител (FOR ROLE my_creating_role
). Ако тази клауза е пропусната, по подразбиране текущият потребител изпълнява ALTER DEFAULT PRIVILEGES
. За да бъда изричен:
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo GRANT ...;
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo REVOKE ...;
Имайте предвид също, че всички версии на pgAdmin III имат тънка грешка и дисплей привилегии по подразбиране в SQL панела, дори ако не се прилагат към текущата роля. Не забравяйте да коригирате FOR ROLE
клауза ръчно при копиране на SQL скрипта.