Bloğa geri dön

PostgreSQL’de Roller Nasıl Kullanılır ve İzinler Nasıl Yönetilir

PostgreSQL’de Roller Nasıl Kullanılır ve İzinler Nasıl Yönetilir

PostgreSQL SQL kullanan açık kaynaklı bir DBMS’tir. VPS üzerinde uygulamaları yönetmek ve web verilerini barındırmak için kullanılan çok güçlü bir araçtır. Bu öğreticide, PostgreSQL’de izinleri nasıl yöneteceğinizi öğreneceksiniz. Uygulama rollerinize gerekli izinleri sağlamanıza yardımcı olacaktır. Bu öğreticiyi PostgreSQL kullanarak bir Ubuntu 18.04 bulut sunucusu üzerinde, CloudSigma’da gerçekleştireceğiz.

PostgreSQL Kurulumu

PostgreSQL’i indirip kurmak için aşağıdaki komutları çalıştırın:

Kurulum programı, altında işlem yapmak için varsayılan bir kullanıcı olan – “Postgres”i oluşturacaktır. Bu öğreticinin çoğunda bu kullanıcıyı kullanacağız. Bu komutla kullanıcıya giriş yapabilirsiniz:

PostgreSQL kurulduğuna göre, izinleri nasıl işlediğini öğreneceksiniz. Ayrıca Ubuntu üzerinde PostgreSQL kurulumu öğreticimizi kurulum sürecinin ayrıntılı ve adım adım kılavuzu için takip edebilirsiniz.

PostgreSQL İzin Kavramları

Postgres, izinleri “roller” kavramı aracılığıyla yönetir. Roller sayesinde kullanıcılar ve gruplar arasında bir ayrım yoktur. Roller, geleneksel Unix kullanıcı ve grup sisteminden daha esnektir. Örneğin, bir rol başka bir rolün üyesi gibi davranarak onun izinlerini devralabilir.

PostgreSQL’de Rolleri Görüntüleme

PostgreSQL’deki rolleri görüntülemek için öncelikle aşağıdaki komutu kullanarak komut satırına giriş yapmanız gerekir:

Ardından, rolleri görüntülemek için aşağıdakini çalıştırın:

show roles manage permissions in PostgreSQL

Şu an itibariyle, tüm ayrıcalıklara sahip yalnızca bir varsayılan rol bulunmaktadır.

PostgreSQL’de Roller Nasıl Oluşturulur

Postgres için rolleri komut satırından veya Postgres kabuğunun içinden oluşturabilirsiniz. Aşağıdaki iki yaklaşımı deneyebilirsiniz; bunun ardından PostgreSQL’de izinleri ve erişimleri nasıl yöneteceğinizi göreceksiniz.

PostgreSQL İçinden Roller Nasıl Oluşturulur

Rol oluşturmanın en kolay yolu Postgres komut satırının içindendir. Bunu aşağıdaki komutla yapabilirsiniz:

Oluşturulup oluşturulmadığını kontrol etmek için şu komutu çalıştırın:

create role from prompt

Yeni rolün giriş izni olmadığını belirtir. Bunu öğreticinin ilerleyen kısımlarında nasıl değiştireceğinizi öğreneceksiniz.

Komut Satırından Roller Nasıl Oluşturulur

Yukarıdaki yöntemin alternatifi, kullanıcıyı komut satırından oluşturmaktır. PostgreSQL komut satırından çıkmak için aşağıdakini yazın:

Aşağıdaki komutla “test” adında bir rol oluşturabilirsiniz:

Yukarıdaki komutu çalıştırdıktan sonra psql’e giriş yapın ve aşağıdaki komutları kullanarak rolleri listeleyin:

creating user from commandline

Bu şekilde oluşturulan kullanıcının aynı özniteliklere sahip olmadığını görebilirsiniz.

PostgreSQL’de Roller Nasıl Silinir

Aşağıdaki sözdizimini kullanarak PostgreSQL’deki rolleri kolayca silebilirsiniz:

Daha önce oluşturduğumuz demo rolünü şu komutu kullanarak silebilirsiniz:

drop role

Var olmayan bir rolü silmeye çalışırsak, sadece bir hata verecektir. Bunu görmek için aynı rolü tekrar silmeyi deneyebilirsiniz:

drop role fail

Rol mevcut olmadığında komutun hata vermemesini istiyorsanız, komuta ‘IF EXISTS’ ekleyebilirsiniz:

Bu komutla rolü silmeyi tekrar deneyebilirsiniz:

drop role if exists

Rol Oluşturulurken Ayrıcalıklar Nasıl Tanımlanır

Şu ana kadar rolleri oluşturdunuz ve sildiniz. Bu bölümde, değiştirilmiş izinlere sahip roller oluşturacaksınız. Bunu, create komutuyla rolün izinlerini belirterek yapabilirsiniz:

Bunun seçeneklerini görmek için bu komutu kullanarak yardımı açabilirsiniz:

help create user

Giriş izinlerine sahip bir rol oluşturmak istiyorsanız, komutu şu şekilde oluşturabilirsiniz:

create role with login manage permissions in PostgreSQL

Daha önce gördüğümüz gibi, oturum açma iznine sahip roller oluşturmak istiyorsanız aşağıdaki komutu da kullanabilirsiniz:

İki komut arasındaki tek fark, ‘CREATE USER’ komutunun role varsayılan olarak oturum açma izni vermesidir.

PostgreSQL'de Rollerin Yetkileri Nasıl Değiştirilir

Şimdiye kadar, kullanıcıyı oluştururken nasıl izin verileceğini denediniz. Bu bölümde, önceden oluşturulmuş kullanıcıların izinlerini değiştireceksiniz. Alter komutunun sözdizimi şöyledir:

Örneğin, isterseniz bu komutla demo_role rolünün oturum açma izinlerini ‘oturum açma’ olarak değiştirebilirsiniz:

alter nologin

Kullanıcının tekrar oturum açmasına izin vermek için aşağıdaki komutla izinleri değiştirebilirsiniz:

PostgreSQL'de Farklı Bir Kullanıcı Olarak Nasıl Oturum Açılır

PostgreSQL, varsayılan olarak yalnızca kullanıcı adınız sistem kullanıcı adıyla eşleşiyorsa yerel olarak oturum açmanıza izin verir. Bu durumu aşmak için oturum açma türünü değiştirebilir veya PostgreSQL'i geri döngü (loopback) ağ arayüzünü kullanacak şekilde yapılandırabilirsiniz. Bu arayüz, bağlantı yerel olsa bile bağlantı türünü uzak olarak değiştirecektir.

Bu bölümde ikincisini deneyeceksiniz. Başlamak için, kimlik doğrulamanın mümkün olması amacıyla kullanıcının şifresini belirleyebilirsiniz.

Aşağıdaki komutla ‘demo_user’ şifresini belirleyin:

İstendiğinde şifreyi girin ve onaylayın. İşlem tamamlandığında, PostgreSQL arayüzünden çıkabilir ve normal makine kullanıcınıza geri dönebilirsiniz:

PostgreSQL, işletim sisteminizin kullanıcı adıyla eşleşen bir kullanıcı adıyla oturum açmanızı ve ayrıca veritabanına aynı kullanıcı adıyla bağlanmanızı gerektirir. Bu durumda bunu yapmadığınız için, kullanmak istediğiniz seçenekleri açıkça belirtmeniz gerekecektir. Aşağıdaki sözdizimini kullanabilirsiniz:

user: Bağlanmak istediğiniz kullanıcı adı
DB: Erişiminiz olan mevcut bir veritabanı
-h 127.0.0.1: PostgreSQL'e yerel makineye bir ağ arayüzü üzerinden bağlanacağınızı belirtir. Bu seçenek, kullanıcı adı sistem kullanıcı adıyla eşleşmese bile kimlik doğrulaması yapmamızı sağlar.
-W: PostgreSQL'e bir şifre gireceğinizi belirtir

“test_user” kullanıcımızla oturum açmak için aşağıdaki komutu verebiliriz:

postgresql login through network interface manage permissions in PostgreSQL

Şifreyi girdikten sonra kabukta (shell) oturum açmış olacaksınız. Örneğimizde, kurulum sırasında otomatik olarak kurulan varsayılan veritabanı olan ‘postgres’ veritabanını kullanıyoruz.

Bu oturumda, oturum açmak için seçtiğiniz kullanıcıya bağlı olarak, çeşitli işlemleri gerçekleştirmek için doğru izinlere sahip olmadığınız yönünde bir sorunla karşılaşırsınız. Bu sorunun nedeni, kullanıcıya henüz bir şeyleri yönetmesi için yeterli izinleri vermemiş olmanızdır.

Bir sonraki bölümde, kullanıcılara gerekli izinleri vereceksiniz. İlk olarak, kullanıcıyı tekrar yönetici bir kullanıcıya dönüştürmeniz gerekecek:

PostgreSQL'de İzinleri Yönetme: PostgreSQL'de İzinler Nasıl Verilir

PostgreSQL'de, bir veritabanı veya tablo belirli bir rol tarafından oluşturulmuşsa, yalnızca o rolün bunu değiştirme izni vardır. Bunun istisnası, süper kullanıcı (superuser) izinlerine sahip roller olacaktır. Bu bölümde, diğer rollere izinler vereceksiniz. Diğer rollere ‘GRANT’ ifadesini kullanarak izin verebilirsiniz. Sözdizimi şöyledir:

Komutu yürütmek için basit bir tablo oluşturabilirsiniz:

Oluşturulan tabloyu görmek için şu komutu çalıştırın:

create table manage permissions in PostgreSQL

Artık bir demo tablonuz olduğuna göre, ‘demo’ tablosu üzerindeki yetkileri ‘demo_role’ rolüne tanımlayabilirsiniz. Bu komutla role ‘UPDATE’ yetkisi verebilirsiniz:

Yetkiyi ‘ALL’ olarak belirterek bir role tüm izinleri verebilirsiniz:

Sistemdeki tüm rollere belirli bir izin vermek istiyorsanız, aşağıdaki komutta olduğu gibi rol yerine ‘public’ anahtar kelimesini kullanabilirsiniz:

Aşağıdaki komutu kullanarak verilen tüm izinleri görüntüleyebilirsiniz:

granted permissions

PostgreSQL'de İzinleri Yönetme: PostgreSQL'de İzinler Nasıl Kaldırılır

Bir rolün izinlerini ‘REVOKE’ komutunu kullanarak kolayca kaldırabilirsiniz. Bu, grant (izin verme) komutuna çok benzer:

GRANT işleminde olduğu gibi, tüm izinleri vermek veya tüm rollere izin vermek için – ‘ALL’ ve ‘PUBLIC’ anahtar kelimelerini kullanabiliriz:

PostgreSQL'de Grup Rolleri Nasıl Kullanılır

Geniş kapsamlı izin kontrolünü etkinleştirmek için roller, diğer rollerle gruplandırmaya izin verecek kadar esnektir. Örneğin, ‘temporary_role’ adında bir rol oluşturabilir ve ardından ‘demo_role’ ile ‘test_user’ rollerini bu role ekleyebilirsiniz:

Artık bu iki rolün izinlerini sadece ‘temporary_role’ rolünün izinlerini yöneterek yönetebilirsiniz. Bu, izinlerin daha kolay yönetilmesini sağlar. Rol üyelik bilgilerini şu komutla görebilirsiniz:

role - group manage permissions in PostgreSQL

Herhangi bir grup üyesi, ‘set role’ komutunu kullanarak grup gibi hareket edebilir. ‘postgres’ kullanıcısı bir süper kullanıcı olduğundan, grubun bir üyesi olmasanız bile ‘set role’ komutunu kullanabilirsiniz:

Şimdi oluşturacağınız tüm tabloların sahibi temporary_role olacaktır:

Tablonun sahipliğini kontrol etmek için aşağıdaki komutu çalıştırın:

create table with temporary_role

‘temporary_role’ rolünün yeni tabloya ve serial veri tipiyle ilişkili diziye (sequence) sahip olduğunu görebilirsiniz. Orijinal rol izinlerine geri dönmek için aşağıdaki komutu çalıştırın:

Rolün ait olduğu rolün tüm yetkilerine sahip olmasını istiyorsanız, ‘alter role’ komutuyla ‘inherit’ özelliğini belirtebilirsiniz:

Yukarıdaki komutla, ‘test_user’ ait olduğu rollerin tüm yetkilerini almış olur. Bir rolü silmek için ‘drop role’ komutunu kullanabilirsiniz:

drop role manage permissions in PostgreSQL

Yukarıdaki komut bir hata verir çünkü ona bağlı olan ‘hello’ tablosu gibi bazı nesnelerimiz vardır. Rolü silebilmek için tablonun sahipliğini farklı bir role devredebilirsiniz:

Aşağıdaki komutla temporary_role rolünün artık hiçbir tabloya sahip olmadığını kontrol edebilirsiniz:

check ownerships

Artık herhangi bir bağımlılığı kalmadığı için ‘temporary_role’ rolünü silebilirsiniz:

Yukarıdaki komut temporary_users rolünü kaldıracak olsa da, rol grubunun eski üyeleri kaldırılmaz.

Sonuç

Eğitimi tamamladınız ve artık PostgreSQL'de izinleri nasıl yöneteceğinizi biliyorsunuz. İzinleri kolayca yönetebilirsiniz. İzinleri nasıl yöneteceğinizi bilmek, uygulamalarınızın gerekli veritabanlarına erişebilmesini sağlarken, farklı bir uygulama tarafından kullanılan diğer hiçbir veritabanına erişememesini garanti eder.

Keyifli Çalışmalar!

author

Akshay Nagpal

Yazar · CloudSigma

Preslav Dobrev, CloudSigma'da Kreatif Tasarımcı olarak görev yapmakta olup geleneksel ve yenilikçi pazarlama kanallarını kullanarak tutarlı bir kurumsal kimlik oluşturmaya odaklanmaktadır. Sanatsal vizyonu stratejik pazarlamayla harmanlayarak etkili marka anlatıları oluşturma konusunda oldukça yeteneklidir.

Yorumlar

Henüz yorum yapılmamış. İlk siz olun.