사람들,
Postgres 사용자 액세스 제어 설계를 모범 사례에 더 적합하고 잘 맞출 수 있도록 귀하의 도움을 사용할 수 있습니다. 소규모 프로덕션 Postgres 서버를 출시하는 데 도움을 주지만 DB 관리자는 아니므로 위험 할 정도로 충분히 알고 있습니다.
Postgres v9.2를 한 번 설치 한 서버가 하나 있습니다. 이 설치는 각각 다른 "고객"을 제공하는 여러 데이터베이스를 호스팅합니다. 즉, customer1은 database2 등을 사용하지 않아야합니다. 정상적인 작업 동안 데이터베이스는 각각 CakePHP의 일치하는 인스턴스에 의해 액세스되며 각각 Postgres와 동일한 서버에 있습니다. 이 배포에는 최적화가 가능하지만 Psql 역할에 관심이 많습니다.
내가 읽은 것을 기준으로 세 가지 유형의 역할이 의미가있는 것 같습니다.
- 기본 비밀번호가 아닌 수퍼 유저 postgres
- 일상적인 유지 관리, DB 생성, 백업, 복원에 대한 수퍼 유저 권한이없는 관리자 역할. 모든 고객 데이터베이스로 무엇이든 할 수 있어야합니다.
- 해당 데이터베이스에서 CRUD 기능 만있는 사용자 역할 구현을 정리하면 자체 DB에 대한 더 많은 권한을 견딜 수 있습니다.
그 디자인을 구현하는 것은 내가 덜 확신하는 곳입니다. DB 대 테이블의 소유권과 누가 누구로부터 물려 받아야 하는가. 아래는 내 데이터베이스와 사용자입니다. 구현을 평가하기에 충분한 정보입니까?
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