PostgreSQL – IP bloğundan gelen bağlantıları listelemek
PostgreSQL’in kullanışlı veri tiplerinden biri de inet
veri tipidir. inet veri tipi IPv4 ve IPv6 adreslerini tanımlamada kullanılır. Eğer istenirse ip adresi subneti ile beraber de saklanabilir. Temel operatörler olan <
(küçüktür) >
(büyüktür) =
(eşittir) operatörleri dahil olmak üzere toplam 17 operatör destekler. Bunlara ek olarak network(
, inet
)netmask(
gibi toplamda 14 adet fonksiyon da network hesaplarını bizler için kolaylaştırır.inet
)
pg_stat_activity view’ı
pg_stat_activity
viewı anlık bağlantıları listeleyerek onların durumları hakkında bizlere bilgi verir. Bu view, çağrıldığı anda PostgreSQL üzerinde bulunan tüm bağlantıları ve bunların stateti, query başlangıç veya transaction başlangıç zamanı, client ipsi, user ve veritabanı gibi bilgileri listeler.
Üzerinde açık 1000 connection bulunan bir veritabanında filtreleme yapmadan istediğimiz bağlantıların o anda ne yaptığı izleyemeyiz. Bir filtre örneği olarak belli bir kullanıcıya ait bağlantıları listeleyelim;
SELECT * FROM pg_stat_activity WHERE usename = 'kullanıcı_adi';
Belli bir client IP’den gelen bağlantıları listeleyelim;
SELECT * FROM pg_stat_activity WHERE client_addr = inet '10.0.2.2';
Şimdi yukarıdaki 2 bilgiyi birleştirerek belli bir ip maskesi altındaki tüm bağlantıları listeleyelim. Örnek olarak 10.0…. ile başlayan tüm iplerden gelen bağlantıları listeleyelim.
SELECT * FROM pg_stat_activity WHERE client_addr << inet '10.0.0.0/16'
Burada <<
(is contained by) operatörüne dikkat edelim. Bu operatör sayesinde belli bir ip bloğundaki bağlantıları kolayca ayıklayabilmiş olduk.
Referanslar
- https://www.postgresql.org/docs/current/static/datatype-net-types.html
- https://www.postgresql.org/docs/current/static/functions-net.html
- https://www.postgresql.org/docs/current/static/monitoring-stats.html#PG-STAT-ACTIVITY-VIEW