СЛУШАТЬ / УВЕДОМИТЬ привилегии

9

У меня есть одна база данных postgres с двумя пользователями; Алиса и Боб.

Я хотел бы быть в состоянии обойтись NOTIFY alice_channel 'sensitive data'без Боба, способного подкрадываться, LISTENпросто предполагая, что название канала - «alice_channel».

На практике названия каналов являются очень трудно угадать, но это безопасность через неизвестность , в лучшем случае .

Правильно ли я считаю, что нет способа предотвратить использование (злоупотребление) пользователем базы данных LISTEN& NOTIFY? то есть не существует никаких связанных привилегий, которые могут быть предоставлены или отозваны.

Это тупик?

Крис Фармилое
источник
Я не знаю, как исключить пользователей из прослушивания. Но если вы выберете название для канала, как если бы вы выбрали безопасный пароль, разве это не сработает?
Эрвин Брандштеттер
Да, это то, что я делаю в данный момент (используя большие случайные строки), но это выглядит грязно и довольно ограниченно. Есть некоторые довольно классные вещи, с которыми я мог бы сделать LISTEN/ NOTIFYесли бы я мог немного их заблокировать. В его нынешнем виде это довольно укоренившееся «напишите клиенту, чтобы он повторно опросил все данные, которые вам могут« понадобиться ».
Крис Фармилоэ
Я просто хотел знать, изменились ли вещи с тех пор, как на них ответили. Вы смогли что-то реализовать?
Фил Паффорд
Если вы не можете доверять своим приложениям, вы не должны впускать их. Я думаю, что это тупик в производственной системе. Там было предложение, хотя для связанных привилегий. postgresql.org/message-id/51CC98FB.9040700%40agliodbs.com
Anssi

Ответы:

4

Нет разрешений на LISTENи NOTIFY. Не было бы смысла иметь их до тех пор, пока в более поздних версиях не будет включена поддержка уведомлений.

Если вам нужен контроль доступа, создайте таблицу с нужной вам информацией, а затем отправьте NOTIFYпустую или не содержащую ничего, кроме первичного ключа для этой таблицы. SELECTинтересующие строки из таблицы, которые могут иметь контроль доступа, для получения конфиденциальных данных. Раньше это был единственный способ использовать LISTENи NOTIFYотправлять определенные данные до того, как были добавлены полезные данные.

Крейг Рингер
источник
Спасибо, Крейг, я так и думал. Я мог бы взглянуть на источник и посмотреть, как трудно будет его реализовать, но я предполагаю, что для этого потребуется совершенно новый уровень базы данных AclModeи pg_database_aclcheckвызов куда-нибудь, я давно уже не смотрел: /
Крис Фармилоэ