Строгий контроль над переменной Statement_timeout в PostgreSQL - PullRequest
1 голос
/ 01 марта 2011

Кто-нибудь знает, как ограничить возможность пользователей устанавливать переменные? Конкретно Statement_timeout?

Независимо от того, если я изменю пользователя, чтобы эта переменная была установлена ​​в минуту, или если я установил ее в минуту в файле postgresql.conf, пользователь всегда может просто набрать SET Statement_timeount TO 0; полностью отключить тайм-аут для этого сеанса.

Кто-нибудь знает способ остановить это? Я знаю, что некоторые переменные могут быть изменены только суперпользователем, но я не могу понять, есть ли способ заставить это быть одной из этих контролируемых переменных. В качестве альтернативы, есть ли способ отозвать SET из их роли?

В моем приложении эта переменная используется для ограничения возможности случайных пользователей (регистрация пользователей открыта для публики) использовать все время ЦП с (почти) бесконечными запросами. Если они могут отключить его, это означает, что я должен найти новую методологию ограничения ресурсов для пользователей. Если нет способа защитить эту переменную, можете ли вы предложить другие способы достижения этой же цели?

Редактировать 2011-03-02 Причина, по которой база данных открыта для публики и допускается произвольный SQL, заключается в том, что этот проект предназначен для игры, в которую играют непосредственно в базе данных. Каждый игрок является пользователем базы данных. Данные заблокированы за представлениями, правилами и триггерами, CREATE отозван у публики и роль игрока для предотвращения большинства изменений в схеме, а SELECT на pg_proc удален для защиты кода функции, чувствительной к игре.

Это не какая-то критическая система, которую я открыл миру. Это странное подтверждение концепции, которая ставит ненормальное доверие к базе данных, пытаясь сохранить в ней весь треугольник безопасности ЦРУ.

Спасибо за вашу помощь, Abstrct

1 Ответ

1 голос
/ 01 марта 2011

Нет способа переопределить это. Если вы позволяете пользователю запускать произвольные команды SQL, то изменение Statement_timeout в любом случае является лишь верхушкой айсберга ... Если вы не доверяете своим пользователям, вы не должны позволять им запускать произвольный SQL - или соглашаться с тем, что они могут работать Ну, произвольный SQL. И есть какой-то внешний монитор, который отменяет запросы.

...