Всички команди трябва да се изпълняват, докато са свързани към правилния клъстер на базата данни. Уверете се в това.
Ролите са обекти на клъстер на базата данни . Всички бази данни от един и същ клъстер споделят набора от дефинирани роли. Привилегиите се предоставят/отменят за база данни/схема/таблица и т.н.
Ролята се нуждае от достъп до базата данни , очевидно. Това е предоставено на PUBLIC
по подразбиране. Друго:
GRANT CONNECT ON DATABASE my_db TO my_user;
Основни привилегии за Postgres 14 или по-нова версия
Postgres 14 добавя предварително дефинирани роли без влизане pg_read_all_data
/ pg_write_all_data
.
Те имат SELECT
/ INSERT
, UPDATE
, DELETE
привилегии за всички таблици, изгледи и последователности. Плюс USAGE
на схеми. Можем да GRANT
членство в тези роли:
GRANT pg_read_all_data TO my_user;
GRANT pg_write_all_data TO my_user;
Това обхваща всички основни DML команди (но не DDL, а не някои специални команди като TRUNCATE
или EXECUTE
привилегия за функции!). Ръководството:
pg_read_all_data
Прочетете всички данни (таблици, изгледи, последователности), сякаш имате
SELECT
права върху тези обекти иUSAGE
права върху всички схеми, дори и без това изрично. Тази роля няма атрибута на ролятаBYPASSRLS
комплект. Ако се използва RLS, администраторът може да пожелае да зададеBYPASSRLS
за ролите, които тази роля еGRANT
изд. до.
pg_write_all_data
Напишете всички данни (таблици, изгледи, последователности), сякаш имате
INSERT
,UPDATE
иDELETE
права върху тези обекти иUSAGE
права върху всички схеми, дори без да го има изрично. Тази роля няма атрибута на ролятаBYPASSRLS
комплект. Ако се използва RLS, администраторът може да пожелае да зададеBYPASSRLS
за ролите, които тази роля еGRANT
изд. до.
Всички привилегии без използване на предварително дефинирани роли (всяка версия на Postgres)
Командите трябва да се изпълняват, докато са свързани с правилната база данни. Уверете се в това.
Ролята се нуждае (поне) от USAGE
привилегия върху схемата . Отново, ако това е предоставено на PUBLIC
, покрити сте. Друго:
GRANT USAGE ON SCHEMA public TO my_user;
Или предоставете USAGE
на всички персонализирани схеми:
DO
$$
BEGIN
-- RAISE NOTICE '%', ( -- use instead of EXECUTE to see generated commands
EXECUTE (
SELECT string_agg(format('GRANT USAGE ON SCHEMA %I TO my_user', nspname), '; ')
FROM pg_namespace
WHERE nspname <> 'information_schema' -- exclude information schema and ...
AND nspname NOT LIKE 'pg\_%' -- ... system schemas
);
END
$$;
След това всички разрешения за всички таблици (изисква Postgres 9.0 или по-късно).
И не забравяйте последователностите (ако има):
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO my_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO my_user;
Като алтернатива можете да използвате "Grant Wizard" на pgAdmin 4, за да работите с GUI.
Има някои други обекти, ръководството за GRANT
има пълния списък. От Postgres 12:
привилегии върху обект на база данни (таблица, колона, изглед, чужда таблица, последователност, база данни, обвивка на чужди данни, чужд сървър, функция, процедура, процедурен език, схема или пространство за таблици)
Но останалото рядко е необходимо. Повече подробности:
- Как да управлявам ПРАВИЛЕГИИТЕ ПО ПОДРАЗБИРАНЕ за ПОТРЕБИТЕЛИ на БАЗА ДАННИ спрямо SCHEMA?
- Дайте привилегии за конкретна база данни в PostgreSQL
- Как да предоставим всички привилегии за изгледи на произволен потребител
Помислете за надграждане до текуща версия.