PosgreSQL günümüzün en başarılı veritabanlarından biridir. Açık kaynak olması, gelişmiş ve güçlü özellikleri, zengin işletim sistemi desteğiyle kesinlikle kullanılmayı hak eden bir Veritabanı Yönetim Sistemidir. Böyle bir veritabanı ile FreeBSD'nin güvenli ve güçlü yapısı bir araya gelince başarılı bir sunucunun olmazsa olmazları bir bütün olarak karşınızda olacaktır.
Bu yazım da kendi ihtiyaçlarım için FreeBSD sunucumda Jail içerisine kurduğum PostgreSQL Veritabanı Yönetim Sisteminin kurulum aşamalarını adım adım anlatıyorum.
Kurulum Sistemi
OS : FreeBSD 9.1 64bit GENERIC Kernel
Jail Adı : pgdb.deneme.com
PostgreSQL Sürümü : 9.2
Bilgi Düzeyi
FreeBSD dosya dizin yapısı tecrübesi, temel UNIX kullanımı, vi veya ee ile dosya düzenleyebilme, PostgreSQL ile bir iki defa karşılaşmış olmak yeterlidir.
PostgreSQL Sürümü : 9.2
Bilgi Düzeyi
FreeBSD dosya dizin yapısı tecrübesi, temel UNIX kullanımı, vi veya ee ile dosya düzenleyebilme, PostgreSQL ile bir iki defa karşılaşmış olmak yeterlidir.
KURULUM
FreeBSD üzerinde PostgreSQL'i normal bir kurulum üzerine kurabileceğiniz gibi bir Jail içerisine de kurulumunu yapabilirsiniz. Bu yazıda jail içine kurulum ile ilgili de bilgiler verilecektir. Kullanım ihtiyacınıza göre birini seçebilirsiniz.
Kurulum Öncesi Hazırlıklar
PostgreSQL'in FreeBSD üzerine kurulumu birkaç komut ile kısa sürede yapılabilmektedir. Ancak üzerinde dikkat edilmesini gerekli gördüğüm kernel ayarları ile ilgili bir kaç kelime etmek istiyorum.
Her gelişmiş veritabanında olduğu gibi PostgreSQL'in de çalışırken sistemde kullandığı belirli kaynaklar vardır. Bu kaynakların etkin kullanımına bağlı olarak PostgreSQL'de başarımını azami ölçüde gösterecektir. PostgreSQL'i eğer deneme veya öğrenme amaçlı kullanacaksanız öntanımlı kernel parametrelerini değiştirmenize gerek yoktur. Ancak konu kurumsal yani görev-kritik sunucular olduğunda bu kernel parametrelerini mevcut donanıma, bağlantı sayısına ve kullanım yük durumuna uygun olarak değiştirmek gerekmektedir.
Bu parametrelerle ilgili detaylı bilgiyi kaynaklar bölümündeki bağlardan alabilirsiniz.(Bkz 3) Bu yazıda bu konulara değinilmeyecektir.
İPUCU: Kernel parametrelerinin mevcut durmunu veya yaptığınız değişikliklerin durumunu görmek için aşağıdaki komutları kullanabilirsiniz.
# sysctl -a | grep -E "shmall|shmmax|semmni|semmns|semmnu"
kern.ipc.semmnu: 120
kern.ipc.semmns: 240
kern.ipc.semmni: 40
kern.ipc.shmall: 131072
kern.ipc.shmmax: 536870912
veya alternatif olarak
# ipcs -M
shminfo:
shmmax: 536870912 (max shared memory segment size)
shmmin: 1 (min shared memory segment size)
shmmni: 192 (max number of shared memory identifiers)
shmseg: 128 (max shared memory segments per process)
shmall: 131072 (max amount of shared memory in pages)
Gerekli düzenlemeleri yapalım.
/boot/loader.conf dosyası içerisine bazı kernel parametrelerini ekliyoruz.
Kurulum Öncesi Hazırlıklar
PostgreSQL'in FreeBSD üzerine kurulumu birkaç komut ile kısa sürede yapılabilmektedir. Ancak üzerinde dikkat edilmesini gerekli gördüğüm kernel ayarları ile ilgili bir kaç kelime etmek istiyorum.
Her gelişmiş veritabanında olduğu gibi PostgreSQL'in de çalışırken sistemde kullandığı belirli kaynaklar vardır. Bu kaynakların etkin kullanımına bağlı olarak PostgreSQL'de başarımını azami ölçüde gösterecektir. PostgreSQL'i eğer deneme veya öğrenme amaçlı kullanacaksanız öntanımlı kernel parametrelerini değiştirmenize gerek yoktur. Ancak konu kurumsal yani görev-kritik sunucular olduğunda bu kernel parametrelerini mevcut donanıma, bağlantı sayısına ve kullanım yük durumuna uygun olarak değiştirmek gerekmektedir.
Bu parametrelerle ilgili detaylı bilgiyi kaynaklar bölümündeki bağlardan alabilirsiniz.(Bkz 3) Bu yazıda bu konulara değinilmeyecektir.
İPUCU: Kernel parametrelerinin mevcut durmunu veya yaptığınız değişikliklerin durumunu görmek için aşağıdaki komutları kullanabilirsiniz.
# sysctl -a | grep -E "shmall|shmmax|semmni|semmns|semmnu"
kern.ipc.semmnu: 120
kern.ipc.semmns: 240
kern.ipc.semmni: 40
kern.ipc.shmall: 131072
kern.ipc.shmmax: 536870912
veya alternatif olarak
# ipcs -M
shminfo:
shmmax: 536870912 (max shared memory segment size)
shmmin: 1 (min shared memory segment size)
shmmni: 192 (max number of shared memory identifiers)
shmseg: 128 (max shared memory segments per process)
shmall: 131072 (max amount of shared memory in pages)
Gerekli düzenlemeleri yapalım.
/boot/loader.conf dosyası içerisine bazı kernel parametrelerini ekliyoruz.
kern.ipc.semmni=256
kern.ipc.semmns=512
kern.ipc.semmnu=256
kern.ipc.semmns=512
kern.ipc.semmnu=256
/etc/sysctl.conf dosyasına aşağıdaki satırı ekliyoruz.
kern.ipc.shmall=32768
kern.ipc.shmmax=134217728
kern.ipc.shm_use_phys=1
kern.ipc.shmmax=134217728
kern.ipc.shm_use_phys=1
Veritabanı hizmeti çalıştırılacak sunucularda Sanal Hafıza Yönetiminin performansını olumsuz etkilememesi açısından takas alanı (swap) üzerine paylaşımlı hafıza sayfalarının yazılmasını engellemek için aşağıdaki kernel parametresini de etkinleştiriyoruz.
# sysctl kern.ipc.shm_use_phys=1
kern.ipc.shm_use_phys: 0 -> 1
/etc/sysctl.conf dosyasına aşağıdaki satırı ekliyoruz.
kern.ipc.shm_use_phys=1
Eğer çok sayıda tablonuz ve kullanıcınız var ise veya olacaksa, kern.maxfiles kernel parametre değerini sysctl kullanarak arttırmayı düşünebilirsiniz.
Yerel Dil Ayarları
PostgreSQL Veritabanı Kümesini başlatmak için rc betiğini kullanıyorsanız (/usr/local/etc/rc.d/postgresql) ön tanımlı dil karakter verisi ayarı için UTF-8 kullanılacaktır. Eğer farklı bir dil karakteri ile çalışmak istiyorsanız ya postgresql_initdb_flags ayarını ya da login.conf dosyasında oluşturacağınız dil sınıfını kullanarak bu ayarları kişiselleştirebilirsiniz.
Örneğin /etc/rc.conf dosyası içerisinde postgresql_initdb_flags ile betiğin çalıştığındaki ön tanımlı dil ayarlarını Türkçe yapmak istersek:
postgresql_initdb_flags="--encoding=utf-8 --locale=tr_TR.UTF-8"
olarak yazmamız yeterlidir. Eğer ki login sınıf yöntemi ile dil ayarlamasını yapmak istersek:
Öncelikel /etc/login.conf dosyası içerisine aşağıdaki satırları ekliyoruz.
postgres:\
:charset=UTF-8:\
:lang=tr_TR.UTF-8:\
:tc=default:
Aşağıdaki komut ile login.conf dosyasında yaptığımız değişiklikleri etkinleştiriyoruz.
# cap_mkdb /etc/login.conf
Son olarak betiğin kullanabilmesi için rc.conf dosyası içerisine aşağıdaki satırı ekliyoruz.
postgresql_class="postgres"
böylece postgresql betiğini kullandığımızda dil ayarları Türkçe olarak ayarlanacaktır.
UYARI: Bu ayarları betiği çalıştırmadan önce yaptığımı belirtmek istiyorum.
İsteseniz bu işlemleri yeni bir veritabanını oluştururken de yapabiliyorsunuz. Yani farklı dil seçeneklerinde veritabanları oluşturup kullanabilirsiniz. Örneğin dil ayarlarını vermeden bir veritabanı oluşturursam PostgreSQL ön tanımlı dil ayarlarına göre veritabanı yerel ayarlarını yapacaktır. Kurulum bölümünde ön tanımlı dil olarak Türkçe ayarlanacak şekilde dosya düzenlemeleri yapılacaktır.
FreeBSD Jail içine Kurulum İçin Yapılması Gerekenler
Eğer FreeBSD Jail içerisinde PostgreSQL server çalıştırmak isterseniz Jail'leri bulunduran konakçı sistem üzerinde aşağıdaki birkaç işlemi yapmanız gerekmektedir. Eğer Jail içerisine kurulum yapmıyorsanız bir sonraki aşamadan devam edebilirsiniz.
/etc/sysctl.conf dosyasına aşağıdaki satırı ekliyoruz.
/etc/sysctl.conf dosyasına aşağıdaki satırı ekliyoruz.
security.jail.sysvipc_allowed=1
Yaptığınız değişikliğin hemen etkin olması için aşağıdaki komutu verebilirsiniz.
# sysctl security.jail.sysvipc_allowed=1
security.jail.sysvipc_allowed: 0 -> 1
security.jail.sysvipc_allowed: 0 -> 1
/etc/rc.conf dosyası içine de aşağıdaki satırı ekliyoruz.
jail_sysvipc_allow="YES"
Her ne kadar yukarıda sysctl ile bazı değişiklikleri hemen uygulamış olsakta Kernel salt okunur parametrelerinde yaptığımız değişikliklerin geçerli olması için sistemi bir defaya mahsus yeniden başlatmamız gerekiyor.
# shutdown -r now
PostgreSQL Sunucunun Kurulumu
Sunucu kurulumu için FreeBSD'nin güçlü ports altyapısını kullanarak istediğimiz özelliklerde PostgreSQL kurulumumuzu yapacağız. Bu nedenle lütfen kurulum öncesi ports ağacını mutlaka güncelleyiniz. Artık başlayalım :)
cd /usr/ports/databases/postgresql92-server
# shutdown -r now
PostgreSQL Sunucunun Kurulumu
Sunucu kurulumu için FreeBSD'nin güçlü ports altyapısını kullanarak istediğimiz özelliklerde PostgreSQL kurulumumuzu yapacağız. Bu nedenle lütfen kurulum öncesi ports ağacını mutlaka güncelleyiniz. Artık başlayalım :)
cd /usr/ports/databases/postgresql92-server
make config
yapıp çıkan ekranda ICU=off seçeneğini on yaparak etkinleştiriyoruz. Geri kalanı olduğu gibi bırakıyoruz. Tamam diyerek devam ediyoruz
ICU=on: Use ICU for unicode collation (server)
aşağıdaki komutu vererek kurulumu başlatıyoruz.
make install clean
kurulum sırasında sorulacak tüm yapılandırma seçeneklerini olduğu gibi kabul edip geçebilirsiniz. Sırasıyla tüm alt ve üst bağımlılıkları ile beraber PostgreSQL derlenip sisteme kurulacak.
Kurulum tamamlandıktan sonra ilk işimiz /etc/rc.conf dosyamıza gerekli satırları eklemek.
postgresql_class="postgres"
postgresql_initdb_flags="--encoding=utf-8 --locale=tr_TR.UTF-8"
Bu ayarlarla PostgreSQL sistem açılışında çalışacak; ayrıca dil ayarları da ön tanımlı olarak Türkçe olacaktır.
Tüm ayarlamaları yaptığımıza göre artık PostgreSQL Veritabanı Kümesini oluşturabiliriz. Bunun için aşağıdaki komutu çalıştırıyoruz.
# /usr/local/etc/rc.d/postgresql initdb
Bu veritabanı sistemine ait olan dosyaların sahibi "pgsql" kullanıcısı olacaktır.
Bu kullanıcı aynı zamanda sunucu sürecinin de sahibi olmalıdır.
The database cluster will be initialized with locale "tr_TR.UTF-8".
Öntanımlı metin arama yapılandırması "turkish" olarak ayarlanacak.
/usr/local/pgsql/data dizini yaratılıyor ... tamam
alt dizinler oluşturuluyor ... tamam
ön tanımlı max_connections seçiliyor ... 100
öntanımlı shared_buffers değeri seçiliyor ... 32MB
yapılandırma dosyaları yaratılıyor ... tamam
/usr/local/pgsql/data/base/1 içinde template1 veritabanı yaratılıyor.tamam
pg_authid ilklendiriliyor ... tamam
bağlılıklar ilklendiriliyor ... tamam
sistem viewları yaratılıyor ... tamam
sistem nesnelerinin açıklamaları yükleniyor ... tamam
dönüşümler yükleniyor ...tamam
dönüşümler yükleniyor ... tamam
sözlükler oluşturuluyor ... tamam
gömülü nesnelerdeki izinler ayarlanıyor ... tamam
information schema yaratılıyor ... tamam
PL/pgSQL sunucu tarafı dili yükleniyor ... tamam
template1 veritabanı vakumlanıyor ... tamam
template1 template0'a kopyalanıyor ... tamam
template1, postgres'e kopyalanıyor ... tamam
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
İşlem başarılı. Veritabanı sunucusunu:
/usr/local/bin/postgres -D /usr/local/pgsql/data
ile ya da
/usr/local/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
ile başlatabilirsiniz.
böyle bir çıktı alıyorsanız bu zamana kadar ki yaptığınız işlemler başarılı olmuş demektir.
Bu kullanıcı aynı zamanda sunucu sürecinin de sahibi olmalıdır.
The database cluster will be initialized with locale "tr_TR.UTF-8".
Öntanımlı metin arama yapılandırması "turkish" olarak ayarlanacak.
/usr/local/pgsql/data dizini yaratılıyor ... tamam
alt dizinler oluşturuluyor ... tamam
ön tanımlı max_connections seçiliyor ... 100
öntanımlı shared_buffers değeri seçiliyor ... 32MB
yapılandırma dosyaları yaratılıyor ... tamam
/usr/local/pgsql/data/base/1 içinde template1 veritabanı yaratılıyor.tamam
pg_authid ilklendiriliyor ... tamam
bağlılıklar ilklendiriliyor ... tamam
sistem viewları yaratılıyor ... tamam
sistem nesnelerinin açıklamaları yükleniyor ... tamam
dönüşümler yükleniyor ...tamam
dönüşümler yükleniyor ... tamam
sözlükler oluşturuluyor ... tamam
gömülü nesnelerdeki izinler ayarlanıyor ... tamam
information schema yaratılıyor ... tamam
PL/pgSQL sunucu tarafı dili yükleniyor ... tamam
template1 veritabanı vakumlanıyor ... tamam
template1 template0'a kopyalanıyor ... tamam
template1, postgres'e kopyalanıyor ... tamam
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
İşlem başarılı. Veritabanı sunucusunu:
/usr/local/bin/postgres -D /usr/local/pgsql/data
ile ya da
/usr/local/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
ile başlatabilirsiniz.
böyle bir çıktı alıyorsanız bu zamana kadar ki yaptığınız işlemler başarılı olmuş demektir.
İPUCU: Herhangi bir nedenle oluşturduğunuz veritabanı kümesini kaldırmak ve yeniden oluşturmak isterseniz "/usr/local/pgsql/data" klasörünün içini boşaltın veya klasörü tamamen silin. Yeniden oluşturmak için de
/usr/local/etc/rc.d/postgresql initdb
komutunu yeniden vermeniz yeterlidir.
Artık sunucumuzu çalıştırabiliriz.
# service postgresql start
Veritabanımızı çalıştırdık. Çalışma durumuna bakalım.
# su - pgsql
komutu ile pgsql kullanıcısına geçiyoruz. Sırasıyla aşağıdaki komutlarla çalışma durumuna bakalım.
pg_ctl: server is running (PID: 5673)
/usr/local/bin/postgres "-D" "/usr/local/pgsql/data"
"server is running" güzel :) Sunucumuz çalışıyor.
$ psql -l
komutu ile mevcut veritabanlarını listeleyelim. Gördüğünüz üzere Türkçe dil desteğiyle temel veritabanları oluşturulmuş.
İlk olarak Tükçe dil destekli test veritabanını kullanacak bir Türk kullanıcı oluşturalım.
$ createuser -P turkish_user
Enter password for new role:
Enter it again:
Enter password for new role:
Enter it again:
Bir test veritabanı oluşturuyoruz. Veritabanı adı db_turkey, kullanıcısı turkish_user olacak şekilde komutu vererek oluşturdum.
$ createdb db_turkey -O turkish_user
Ekran görüntüsünde de gördüğünüz üzere ön tanımlı olarak ayarladığımız Türkçe dil ayarlarına göre veritabanımız oluştu. Peki bir de Güney Koreli bir arkadaşımız için kendi diline uygun bir veritabanı oluşturup kullanımına sunalım.
$ createuser -P korean_user
Enter password for new role:
Enter it again:
Enter password for new role:
Enter it again:
NOT: Eğer Veritabanı Kümeleme Sisteminin ön tanımlı dil kodlamasından farklı bir dilde veritabanı oluşturmaya çalıştığınızda aşağıdakine benzer bir uyarı ile karşılaşabilirsiniz. Bunun çözümü ya aynı dil seçeneklerini kullanacaksınız ya da template0 veritabanı şablonunu kullanacaksınız.
$ createdb -E UTF8 --locale=ko_KR.UTF-8 -O korean_user db_korean
createdb: database creation failed: ERROR: new collation (ko_KR.UTF-8) is incompatible with the collation of the template database (tr_TR.UTF-8)
HINT: Use the same collation as in the template database, or use template0 as template.
createdb: database creation failed: ERROR: new collation (ko_KR.UTF-8) is incompatible with the collation of the template database (tr_TR.UTF-8)
HINT: Use the same collation as in the template database, or use template0 as template.
Biz template0'ı kullanacarak farklı dil destekli veritabanımızı oluşturuyoruz.
$ createdb -E UTF8 --locale=ko_KR.UTF-8 -O korean_user --template=template0 db_korean
Ekran çıktısında da gördüğünüz üzere Kore dili destekli bir başka veritabanını da eklemiş olduk.
PostgreSQL Veritabanı Kümesi ön tanımlı dilinin Türkçe olmadığı bir sunucuda Türkçe dil destekli bir veritabanı oluşturmak istersek
$ createdb -E UTF8 --locale=tr_TR.UTF-8 -O kullanici_adi --template=template0 veritabani_adi
PostgreSQL Veritabanı Kümesi ön tanımlı dilinin Türkçe olmadığı bir sunucuda Türkçe dil destekli bir veritabanı oluşturmak istersek
$ createdb -E UTF8 --locale=tr_TR.UTF-8 -O kullanici_adi --template=template0 veritabani_adi
Veritabanına Uzak Bağlantı
Şu anda tüm veritabanlarımıza erişim yerel bağlantı üzerinden (localhost) problemsizce sağlanabilmekte. Ancak gerektiğinde hem yönetim amaçlı hemde diğer sunucuların ve uygulamaların kullanımı için uzaktan erişime izin vermemizi gerektirecek durumlarla karşılaşacağız. Bu bölümde uzaktan erişim ve yetkilendirme nasıl yapılır onlara bir bakalım.
Öncelikle yerel bağlantı harici sunucumuzun IP adresi üzerinden gelen bağlantılara da izin vermemiz gerekiyor. Bunun için /usr/local/pgsq/data/postgresql.conf dosyamızı açıp aşağıdaki satırı düzenliyoruz.
listen_addresses = 'localhost, 190.168.2.233'
veya sunucuda bulunan tüm ağ bağlantıları üzerinden bağlanılabilsin demek istiyorsanız
listen_addresses = '*'
olarak bu satırı düzenlemeniz yeterlidir.
Jail içerisine kurulum yaptıysanız listen_adress değerini Jail IP adresi yapınız.
Örn:
Örn:
listen_addresses = '190.168.2.233'
değişikliklerin geçerli olması için PostgreSQL'i yeniden başlatın.
# service postgresql restart
Kimlik Doğrulama ve Yetkilendirme Ayarları
PostgreSQL birden fazla farklı yöntemle erişim izinlerini yönetmenize imkan sağlayacak özelliklerdedir. (LDAP, RADIUS, Kerberos vs.) İhtiyaçlara göre farklı bir yöntem kullanılabilir. Bu çalışmamda yaygın olarak tercih edilen ve kullanılan şifre tabanlı kimlik doğrulamasını sizlere anlatacağım.
Şifre tabanlı kimlik doğrulamasında iki çeşit yöntem kullanılabilir bunlar: md5 ve password . Bu iki yöntem arasındaki fark, basit anlatımla, bağlantı üzerinden gönderilen şifre bilgisi birinde MD5-hashed olarak diğerinde ise düz metin olarak gönderilmektedir. Parolanın düz metin olarak gönderilmesi güvenlik açısından sakıncalı olduğu için md5 yöntemini kullanmanızı öneririm. Ayrıca yazının ilerleyen bölümlerinde anlatacağım SSL ile bağlantı güvenliğinin sağlanmasıyla beraber md5 kullanımı bağlantı güvenliği açısından olukça faydalı olacaktır.
PostgreSQL'in kimlik doğrulama ve bağlantı yetki işlemlerini /usr/local/pgqsl/data/pg_hba.conf dosyası içerisinden yapıyoruz. Bu dosya ile kullanıcının hangi veritabanına bağlanabileceği, erişim metodları gibi güvenliği doğrudan ilgilendiren ayarları kontrol ediyoruz.
Dosya biçimini inceleyecek olursak
# TYPE DATABASE USER ADDRESS METHOD
local all all trust
host all all 127.0.0.1/32 trust
host db_turkey turkish_user 0.0.0.0/0 md5
yukarıdaki gibi görünümde bir dosya ile karşı karşıyasınız demektir. Detaylıca inceleyelim.
TYPE Alanı
Bu kısım altında bağlantı tipimizi belirtiyoruz. Kullanabileceğimiz tipler:
local UNIX-domain soket yerel bağlantıdan bağlanmak için. Bu seçenek kullanılırsa; sadece UNIX-domain soket üzerinden gelen bağlantılara izin verilir.
host Hem şifresiz hem de SSL şifrelemeli TCP/IP soketlerinden bağlanmaya izin verir.
hostssl Sadece SSL şifrelemeli TCP/IP soketlerinden bağlanmaya izin verir.
hostnossl Sadece şifresiz olarak TCP/IP soketlerinden bağlanmaya izin verir.
Yaygın olarak host kullanılmaktadır. Ancak host kullanılsa bile mutlaka SSL şifrelemeli bağlantı kullanılması güvenlik nedeniyle önemlidir. Yazının ilerleyen bölümlerinde bu konuya değinilecektir.
Örnek bir yapılandırma.
# TYPE DATABASE USER ADDRESS METHOD
local all all trust
host all all 127.0.0.1/32 trust
hostssl db_turkey turkish_user 0.0.0.0/0 md5
hostnossl db_korean korean_user 127.0.0.1/32 md5
DATABASE Alanı
Bu kısım altında hangi veritabanlarına bağlanılacağı, aynılama (replication) gibi işlemler belirtilir. Kullanabileceğimiz tipler:
all Tüm veritabanlarına erişilebileceğini belirten değerdir.
sameuser Kullanıcı adı ile veritabanı adının eşleştiği durumda erişilebileceğini belirten değerdir.
samerole Bir rol'e dahil olan kullanıcının rol adı ile veritabanı adının eşleştiği durumda erişilebileceğini belirten değerdir.
veritabanı adı Erişilmesi istenen bir veritabanı adı burada belirtilir. Belirli sayıda veritabanına erişim için veritabanı adları arasında virgül (,) kullanılarak belirtilebilir.
@dosya adı Veritabanı adlarını içeren ayrı bir dosyayı başında @ işareti ile yazılıp birden fazla veritabanına erişim yetkilerini belirleyebilirsiniz. Veritabanı adlarını satır satır bir dosyanın içine yazın; uzantısız. Bu dosyayı da PostgreSQL Veritabanı Kümesi klasörü (/usr/local/pgsql/data) içine bırakınız. Aşağıdaki örnekte göreceğiniz gibi bu dosyanın başına @ işareti koyarak belirtiniz.
Örnek yapılandırma.
# TYPE DATABASE USER ADDRESS METHOD
local sameuser all trust
hostssl db_korean korean_user 127.0.0.1/32 md5
host db_turkey,db_korean turkish_user 0.0.0.0/0 md5
host replication pgsql 192.168.2.2/24 md5
local @veritabanlari all 192.168.2.7/32 md5
USER Alanı
Bu kısım altında da veritabanlarını kullanacak olan kullanıcıların belirtildiği yerdir.
all Tüm kullanıcıları belirtir.
+ işareti ile doğrudan veya dolaylı olarak bu kullanıcı rolü ile eşleşen herhangi bir rolü belirtir. Eğer + kullanılmadan rol ismi yazılırsa sadece o rol'e dahil olan kullanıcılar belirtilir.
@dosya adi Kullanıcı adlarını içeren ayrı bir dosyayı başında @ işareti ile yazılıp birden fazla veritabanına erişim yetkilerini belirleyebilirsiniz. Kullanıcı adlarını satır satır bir dosyanın içine yazın; uzantısız. Bu dosyayı da PostgreSQL Veritabanı Kümesi klasörü (/usr/local/pgsql/data) içine bırakınız. Aşağıdaki örnekte göreceğiniz gibi bu dosyanın başına @ işareti koyarak belirtiniz.
# TYPE DATABASE USER ADDRESS METHOD
local sameuser all trust
hostssl db_korean @kullanicilar 127.0.0.1/32 md5
local @veritabanlari all 192.168.2.7/32 md5
USER Alanı
Bu kısım altında da veritabanlarını kullanacak olan kullanıcıların belirtildiği yerdir.
all Tüm kullanıcıları belirtir.
+ işareti ile doğrudan veya dolaylı olarak bu kullanıcı rolü ile eşleşen herhangi bir rolü belirtir. Eğer + kullanılmadan rol ismi yazılırsa sadece o rol'e dahil olan kullanıcılar belirtilir.
@dosya adi Kullanıcı adlarını içeren ayrı bir dosyayı başında @ işareti ile yazılıp birden fazla veritabanına erişim yetkilerini belirleyebilirsiniz. Kullanıcı adlarını satır satır bir dosyanın içine yazın; uzantısız. Bu dosyayı da PostgreSQL Veritabanı Kümesi klasörü (/usr/local/pgsql/data) içine bırakınız. Aşağıdaki örnekte göreceğiniz gibi bu dosyanın başına @ işareti koyarak belirtiniz.
# TYPE DATABASE USER ADDRESS METHOD
local sameuser all trust
hostssl db_korean @kullanicilar 127.0.0.1/32 md5
host db_turkish +admins 0.0.0.0/0 md5
İsterseniz bunları virgül (,) ile ayırarak birleştirebilirsiniz. Örnek verecek olursak @kullanicilar dosyasında adları yazanlarla beraber admins rolü içindeki kullanıcılar db_turkish veritabanını kullanabilecekler.
# TYPE DATABASE USER ADDRESS METHOD
hostssl db_turkish @kullanicilar,+admins 127.0.0.1/32 md5
ADDRESS Alanı
Bu kısımda da erişim izni verilecek olan istemcinin adres kaydının belirtildiği yerdir. Bu alanda alan adı, IP veya IP aralığı, alt ağ maskesi ve bazı anahtar kelimeler kullanılmaktadır.
IP adresi Bu alanda hem IPv4 hem de IPv6 adresleri kullanılabilmektedir. Bu alanla sadece host, hostssl ve hostnossl tipleri kullanılabilmektedir. Örneklerle inceleyecek olursak
0.0.0.0/0 Tüm IPv4 adreslerinden erişimi,
::/0 Tüm IPv6 adreslerinden erişimi,
192.168.2.2/32 sadece bu ip adresli istemcinin erişebileceğini,
192.168.2.0/24 sadece bu ip bloğundaki istemcilerin erişebileceğini,
all ile tüm IP adreslerinden erişilebileceğini,
. bir alan adının kapsamındaki IP adreslerinin çözümlenmesiyle erişilebileceğini
belirtir. Yalnız burada dikkat edilmesi gereken alan adı çözümlemesinin hızlı yapılabilir olmasıdır. Bunun için en az iki adet hızlı önbellek DNS sunucusunun sunucuda kullanılması doğru bir karar olur.
Örnek bir yapılandırma dosyası
# TYPE DATABASE USER ADDRESS METHOD
local all all trust
hostssl db_korean @kullanicilar 127.0.0.1/32 md5
host db_turkish +admins 0.0.0.0/0 md5
host db_deneme kullanici .deneme.com md5
host db_deneme1 kullanici1 192.168.2.2/32 md5
IP-ADDRESS ve IP-MASK Alanı
İstenirse IP adresi ve Alt Ağ Maskesi ayrı olarakta yazılabilir. Aşağıdaki buna bir örnektir. Sadece host, hostssl ve hostnossl tipleri kullanılabilmektedir.
# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
hostssl db_turkish kullanici 192.168.2.2 255.255.255.0 md5
METHOD Alanı
Bir bağlantının bir kayıtla eşleşmesi sonrası nasıl bir kimlik doğrulaması yönteminin kullanılacağının belirtildiği bölümdür. Yaygın olarak kullanılan seçenekler:
trust Koşulsuz olarak bağlantı sağlar. Bu yöntem ile PostgreSQL veritabanı sunucusuna bağlanmak isteyen herkes bir şifre ya da başka bir kimlik doğrulamasına gerek kalmadan, istedikleri herhangi bir PostgreSQL kullanıcısı olarak oturum açabilir.
reject Koşulsuz olarak bağlantıyı reddeder. Bu seçenek özellikle bir grup içindeki bir istemciyi filtrelemek için uygundur. Önce bloklanmak istenen istemci belirtilir sonrasında izin verilen istemci bloğu belirtilerek erişim yetkilendirmesi yapılır.
md5 İstemci kimlik doğrulaması için bir MD5 şifreli parolayı zorunlu tutar.
password İstemci kimlik doğrulaması için bir düz metin parolayı zorunlu tutar. Parola ağda şifrelemesiz olarak aktarılacağı için güvenlimeyen bağlantılarda kullanılmaması önerilir.
Diğer METOD seçenekleriyle (ldap, radius, krb5 vs.) ilgili bilgiye PostgreSQL Belgelerinden ulaşabilirsiniz. (Bknz. 1)
Bu bilgileri kurduğumuz sistemimize uyguladığımızda aşağıdakine benzer bir yetkilendirme ile veritabanlarına bağlantı sağladım.
# TYPE DATABASE USER ADDRESS METHOD
local all all trust
# IPv4 bağlantılar için:
host all all 127.0.0.1/32 trust
host @veritabanlari turkish_user 0.0.0.0/0 md5
hostssl db_korean korean_user 190.168.2.8/32 md5
Özetlersek: 1. ve 2. satırda yerel ağ üzerinden tüm kullanıcılarla güvenli bir şekilde tüm veritabanlarına bağlanabiliyorum. 3. satırda veritabanlari dosyası içerisinde belirttiğim veritabanlarına herhangi bir bağlantı üzerinden turkish_user adlı kullanıcı ile ister şifresiz isterse SSL şifrelemeli bağlantı sağlayabiliyorum. 4. satırda ie db_korean veritabanına korean_user ile sadece SSL güvenli bağlantı ile 190.168.2.8 IP'li bir bilgisayardan bağlanabiliyorum. Farklı IP'li bir bilgisayardan bağlanamıyorum.
pg_hba.conf doyasında yaptığımız değişikliklerden sonra PostgreSQL Veritabanı'nı yeniden başlatmayı unutmayınız.
Erişim ayarlarımızı yaptığımıza göre bağlantı testimizi yapalım.
# su - pgsql
komutu ile pgsql kullanıcısına giriyoruz. Ardından veritabanına kullanıcı adımızı, veritabanı adını ve sunucu IP'sini girerek bağlanmayı deniyoruz.
$ psql -U turkish_user -d db_turkey -h 190.168.2.233
Password for user turkish_user:
psql (9.2.4)
Type "help" for help.
db_turkey=>
Bağlantı sorunsuz sağlandıysa yukarıdaki gibi bir görünümle veritabanına bağlantı sağlamış olmanız gerekiyor.
İPUCU: Veritabanı konsolundan çıkmak için \q yazıp giriş (Enter) tuşuna basmanız yeterlidir.
Güvenli Bağlantı İçin SSL Yapılandırması
Daha öncede bahsettiğim gibi güvenlik bizim için çok önemli olduğundan veritabanına gelen bağlantıları şifreli olarak daha güvenli hale getirmek için SSL yapılandırmasını sunucumuza dahil edeceğiz. PostgreSQL güvenli SSL bağlantısını OpenSSL yazılımı desteği ile yapıyor. Bu nedenle ilk olarak sunucumuza OpenSSL paketini kuruyoruz.
# cd /usr/ports/security/openssl
# make install clean
Önümüze gelen standart yapılandırmayı Tamam diyerek kabul edip kurulumu tamamlayalım. Sonraki işlem OpenSSL'in çalışabilmesi için gerek duyduğu yapılandırma dosyasını oluşturmak. OpenSSL kurulumu ile gelen örnek dosyayı kullanarak bu işlemi de tamamlıyoruz.
# cp /usr/local/openssl/openssl.cnf.sample /usr/local/openssl/openssl.cnf
Mevcut ayarlar işimizi görecek düzeyde olduğu için openssl.cnf yapılandırma dosyasında herhangi bir değişiklik yapmıyoruz. Artık güvenlik sertifikamızı oluşturabiliriz.
Güvenlik sertifikamızı PostgreSQL Veritabanı Kümesi ana dizininde konumlandıracağımız için tüm işlemlerimizde bu klasörü hedef olarak kullanıyoruz.
İlk işlemimiz olan sertifika talep bölümünde doldurulması istenen kısımlarda dikkat etmeniz gereken Common Name (e.g. server FQDN or YOUR name) []: bölümüne sunucunuzun alan adını tam olarak giriniz. (örn: db.deneme.com gibi). Enter PEM pass phrase: kısmına gireceğiniz şifreyi unutmayınız bir yere not ediniz. İşlemlerin en sonunda sorulan A challenge password []: kısmını boş bırakarak işlemi tamamlayınız.
# openssl req -new -text -out /usr/local/pgsql/data/server.req
Generating a 1024 bit RSA private key
...........................................++++++
......................++++++
writing new private key to 'privkey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:TR
State or Province Name (full name) [Some-State]:Adana
Locality Name (eg, city) []:Seyhan
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Deneme A.Ş.
Organizational Unit Name (eg, section) []:Bilgi Islem
Common Name (e.g. server FQDN or YOUR name) []:pgdb.deneme.com
Email Address []:bilgiislem@deneme.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Sıradaki işlemimizde sertifika talebi oluşturma aşamasında girdiğimiz PEM şifresini kaldırma işlemini yapıyoruz. Eğer bunu kaldırmaz isek her yeniden başlatma işleminde bizde şifre girilmesi istenecektir. Şifreyi aşağıdaki komut ile kaldırıyoruz.
# openssl rsa -in privkey.pem -out server.key
Enter pass phrase for privkey.pem:
writing RSA key
# rm privkey.pem
Dosyamızı taşıyoruz ve dizine gidiyoruz
# mv server.key /usr/local/pgsql/data/
# cd /usr/local/pgsql/data/
Şimdi aşağıdaki komut ile sertifikamızı oluşturup gerekli dosya yetkilerini yapıyoruz.
# openssl req -x509 -in server.req -text -key server.key -out server.crt
# chmod og-rwx server.key
# chown pgsql:pgsql server.key server.crt server.req
SSL desteğini etkinleştirmek için /usr/local/pgsql/data/postgresql.conf dosyamızın içinden ssl = off satırını on yapıyoruz.
BİLGİLENDİRME: Sertifika oluşturma işlemlerinde server adını kullanarak yaptığımız dikkatinizi çekmiştir. postgresql.conf dosyası içerisinde güvenlik sertifikası ayarları bölümünde ön tanımlı olarak server adı ile herşey hazır olduğu için bu adı kullanmayı seçtik. Eğer başka bir ad ile sertifika oluşturursanız postgresql.conf dosyası içinden ilgili kısımlara bu dosya adlarını girmeniz gereklidir.
Son olarak eğer pg_hba.conf dosyasında sadece SSL üzerinden güvenli bağlantı sağlanmasını istediğimiz bir erişim politikamız var ise onu düzenliyoruz. hostssl ile bağlantının zorunlu olarak SSL üzerinden olmasını sağlıyoruz.
# TYPE DATABASE USER ADDRESS METHOD
local all all trust
# IPv4 bağlantılar için:
host all all 127.0.0.1/32 trust
hostssl @veritabanlari turkish_user 0.0.0.0/0 md5
host db_korean korean_user 190.168.2.8/32 md5
Değişikliklerin geçerli olması için PostgreSQL veritabanımızı yeniden başlatıyoruz.
# service postgresql restart
Test etmek içinbağlandığımızda SSL connection kısmının olması şifreli bağlantı sağladığımızı göstermektedir.
$ su - pgsql
$ psql -U turkish_user -d db_turkey -h 190.168.2.233
Password for user turkish_user:
psql (9.2.4)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
db_turkey=>
Artık istediğimiz gibi veritabanımızı güvenli kullanabiliriz.
PostgreSQL Görsel Yönetim Araçları
Konsoldan komutla veritabanını yönetmek her kullanıcı için tercih edilen bir durum olmayabilir. Bu nedenle veritabanına bağlanıp onu yönetebileceğimiz bazı araçlar kullanmak isteyebiliriz. Bu araçlardan en yaygın olanı pgAdmin III'dür.
pgAdmin III'ü BSD ve Linux dağıtımlarının tamamının paket depolarında bulabilirsiniz. Basitçe kullanımını aşağıdaki görsellerden inceleyebilirsiniz.
Kurulum sonrası ilk çalıştırmada sizi karşılayan ekranı görüyorsunuz.
Yeni bir veritabanı bağlantısı eklemek için elektrik fişi şeklindeki düğmeye basmanız yeterli. Önünüze aşağıdaki gibi bir ekran gelecek.
Name: Bağlantıya bir isim veriyorsunuz. İstediğinizi verebilirsiniz.
Host: Sunucu IP'si
Port: Bağlantı Portu
Maintenance DB : Birden çok veritabanına yetkili iseniz ilk bağlanılmasını istediğiniz veritabanı adını buraya yazıyorsunuz. Eğer tek veritabanına yetkili iseniz onun adını girebilirsiniz.
Username: Kullanıcı adı
Password: Parolanız
Bu bilgileri girdikten sonra bağlantıda güvenli bağlantıyı kullanmayı zorunlu kılmak için SSL sekmesine tıklıyoruz ve önünüze aşağıdaki gibi bir ekran geliyor.
Diğer PostgreSQL araçları için aşağıdaki bağa bakabilirsiniz.
http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools
Sonuç
Standart özellikler de PostgreSQL veritabanı sunucumuzu kurduk. Güvenlik açısından istenirse çalışma portu değiştirilip veritabanına erişim yapılandırması daha da güçlü bir hale getirilebilir. İlerleyen günlerde yedekleme, bakım ve diğer konularla ilgili deneyimlerimi de inşallah burada paylaşacağım. Umarım faydalı bir yazı olmuştur.
İyi çalışmalar.
Hasan Alp İNAN
host db_deneme kullanici .deneme.com md5
host db_deneme1 kullanici1 192.168.2.2/32 md5
IP-ADDRESS ve IP-MASK Alanı
İstenirse IP adresi ve Alt Ağ Maskesi ayrı olarakta yazılabilir. Aşağıdaki buna bir örnektir. Sadece host, hostssl ve hostnossl tipleri kullanılabilmektedir.
# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
hostssl db_turkish kullanici 192.168.2.2 255.255.255.0 md5
METHOD Alanı
Bir bağlantının bir kayıtla eşleşmesi sonrası nasıl bir kimlik doğrulaması yönteminin kullanılacağının belirtildiği bölümdür. Yaygın olarak kullanılan seçenekler:
trust Koşulsuz olarak bağlantı sağlar. Bu yöntem ile PostgreSQL veritabanı sunucusuna bağlanmak isteyen herkes bir şifre ya da başka bir kimlik doğrulamasına gerek kalmadan, istedikleri herhangi bir PostgreSQL kullanıcısı olarak oturum açabilir.
reject Koşulsuz olarak bağlantıyı reddeder. Bu seçenek özellikle bir grup içindeki bir istemciyi filtrelemek için uygundur. Önce bloklanmak istenen istemci belirtilir sonrasında izin verilen istemci bloğu belirtilerek erişim yetkilendirmesi yapılır.
md5 İstemci kimlik doğrulaması için bir MD5 şifreli parolayı zorunlu tutar.
password İstemci kimlik doğrulaması için bir düz metin parolayı zorunlu tutar. Parola ağda şifrelemesiz olarak aktarılacağı için güvenlimeyen bağlantılarda kullanılmaması önerilir.
Diğer METOD seçenekleriyle (ldap, radius, krb5 vs.) ilgili bilgiye PostgreSQL Belgelerinden ulaşabilirsiniz. (Bknz. 1)
Bu bilgileri kurduğumuz sistemimize uyguladığımızda aşağıdakine benzer bir yetkilendirme ile veritabanlarına bağlantı sağladım.
# TYPE DATABASE USER ADDRESS METHOD
local all all trust
# IPv4 bağlantılar için:
host all all 127.0.0.1/32 trust
host @veritabanlari turkish_user 0.0.0.0/0 md5
hostssl db_korean korean_user 190.168.2.8/32 md5
Özetlersek: 1. ve 2. satırda yerel ağ üzerinden tüm kullanıcılarla güvenli bir şekilde tüm veritabanlarına bağlanabiliyorum. 3. satırda veritabanlari dosyası içerisinde belirttiğim veritabanlarına herhangi bir bağlantı üzerinden turkish_user adlı kullanıcı ile ister şifresiz isterse SSL şifrelemeli bağlantı sağlayabiliyorum. 4. satırda ie db_korean veritabanına korean_user ile sadece SSL güvenli bağlantı ile 190.168.2.8 IP'li bir bilgisayardan bağlanabiliyorum. Farklı IP'li bir bilgisayardan bağlanamıyorum.
pg_hba.conf doyasında yaptığımız değişikliklerden sonra PostgreSQL Veritabanı'nı yeniden başlatmayı unutmayınız.
Erişim ayarlarımızı yaptığımıza göre bağlantı testimizi yapalım.
# su - pgsql
komutu ile pgsql kullanıcısına giriyoruz. Ardından veritabanına kullanıcı adımızı, veritabanı adını ve sunucu IP'sini girerek bağlanmayı deniyoruz.
$ psql -U turkish_user -d db_turkey -h 190.168.2.233
Password for user turkish_user:
psql (9.2.4)
Type "help" for help.
db_turkey=>
Bağlantı sorunsuz sağlandıysa yukarıdaki gibi bir görünümle veritabanına bağlantı sağlamış olmanız gerekiyor.
İPUCU: Veritabanı konsolundan çıkmak için \q yazıp giriş (Enter) tuşuna basmanız yeterlidir.
Güvenli Bağlantı İçin SSL Yapılandırması
Daha öncede bahsettiğim gibi güvenlik bizim için çok önemli olduğundan veritabanına gelen bağlantıları şifreli olarak daha güvenli hale getirmek için SSL yapılandırmasını sunucumuza dahil edeceğiz. PostgreSQL güvenli SSL bağlantısını OpenSSL yazılımı desteği ile yapıyor. Bu nedenle ilk olarak sunucumuza OpenSSL paketini kuruyoruz.
# cd /usr/ports/security/openssl
# make install clean
Önümüze gelen standart yapılandırmayı Tamam diyerek kabul edip kurulumu tamamlayalım. Sonraki işlem OpenSSL'in çalışabilmesi için gerek duyduğu yapılandırma dosyasını oluşturmak. OpenSSL kurulumu ile gelen örnek dosyayı kullanarak bu işlemi de tamamlıyoruz.
# cp /usr/local/openssl/openssl.cnf.sample /usr/local/openssl/openssl.cnf
Mevcut ayarlar işimizi görecek düzeyde olduğu için openssl.cnf yapılandırma dosyasında herhangi bir değişiklik yapmıyoruz. Artık güvenlik sertifikamızı oluşturabiliriz.
Güvenlik sertifikamızı PostgreSQL Veritabanı Kümesi ana dizininde konumlandıracağımız için tüm işlemlerimizde bu klasörü hedef olarak kullanıyoruz.
İlk işlemimiz olan sertifika talep bölümünde doldurulması istenen kısımlarda dikkat etmeniz gereken Common Name (e.g. server FQDN or YOUR name) []: bölümüne sunucunuzun alan adını tam olarak giriniz. (örn: db.deneme.com gibi). Enter PEM pass phrase: kısmına gireceğiniz şifreyi unutmayınız bir yere not ediniz. İşlemlerin en sonunda sorulan A challenge password []: kısmını boş bırakarak işlemi tamamlayınız.
# openssl req -new -text -out /usr/local/pgsql/data/server.req
Generating a 1024 bit RSA private key
...........................................++++++
......................++++++
writing new private key to 'privkey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:TR
State or Province Name (full name) [Some-State]:Adana
Locality Name (eg, city) []:Seyhan
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Deneme A.Ş.
Organizational Unit Name (eg, section) []:Bilgi Islem
Common Name (e.g. server FQDN or YOUR name) []:pgdb.deneme.com
Email Address []:bilgiislem@deneme.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Sıradaki işlemimizde sertifika talebi oluşturma aşamasında girdiğimiz PEM şifresini kaldırma işlemini yapıyoruz. Eğer bunu kaldırmaz isek her yeniden başlatma işleminde bizde şifre girilmesi istenecektir. Şifreyi aşağıdaki komut ile kaldırıyoruz.
# openssl rsa -in privkey.pem -out server.key
Enter pass phrase for privkey.pem:
writing RSA key
# rm privkey.pem
Dosyamızı taşıyoruz ve dizine gidiyoruz
# mv server.key /usr/local/pgsql/data/
# cd /usr/local/pgsql/data/
Şimdi aşağıdaki komut ile sertifikamızı oluşturup gerekli dosya yetkilerini yapıyoruz.
# openssl req -x509 -in server.req -text -key server.key -out server.crt
# chmod og-rwx server.key
# chown pgsql:pgsql server.key server.crt server.req
SSL desteğini etkinleştirmek için /usr/local/pgsql/data/postgresql.conf dosyamızın içinden ssl = off satırını on yapıyoruz.
BİLGİLENDİRME: Sertifika oluşturma işlemlerinde server adını kullanarak yaptığımız dikkatinizi çekmiştir. postgresql.conf dosyası içerisinde güvenlik sertifikası ayarları bölümünde ön tanımlı olarak server adı ile herşey hazır olduğu için bu adı kullanmayı seçtik. Eğer başka bir ad ile sertifika oluşturursanız postgresql.conf dosyası içinden ilgili kısımlara bu dosya adlarını girmeniz gereklidir.
Son olarak eğer pg_hba.conf dosyasında sadece SSL üzerinden güvenli bağlantı sağlanmasını istediğimiz bir erişim politikamız var ise onu düzenliyoruz. hostssl ile bağlantının zorunlu olarak SSL üzerinden olmasını sağlıyoruz.
# TYPE DATABASE USER ADDRESS METHOD
local all all trust
# IPv4 bağlantılar için:
host all all 127.0.0.1/32 trust
hostssl @veritabanlari turkish_user 0.0.0.0/0 md5
host db_korean korean_user 190.168.2.8/32 md5
Değişikliklerin geçerli olması için PostgreSQL veritabanımızı yeniden başlatıyoruz.
# service postgresql restart
Test etmek içinbağlandığımızda SSL connection kısmının olması şifreli bağlantı sağladığımızı göstermektedir.
$ su - pgsql
$ psql -U turkish_user -d db_turkey -h 190.168.2.233
Password for user turkish_user:
psql (9.2.4)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
db_turkey=>
Artık istediğimiz gibi veritabanımızı güvenli kullanabiliriz.
PostgreSQL Görsel Yönetim Araçları
Konsoldan komutla veritabanını yönetmek her kullanıcı için tercih edilen bir durum olmayabilir. Bu nedenle veritabanına bağlanıp onu yönetebileceğimiz bazı araçlar kullanmak isteyebiliriz. Bu araçlardan en yaygın olanı pgAdmin III'dür.
pgAdmin III'ü BSD ve Linux dağıtımlarının tamamının paket depolarında bulabilirsiniz. Basitçe kullanımını aşağıdaki görsellerden inceleyebilirsiniz.
Kurulum sonrası ilk çalıştırmada sizi karşılayan ekranı görüyorsunuz.
Yeni bir veritabanı bağlantısı eklemek için elektrik fişi şeklindeki düğmeye basmanız yeterli. Önünüze aşağıdaki gibi bir ekran gelecek.
Name: Bağlantıya bir isim veriyorsunuz. İstediğinizi verebilirsiniz.
Host: Sunucu IP'si
Port: Bağlantı Portu
Maintenance DB : Birden çok veritabanına yetkili iseniz ilk bağlanılmasını istediğiniz veritabanı adını buraya yazıyorsunuz. Eğer tek veritabanına yetkili iseniz onun adını girebilirsiniz.
Username: Kullanıcı adı
Password: Parolanız
Bu bilgileri girdikten sonra bağlantıda güvenli bağlantıyı kullanmayı zorunlu kılmak için SSL sekmesine tıklıyoruz ve önünüze aşağıdaki gibi bir ekran geliyor.
SSL kısmında require seçeneğini seçerek bağlantının mutlaka SSL üzerinden yapılmasını belirtiyorsunuz. Tamam düğmesine tıkladıktan sonra artık veritabanını kullanabilirsiniz.
Diğer PostgreSQL araçları için aşağıdaki bağa bakabilirsiniz.
http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools
Sonuç
Standart özellikler de PostgreSQL veritabanı sunucumuzu kurduk. Güvenlik açısından istenirse çalışma portu değiştirilip veritabanına erişim yapılandırması daha da güçlü bir hale getirilebilir. İlerleyen günlerde yedekleme, bakım ve diğer konularla ilgili deneyimlerimi de inşallah burada paylaşacağım. Umarım faydalı bir yazı olmuştur.
İyi çalışmalar.
Hasan Alp İNAN
Kaynaklar
- http://www.postgresql.org/docs/9.2/static/index.html
- https://www.wunki.org/posts/2011-05-07-solid-freebsd-server-postgresql-90.html
- http://jasonk2600.wordpress.com/2010/01/11/installing-postgresql-on-freebsd/
- http://www.postgresql.org/docs/9.2/static/kernel-resources.html
- http://serverfault.com/questions/64356/freebsd-performance-tuning-sysctls-loader-conf-kernel
- https://www.zabbix.org/wiki/How_to/configure_shared_memory
- http://people.freebsd.org/~girgen/postgresql-icu/README.html
Hiç yorum yok:
Yorum Gönder