Giriş
İlişkisel veritabanı yönetim sistemleri, birçok web sitesinin ve uygulamanın önemli bir bileşenidir. Bilgiyi saklamak, düzenlemek ve bilgiye erişmek için yapılandırılmış bir yol sağlarlar.
PostgreSQL, SQL sorgulama dilinin uygulanmasını sağlayan ilişkisel bir veritabanı yönetim sistemidir. Birçok küçük ve büyük proje için popüler bir seçimdir ve standartlara uygun olma avantajı vardır ve güvenilir bir işlem ve okuma kilidi olmayan eşzamanlılık gibi birçok gelişmiş özelliğe sahiptir.
Burada PostgreSQL’i Debian 9 da nasıl yükleyeceğimizi göstereceğiz ve bunu kullanmanın bazı temel yollarını gözden geçireceğiz.
Kurulum
Debian’ın varsayılan depoları Postgres paketleri içerir, böylece apt paket sistemini kullanarak sorunsuz bir şekilde kurabiliriz. Biz burada son sürüm olan PostgreSQL 11’u yükleyeceğiz.
/etc/apt/sources.list.d/pgdg.list dosyasını oluşturup deb paketi için aşağıdaki satırı ekliyoruz:
sudo echo 'deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main' >> /etc/apt/sources.list.d/pgdg.list
Apt-get paket yönetimi, indirilen paketleri doğrulamak için ortak anahtar şifrelemesi kullanır. Yüklemek istediğimiz paketin uygunluğunu kontrol ediyoruz ve paket listesini güncelliyoruz:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
Postgresql-11 paketini yüklüyoruz(Ek olarak, yukarıda sözü geçen iki adımın uygulamasını aşağıda bulabilirsiniz):
Sunucu her açıldığında PostgreSQL’in de otomatik olarak başlaması için PostgreSQL i enable olarak ayarlıyoruz ve başlatıyoruz:
sudo systemctl enable postgresql@11-main
sudo systemctl start postgresql@11-main
PostgreSQL öntanımlı olarak 5432 portunda çalışır. PostgreSQL servisinin başladığından emin olmak için netstat komutu ile 5432 portunun “LISTEN” olup olmadığına bakarak yada systemctl ve ps komutlarıyla kontrol edelim:
PostgreSQL kurulumunu tamamladık.
Veritabanı Kullanımı ve Rol Kavramı
Varsayılan olarak Postgres, kimlik doğrulama ve yetkilendirmeye yardımcı olmak için “role” adı verilen bir kavram kullanır. Bu roller normal Unix tarzı kullanıcı hesaplarına benzer, ancak Postgres rolleri daha esnek bir yapıya sahiptir.
Varsayılan olarak Postgresql servisinin kurulumunda postgres rolü ile ilişkilendirilmiş bir Unix/Linux sistem kullanıcısı oluşturulur.PostgreSQL veritabanına bu kullanıcı hesabı aracılığıyla erişiyoruz:
sudo -i -u postgres
Veritabanına bağlanmak için bir arabirim olan psql’i kullanıyoruz. psql ile veritabanına bağlanırken söz dizimi şöyledir:
psql --host=localhost --dbname=postgres --username=postgres --port=5432
Bu şekilde bir kullanımla varsayılan olarak, postgres veritabanına postgres kullanıcısı ile localhost üzerinden bağlantı sağlanır.Öntanımlı olarak postgres kullanıcısı ile postgres veritabanına localhost’dan 5432 potruna bağlanacak şekilde ayarlıdır. Bu sebeble sadece sadece “psql” komutunu yazarak da veritabanına erişebiliriz.
Kurulumunu yapmış olduğumuz postgresql sürümünü kontrol etmek için:
Bu şekilde bir kullanımla varsayılan olarak, postgres veritabanına postgres kullanıcısı ile localhost üzerinden bağlantı sağlanır.
psql’den çıkış yapmak için:
postgres=#\q
PostgreSQL’de Kullanıcı ve Veritabanı Oluşturma
Unix/Linux sistemlerde veritabanına bağlanmadan sistemdeki postgres kullanıcı ile komut satırı üzerinden veritabanı işlemleri yapmaya yarayan bazı özel komutlar, kurulum sırasında otomatik olarak yüklenir. Bu komutlardan biri olan createuser komutu ile
veritabanı kullanıcı hesabı oluşturuyoruz:
createuser zekiye
psql ile veritabanına bağlanırken kullanıcı adı belirtilip bir veritabanı adı girilmediğinde; psql o kullanıcıyla aynı ada sahip bir veritabanına bağlanmaya çalışır.
psql --username=zekiye
dediğimde zekiye kullanıcısı ile bağlanabileceği zekiye adında bir veritabanı olmasını beklediğinden bu komutun başarılı olabilmesi için bir veritabanı oluşturalım. Komut satırı aracılığıyla bir veritabanı oluşturabiliriz:
createdb zekiye
PostgreSQL’de Tablo Oluşturma
Artık PostgreSQL veritabanı sistemine nasıl bağlanacağınızı bildiğinize göre, bazı temel görevleri nasıl tamamlayacağımıza başlayacağız.
Örnek olarak, öğrencilerin numara, ad ve soyadlarının tutulduğu bir table oluşturalım:
Tablonun başarıyla oluşturulduğundan emin olmak için “\d tablo_adı” komutunu kullanıyoruz.
Ek olarak, veritabanı listesi için \l ‘i kullanıyoruz.
PostgreSQL’e Erişim Ayarları
PostgreSQL, varsayılan olarak localhost üzerindeki bağlantıları dinler.Böylece veritabanını kurduğumuz sunucu üzerinden erişebiliriz. Veritabanına uzak bir bilgisayardan erişilebilir hale getirmek için /etc/postgresql/11/main dizini altındaki postgresql.conf dosyasında listen_addresses parametresini bularak uzak bilgisayarın IP’sini yazabiliriz.
vim /etc/postgresql/11/main/postgresql.conf
listen_addresses = '85.73.178.47'
Veritabanına tüm IP’lerden gelen isteklerin dinlenmesini istiyorsak parametreyi aşağıdaki gibi düzenliyoruz:
listen_addresses = '*'
vim editörü ile açtığımız postgresql.conf dosyası üzerinde yapılan değişiklikleri “:wq” komutu ile kaydedip çıkabiliriz.
Bu işlem sonunda yapılan ayarların aktif olabilmesi için postgresql servisinin kapatılıp açılması gerekir.
sudo systemctl restart postgresql@11-main
PostgreSQL Kimlik Doğrulama Ayarları
PostgreSQL erişim izinleri /etc/postgresql/11/main dizini altındaki pg_hba.conf dosyasında tanımlanır.
pg_hba.conf dosyasında erişim izinleri formatı aşağıdaki gibidir:
vim /etc/postgresql/11/main/pg_hba.conf
host all all 85.73.178.47/32 md5
Yukarıdaki satırı pg_hba.conf dosyasına eklediğimizde 85.73.178.47 IP’sinden gelen tüm kullanıcılar tüm veritabanlarına md5 parola doğrulamasından geçirilerek erişebilecekler.
Veritanabınına değişken bir IP’den gelen zekiye kullanıcısına erişim izni vermek için pg_hba.conf dosyasına ekleyeceğimiz satır aşağıdaki gibi olmalıdır:
host all zekiye 0.0.0.0/0 md5
vim editörü ile açtığımız pg_hba.conf dosyası üzerinde yapılan değişiklikleri “:wq” komutu ile kaydedip çıkabiliriz.
Bu dosyada yapılan değişikliklerin etkinleşmesi için “pg_reload_conf” komutu kullanılır. Bu SQL cümlesi ile PostgreSQL servisine reload işlemi yapılmış olur.
Debian 9’da Güvenlik Duvarı Ayarları
iptables, bir sistem yöneticisinin Linux çekirdeği güvenlik duvarı tarafından sağlanan tabloları ve depoladığı zincirleri ve kuralları yapılandırmasına izin veren bir kullanıcı alanı yardımcı programıdır.
PostgreSQL erişimleri için 5432 portunu güvenlik duvarında aşağıdaki komut ile açıyoruz ve yaptığımız değişikliği kaydediyoruz:
sudo iptables -A INPUT -p tcp --dport 5432 --jump ACCEPT
sudo iptables-save