Люди,
Я міг би скористатись вашою допомогою, щоб покращити дизайн контролю доступу користувачів Postgres і краще узгодити його з найкращими методами. Я допомагаю розгорнути невеликий виробничий сервер Postgres, але я не адміністратор БД, тому знаю достатньо, щоб бути небезпечним.
Є один сервер з одним встановленням Postgres v9.2. Ця установка розміщує декілька баз даних, кожна з яких повністю обслуговує іншого "замовника". Іншими словами, customer1 не буде, не повинен використовувати базу даних2 тощо. Під час звичайних операцій, до баз даних ви можете скористатися відповідним екземпляром CakePHP, всі розташовані на тому ж сервері, що і Postgres. Хоча для цього розгортання можливі оптимізації, мене найбільше цікавлять ролі Psql.
Виходячи з того, що я прочитав, здається, три типи ролей мали б сенс:
- Суперусерські постгреси з паролем, що не використовується за замовчуванням
- Роль адміністратора, що не має привілеїв суперпользователя для рутинного обслуговування, створення БД, резервного копіювання, відновлення. Потрібно вміти робити що-небудь із усіма базами даних клієнтів.
- Ролі користувачів з просто можливістю CRUD у відповідній базі даних. Більше прав на власну БД можна допустити, якщо вона очистить реалізацію.
Реалізуючи цей дизайн, я набагато менш впевнений. Право власності на БД та таблицю, а також того, хто повинен успадкувати від того, хто трохи каламутний. Нижче мої бази даних та мої користувачі. Чи достатньо інформації для оцінки реалізації?
Role name | Attributes | Member of
-----------+------------------------------------------------+-------------------
admin | Create role, Create DB | {user1, user2}
postgres | Superuser, Create role, Create DB | {}
user1 | | {}
user2 | | {}
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+---------+-------+-----------------------
admin | postgres | UTF8 | en_US | en_US | =Tc/postgres +
| | | | | postgres=CTc/postgres+
| | | | | admin=CTc/postgres
postgres | postgres | UTF8 | en_US | en_US |
template0 | postgres | UTF8 | en_US | en_US | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US | en_US | =c/postgres +
| | | | | postgres=CTc/postgres
user1 | admin | UTF8 | en_US | en_US | =Tc/admin +
| | | | | admin=CTc/admin +
| | | | | user1=CTc/admin
user2 | admin | UTF8 | en_US | en_US | =Tc/admin +
| | | | | admin=CTc/admin +
| | | | | user2=CTc/admin
Щоб запобігти зовнішнім з'єднанням та паролям у прозорих даних, pg_hba.conf є таким:
local all all md5
host all all 127.0.0.1/32 md5
host all all ::1/128 md5