Skip to main content

PostgreSQL'de Parolası Encrypt Edilmemiş Kullanıcılar için Authentication Düzenlemesi

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;
  1. 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ı.
  2. 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.
  3. 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)
  4. Diğer durumda yani kullanıcının parolası encrypt edilmiş olarak saklanıyorsa pg_hba.conf dosyasında md5 olarak güncelleyebiliriz.
Kullanıcı oluşturduğumuzda eğer PostgreSQL 9.6 ve öncesi içinse kullanıcı parolalarını unencrypted oluşturabiliyoruz. Bunun anlamı kullanıcı parolasına pg_authid tablosu kullanılarak doğrudan erişilebilir. Güvenlik açısından doğru yöntem değil.

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

Popular posts from this blog

PGConf Europe 2018 Güncesi 1

Merhaba, Diğer tüm veritabanları arasında en popüler açık kaynak kodlu veritabanı olan PostgreSQL, tüm yıl boyunca farklı ülkelerde bir çok konferansa sahiplik yapmaktadır. En bilinenleri PGDay ve PGConf'dur. Ayrıca her yıl 2 Şubatta Brüksel’de yapılan FOSDEM etkinliğinde de PostgreSQL konuşmalarının yapıldığı bir oturum mutlaka olmaktadır. PostgreSQL etkinlik detaylarına bu linkten ulaşabilirsiniz. Bu yıl ki PGConf Europe konferansı Lizbon'da yapıldı. Konferansla ilgili izlenimlerimi, yaptığım neredeyse 6 günlük yolculuğun en başından tüm detaylarıyla birlikte paylaşmak istiyorum. Yolculuğumuz sevgili Seda ile birlikte Atatürk Havalimanı’ndan sabah 07:30’da Lizbon’a direk uçuşla başladı.  Hava şahaneydi ve uçuşumuz konforlu geçti. Koltuğumuz cam kenarı ve uçağın kanadının hemen yanındaydı (benim favori koltuklarım 24, 25, 26, 27 ve 28. sıradakiler) ve biz 27. sıradaydık. Bol bol resim çektik bulutların üstündeyken ve uçak kanatlı olanlardan.  Lizbon’a vardığımı...

PostgreSQL High Availability - Patroni 2

Patroni kurulumuyla ilgili oldukça fazla kaynak bulunmakta fakat kurulum ve yönetimini beraber barındıran kaynağa denk gelmedim. Bu yazıda hem Patroni kurulumu hem de kurulum sonrası yönetimiyle alakalı detaylara ulaşabilirsiniz. PostgreSQL cluster'larının yönetimi için kullanılan Patroni ile ilgili temel bilgilerin yer aldığı Autofailover üzerine hazırladığım yazı serisine aşağıdaki linklerden erişebilirsiniz. PostgreSQL ve Autofailover PostgreSQL'de Autofailover ve Patroni 1 (Giriş) PostgreSQL'de Autofailover ve Patroni 2 (Kurulum, Konfigürasyon ve Yönetim) PostgreSQL'de Autofailover ve Patroni 3 (Mevcut PostgreSQL Cluster'inin Patroni'ye Geçirilmesi) Patroni, PostgreSQL veritabanlarının kurulumundan ve konfigürasyonundan sorumludur. Yani Patroni'yi kurduğumuz sunucular aynı zamanda Patroni ile kurulmuş PostgreSQL'leri barındıracak. Üç node'lu PostgreSQL ve üç node'lu ETCD cluster'larını oluşturacağım. Kuruluma önce üç no...

PostgreSQL High Availability - Patroni 1

Patroni, PostgreSQL HA (High Availability) Cluster yapısının kurulması ve yönetimi için kullanılan open source bir araçtır. Patroni, PostgreSQL Cluster’inin kurulumu (bootstrap), replikasyonunun kurulumu, PostgreSQL otomatik failover yapılması amacıyla kullanılır. Python ile yazılmıştır. Bir önceki yazıda PostgreSQL'de Autofailover araçlarının ne olduğu ve neden Autofailover'a gereksinim duyulduğu konusunda yazı paylaşmıştım. Yazıya buradan ulaşabilirsiniz. Patroni Kurulumu İçin Gereksinimler nedir? Patroni’nin tek başına kurulumu autofailover yapısını yapılandırmak için yeterli değildir. Patroni ile Autofailover yapısının kurulması için DCS (Distributed Configuration Store) araçlarından birine ihtiyaç vardır. Bunlardan bazıları; ETCD, Consul, ZooKeeper, Kubernetes. PostgreSQL üzerinde Autofailover araçlarından Patroni entegre edecekseniz DCS araçlarından birini kullanmanız gerekecek. DCS dediğimiz şey aslında Service Discovery araçlarından biri olduğundan bu iki tan...