47 lines
2.5 KiB
SQL
47 lines
2.5 KiB
SQL
SET ROLE dbo;
|
|
DROP SCHEMA IF EXISTS vmreports CASCADE;
|
|
CREATE SCHEMA IF NOT EXISTS vmreports AUTHORIZATION dbo;
|
|
|
|
--GRANT ALL ON SCHEMA vmreports TO postgres;
|
|
BEGIN
|
|
GRANT USAGE ON SCHEMA vmreports TO appserver;
|
|
ALTER DEFAULT PRIVILEGES FOR ROLE dbo IN SCHEMA vmreports GRANT SELECT ON TABLES TO appserver;
|
|
ALTER DEFAULT PRIVILEGES FOR ROLE dbo IN SCHEMA vmreports GRANT USAGE ON SEQUENCES TO appserver;
|
|
EXCEPTION END;
|
|
|
|
BEGIN
|
|
GRANT USAGE ON SCHEMA vmreports TO nifi,analytics,analyst;
|
|
ALTER DEFAULT PRIVILEGES FOR ROLE dbo IN SCHEMA vmreports GRANT SELECT ON TABLES TO nifi,analytics,analyst;
|
|
ALTER DEFAULT PRIVILEGES FOR ROLE dbo IN SCHEMA vmreports GRANT USAGE ON SEQUENCES TO nifi,analytics,analyst;
|
|
EXCEPTION WHEN others THEN END;
|
|
/*
|
|
конструкция осложняется тем, что
|
|
нужен один пользователь-владелец и второй читатель
|
|
Это вызывает множество телодвижений при создании.
|
|
Необходимость указывать пароль при локальном коннекте не очень радует
|
|
(ведь пользователь локальный, прописан на этом же сервере)
|
|
*/
|
|
|
|
--DROP FOREIGN TABLE IF EXISTS host;
|
|
--CREATE FOREIGN TABLE vmreports.host () SERVER billing OPTIONS (schema_name 'vmreports', table_name 'host'); -- вместо этого лучше импортировать схему
|
|
DROP SERVER IF EXISTS billing CASCADE;
|
|
CREATE SERVER billing
|
|
FOREIGN DATA WRAPPER postgres_fdw
|
|
OPTIONS (host 'localhost', port '5432', dbname 'billing');
|
|
-- для импорта схемы мы создаем маппинг владельцу
|
|
DROP USER MAPPING IF EXISTS FOR dbo SERVER billing;
|
|
CREATE USER MAPPING FOR dbo SERVER billing OPTIONS (user 'appserver', password '***');
|
|
|
|
IMPORT FOREIGN SCHEMA vmreports FROM SERVER billing INTO vmreports;
|
|
GRANT SELECT ON vmreports.host to appserver;
|
|
DROP USER MAPPING IF EXISTS FOR dbo SERVER billing; -- мы импортировали схему, маппинг больше не нужен.
|
|
-- Но нам все равно пришлось указать пароль дважды
|
|
|
|
|
|
DROP USER MAPPING IF EXISTS FOR appserver SERVER billing;
|
|
CREATE USER MAPPING FOR appserver SERVER billing OPTIONS (user 'appserver', password '***');
|
|
--проверка
|
|
--set role appserver; select * from vmreports.host;
|
|
|
|
-- это если интересно, не разрешен ли локальный коннект
|
|
--SELECT * FROM pg_hba_file_rules; |