Merhaba,
PostgreSQL'de authentication ayarlarını pg_hba.conf dosyası içinde yapıyoruz. Pg_hba.conf dosyasına ait detaylı bilgiye buradan ulaşabilirsiniz. Pg_hba.conf içinde authentication method olarak password kullanılmışsa bunun anlamı kullanıcı parolası network üzerinden plaintext olarak aktarıldığıdır. Eğer böyle bir durumda authentication method değiştirmek istenirse izlenecek adım;
PostgreSQL 9.6 ve öncesi için UNENCRYPTED parolaya sahip kullanıcı oluşturalım.
[usagi] # CREATE ROLE turan WITH LOGIN UNENCRYPTED PASSWORD '123';
CREATE ROLE
Pg_authid tablosu kullanıcılara ait database üzerindeki rol bilgilerini barındırır.
Küçük bir not, bu tablo herkesin erişimi olan bir tablo değildir. Pg_roles tablosu herkesin erişimine açık olarak kullanılabilir. Bu tablo üzerindeki parolalar maskelenmiştir.
Bu tablo içinde Turan kullanıcısının parolasının nasıl saklandığına bakalım.
[usagi] # SELECT ROLNAME, ROLPASSWORD FROM PG_AUTHID;
rolname | rolpassword
-------------------+-------------------------------------
turan | 123
(4 rows)
Tablo içinde Turan kullanıcısına ait parola plaintext olarak saklanıyor. Eğer parolası plaintext olarak saklanan kullanıcılara sahipseniz kullanıcının güncel parolasını aşağıdaki gibi encrypt edebilirsiniz.
[usagi] # ALTER ROLE turan WITH ENCRYPTED PASSWORD '123';
ALTER ROLE
Kullanıcının parolası pg_authid tablosunda encrypted olarak saklanacaktır.
[usagi] # SELECT ROLNAME, ROLPASSWORD FROM PG_AUTHID;
rolname | rolpassword
-------------------+-------------------------------------
turan | md53cd9c423a29b95ce52290872ee682612
PostgreSQL 10 ve sonrasında kullanıcıyı oluştururken daha önceki versiyonlar için kullandığımız UNENCRYPTED ifadesi tamamen kaldırılmıştır. CREATE ROLE ile ancak ENCRYPTED ifadesi kullanılabilir. Kullanılmasa da parolayı encrypt edecektir.
[moon] # create role turan with login password '123';
CREATE ROLE
[moon] # SELECT ROLNAME, ROLPASSWORD FROM PG_AUTHID;
rolname | rolpassword
---------+-------------------------------------
turan | md53cd9c423a29b95ce52290872ee682612
(1 row)
Tüm bu adımlardan sonra pg_hba.conf içinde kullanılmış password ifadesi yerine md5 veya yukarıda belirttiğim gibi scram-sha-256 authentication-method u kullanabilirsiniz.
Sevgiler,
PostgreSQL'de authentication ayarlarını pg_hba.conf dosyası içinde yapıyoruz. Pg_hba.conf dosyasına ait detaylı bilgiye buradan ulaşabilirsiniz. Pg_hba.conf içinde authentication method olarak password kullanılmışsa bunun anlamı kullanıcı parolası network üzerinden plaintext olarak aktarıldığıdır. Eğer böyle bir durumda authentication method değiştirmek istenirse izlenecek adım;
- Belirli bir kullanıcı için authentication method password kullanılmış ise o kullanıcının parolasının encrypt olup olmadığından pg_authid tablosuna bakılarak emin olunmalı.
- Eğer kullanıcı parolası encrypt edilmemişse(pg_authid tablosunda rolpassword alanına bakılmalı) o kullanıcı için ALTER ROLE .. WITH ENCRYPTED PASSWORD 'kullanıcı_parolası'; denilmeli.
- Kullanıcı parolası encrypted olarak saklandığına göre pg_hba.conf dosyasında password yerine 9.6 ve öncesi için en azından md5 yazılmalı. 10 ve sonrası için md5 veya
scram-sha-256 kullanılabilir. (scram-sha-256, md5'ten daha güçlüdür. 64 milyon değerden sonra tekrar etmeye başlar ancak)
Diğer durumda yani
kullanıcının parolası encrypt edilmiş olarak saklanıyorsa pg_hba.conf dosyasında md5 olarak güncelleyebiliriz.
PostgreSQL 9.6 ve öncesi için UNENCRYPTED parolaya sahip kullanıcı oluşturalım.
[usagi] # CREATE ROLE turan WITH LOGIN UNENCRYPTED PASSWORD '123';
CREATE ROLE
Pg_authid tablosu kullanıcılara ait database üzerindeki rol bilgilerini barındırır.
Küçük bir not, bu tablo herkesin erişimi olan bir tablo değildir. Pg_roles tablosu herkesin erişimine açık olarak kullanılabilir. Bu tablo üzerindeki parolalar maskelenmiştir.
Bu tablo içinde Turan kullanıcısının parolasının nasıl saklandığına bakalım.
[usagi] # SELECT ROLNAME, ROLPASSWORD FROM PG_AUTHID;
rolname | rolpassword
-------------------+-------------------------------------
turan | 123
(4 rows)
Tablo içinde Turan kullanıcısına ait parola plaintext olarak saklanıyor. Eğer parolası plaintext olarak saklanan kullanıcılara sahipseniz kullanıcının güncel parolasını aşağıdaki gibi encrypt edebilirsiniz.
[usagi] # ALTER ROLE turan WITH ENCRYPTED PASSWORD '123';
ALTER ROLE
Kullanıcının parolası pg_authid tablosunda encrypted olarak saklanacaktır.
[usagi] # SELECT ROLNAME, ROLPASSWORD FROM PG_AUTHID;
rolname | rolpassword
-------------------+-------------------------------------
turan | md53cd9c423a29b95ce52290872ee682612
PostgreSQL 10 ve sonrasında kullanıcıyı oluştururken daha önceki versiyonlar için kullandığımız UNENCRYPTED ifadesi tamamen kaldırılmıştır. CREATE ROLE ile ancak ENCRYPTED ifadesi kullanılabilir. Kullanılmasa da parolayı encrypt edecektir.
[moon] # create role turan with login password '123';
CREATE ROLE
[moon] # SELECT ROLNAME, ROLPASSWORD FROM PG_AUTHID;
rolname | rolpassword
---------+-------------------------------------
turan | md53cd9c423a29b95ce52290872ee682612
(1 row)
Tüm bu adımlardan sonra pg_hba.conf içinde kullanılmış password ifadesi yerine md5 veya yukarıda belirttiğim gibi scram-sha-256 authentication-method u kullanabilirsiniz.
Sevgiler,
Comments
Post a Comment