皆さん、
Postgresのユーザーアクセス制御の設計を改善し、ベストプラクティスに沿ったものにするために、あなたの助けを借りることができます。私は小規模な実稼働Postgresサーバーの展開を手伝っていますが、私はDB管理者ではないので、危険になるのに十分なことを知っています。
Postgres v9.2のインストールが1つあるサーバーが1つあります。このインストールは複数のデータベースをホストし、それぞれが異なる「顧客」に完全にサービスを提供します。つまり、customer1はdatabase2を使用しない、使用しないなどです。通常の操作中、データベースはそれぞれ、Postgresと同じサーバーに共存するCakePHPの一致するインスタンスによってアクセスされます。この展開には最適化が考えられますが、私は主にPsqlロールに興味があります。
私が読んだものに基づいて、次の3つのタイプの役割が理にかなっているようです。
- デフォルト以外のパスワードを持つスーパーユーザー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