Ограниченные разрешения PostgreSQL для веб-приложения

Цель

Создайте базу данных с тремя пользователями и ограничьте их привилегии (я просто думаю вслух, поэтому мое разделение пользователей также открыто для исправления):

Суперпользователь - этот пользователь допускает самое начальное предоставление базы данных. Создайте базу данных приложения, создайте других пользователей, установите их привилегии. По умолчаниюpostgres суперпользователь работает для меня, так что это сделано.Администратор - этот пользователь имеет доступ только к базе данных, которая была создана во время подготовки. Администратор можетCRUD все данные во всех таблицах, а также таблицы CRUD и т. д. Тип ситуации «Суперпользователь только для этой базы данных». Когда приложение обновляется, администратор - это пользователь, который использует автоматизированные инструменты для обработки миграций базы данных.Пользователь приложения - этот пользователь, в конечном итоге, поддерживает функции веб-приложения. Обратите внимание, что это не имеет никакого отношения к пользователям на веб-страницах и т. Д. - это пользователь, которого сервер использует для выполнения запросов, вставки и удаления данных. Я явноне делайте хотите, чтобы этот пользователь мог изменять права доступа к чему-либо, а также создавать / уничтожать таблицы или индексы или что-либо структурное.Что я пробовал

Прежде всего, глядя на (в целом отличную) документацию PostgreSQL,страница о гранте в значительной степени оставляет меня косоглазым. Потратив несколько часов на чтение ролей и привилегий PostgreSQL, я, как правило, растерялся. Я думаю, что немного потрудившись, я смогу записать то, что я хочу для пользователя с правами администратора, но я довольно сильно застрял в «пользователе приложения». Я дошел до этого далеко (имена и пароли являются просто местозаполнителями):

$ psql -U postgres
postgres=# CREATE USER "app-admin" WITH PASSWORD 'password';
CREATE ROLE
postgres=# CREATE USER "app-user" WITH PASSWORD 'password';
CREATE ROLE
postgres=# CREATE DATABASE "test-database" WITH OWNER "app-admin";
CREATE DATABASE
postgres=# \c "test-database"
You are now connected to database "test-database" as user "postgres".
test-database=# DROP SCHEMA "public";
DROP SCHEMA
test-database=# CREATE SCHEMA "app" AUTHORIZATION "app-admin";
CREATE SCHEMA

И вот тут я неуверен. Мне кажется, что я пытаюсь избежать ответа: «по умолчанию все отозвать, а затем перечислить все привилегии, которые вам понадобятся на всех разных уровнях для всех разных объектов». Я пытаюсь избежать этого, потому что я прямо не знаю, что мне там нужно. Если это закончится тем, что я получу ответ, тогда мне просто придется сесть на корточки и прочитать больше, но обычно, когда я начинаю идти по таким путям, я что-то упустил.

вопросы

Как мне ограничить привилегии дляapp-user поэтому они не могут изменять какие-либо структурные данные (например, не могут добавлять или уничтожать таблицы), но могут соединяться и что-либо делать со строками (безопасность на уровне строк даже не на моем радаре). Разве эта общая модель привилегий не совпадает с тем, что ожидает PostgreSQL? Я чувствую, что что-то упускаю, если мне нужно пройтись по каждому варианту на этой странице «гранта», чтобы выполнить что-то вроде этого - будь то моя мотивация сделать это в первую очередь или средства, с помощью которых я собираюсь Это.

контекст

Я пытаюсь создать свое первое сквозное веб-приложение. Я сделал достаточно общей разработки программного обеспечения и разработки веб-приложений, теперь я пытаюсь понять те части, которые я обычно воспринимаю как должное изо дня в день. Я пытаюсь настроить сервер PostgreSQL, сохраняя при этомпринцип наименьших привилегий в уме.

Side-квест

Я не видел, чтобы это было сделано в веб-приложениях, где я просто присоединился к команде разработчиков, хотя они, как правило, невелики и мало используются. Делает ли это на самом деле что-нибудь? У кого-нибудь есть веские причины, почему нужно делать что-то подобное, или почему это плохая или неэффективная идея? Я предполагал, что если в конечном итоге я получу уязвимость SQL-инъекции, это уменьшит ущерб, поскольку у пользователя базы данных будет ограниченный доступ. Это неправильно?

Аккуратные статьи, которые я нашел на эту тему:http://www.ibm.com/developerworks/opensource/library/os-postgresecurity/index.htmlPDF ПРЕДУПРЕЖДЕНИЕ: https://wiki.postgresql.org/images/d/d1/Managing_rights_in_postgresql.pdfhttps://www.digitalocean.com/community/tutorials/how-to-use-roles-and-manage-grant-permissions-in-postgresql-on-a-vps--2http://blog.2ndquadrant.com/auditing-users-and-roles-in-postgresql/

Ответы на вопрос(2)

Ваш ответ на вопрос