Mọi người,
Tôi có thể sử dụng trợ giúp của bạn để làm cho thiết kế kiểm soát truy cập người dùng Postgres của tôi tốt hơn và phù hợp hơn với các thực tiễn tốt nhất. Tôi đang giúp triển khai một máy chủ Postgres sản xuất nhỏ nhưng tôi không phải là quản trị viên DB, vì vậy tôi biết chỉ cần đủ nguy hiểm.
Có một máy chủ với một lần cài đặt Postgres v9.2. Cài đặt này lưu trữ nhiều cơ sở dữ liệu, mỗi cơ sở phục vụ đầy đủ một "khách hàng" khác nhau. Nói cách khác, customer1 sẽ không, không nên sử dụng cơ sở dữ liệu2, v.v. Trong các hoạt động bình thường, các cơ sở dữ liệu được truy cập bởi một phiên bản trùng khớp của CakePHP, tất cả cùng nằm trên cùng một máy chủ với Postgres. Mặc dù có thể có tối ưu hóa có thể có trong triển khai này, nhưng tôi chủ yếu quan tâm đến vai trò của Psql.
Dựa trên những gì tôi đọc, có vẻ như ba loại vai trò sẽ có ý nghĩa:
- Superuser postgres với mật khẩu không mặc định
- Vai trò quản trị viên không có đặc quyền siêu người dùng để bảo trì định kỳ, tạo DB, sao lưu, khôi phục. Có thể làm bất cứ điều gì với tất cả các cơ sở dữ liệu khách hàng.
- Vai trò người dùng chỉ với khả năng CRUD trong cơ sở dữ liệu tương ứng của họ. Nhiều quyền hơn trên DB riêng của họ có thể được dung thứ nếu nó làm sạch việc thực hiện.
Thực hiện thiết kế đó là nơi tôi kém tự tin hơn nhiều. Quyền sở hữu của DB so với bảng và cũng như ai nên thừa hưởng từ người hơi lầy lội. Dưới đây là cơ sở dữ liệu của tôi và người dùng của tôi. Là đủ thông tin để đánh giá việc thực hiện?
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
Để ngăn chặn các kết nối bên ngoài và mật khẩu rõ ràng, pg_hba.conf là như sau:
local all all md5
host all all 127.0.0.1/32 md5
host all all ::1/128 md5