Millet,
Postgres kullanıcı erişim denetimi tasarımımı daha iyi ve en iyi uygulamalarla daha uyumlu hale getirmek için yardımınızı kullanabilirim. Küçük bir prodüksiyon Postgres sunucusunu piyasaya sürmeye yardım ediyorum ancak bir DB yöneticisi değilim, bu yüzden tehlikeli olacak kadar bilgim var.
Bir Postgres v9.2 kurulumu olan bir sunucu var. Bu yükleme, her biri tamamen farklı bir "müşteriye" hizmet veren birden çok veritabanını barındırır. Başka bir deyişle, müşteri1 veritabanı2'yi kullanmamalı, böyle kullanmamalıdır. Normal işlemler sırasında, veritabanlarına, hepsi Postgres'le aynı sunucuda bulunan eşleşen bir CakePHP örneği ile erişilir. Bu dağıtımda olası optimizasyonlar olsa da, çoğunlukla Psql rolleriyle ilgileniyorum.
Okuduklarımdan yola çıkarak üç çeşit rolün anlaşılacağı anlaşılıyor:
- Varsayılan olmayan şifre ile Süper kullanıcı postgres
- Rutin bakım, DB oluşturma, yedekleme, geri yükleme için süper kullanıcı ayrıcalıklarına sahip olmayan bir yönetici rolü. Tüm müşteri veritabanlarıyla bir şeyler yapabilmeli.
- Sadece kendi veritabanında CRUD yeteneği ile kullanıcı rolleri. Uygulamayı temizlerse kendi veritabanlarında daha fazla haklara tolere edilebilir.
Bu tasarımı uygulamak daha az kendime güvendiğim yerdir. Tabloya karşı DB'nin mülkiyeti ve kimlerden biraz kimsesiz kalması gerektiğine bakılmaksızın. Aşağıda veritabanlarım ve kullanıcılarım var. Uygulamayı değerlendirmek için bu yeterli bilgi mi?
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
Dış bağlantıları ve şifreleri temizlemede önlemek için, pg_hba.conf şöyledir:
local all all md5
host all all 127.0.0.1/32 md5
host all all ::1/128 md5