2016-11-14 2 views
1

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

Одна из функций, которые я хотел бы увидеть, если это возможно, устанавливает разрешения на уровне строк для пользователей, которые прошли аутентификацию и авторизацию в моей системе.

Скажите, у меня есть пользователь john, который является обычным user. Будучи постоянным пользователем, Джон может создавать или обновлять собственные строки, но не другие, и читать доступ к некоторым представлениям в базе данных.

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

Есть ли общая база данных с этой функцией из коробки?

ответ

1

Да, это действительно возможно и хорошо поддерживается в PostgreSQL 9.5 (а также в более ранних версиях до некоторой степени).

https://www.postgresql.org/docs/9.5/static/ddl-rowsecurity.html

Это называется ряд безопасности.

Пару вещей, чтобы иметь в виду:

  1. Это гибкий
  2. вы можете использовать переменную current_user для контроля доступа
  3. он опирается на фактический пользователь PostGreSQL

Иногда в разработке приложений нецелесообразно иметь отдельного пользователя базы данных для каждого типа аутентифицированного пользователя в вашем веб-приложении. Есть и другие способы справиться с этим.

В некоторых моих приложениях мы устанавливаем переменные postgresql (set command), когда соединение подхвачено веб-запросом. Эти переменные отслеживают, кто аутентифицирован. Затем мы используем представления для управления доступом на основе этих переменных. Прокомментируйте, если вы хотите получить более подробную информацию об этой практике.