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:
|
1 2 |
sudo apt-get update sudo apt-get install postgresql postgresql-contrib |
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:
|
1 |
sudo su - postgres |
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:
|
1 |
psql |
Ardından, rolleri görüntülemek için aşağıdakini çalıştırın:
|
1 |
\du |

Ş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:
|
1 |
CREATE ROLE demo_role; |
Oluşturulup oluşturulmadığını kontrol etmek için şu komutu çalıştırın:
|
1 |
\du |

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:
|
1 |
\q |
Aşağıdaki komutla “test” adında bir rol oluşturabilirsiniz:
|
1 |
createuser test |
Yukarıdaki komutu çalıştırdıktan sonra psql’e giriş yapın ve aşağıdaki komutları kullanarak rolleri listeleyin:
|
1 2 |
psql \du |

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:
|
1 |
DROP ROLE role_name; |
Daha önce oluşturduğumuz demo rolünü şu komutu kullanarak silebilirsiniz:
|
1 |
DROP ROLE demo_role; |

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

Rol mevcut olmadığında komutun hata vermemesini istiyorsanız, komuta ‘IF EXISTS’ ekleyebilirsiniz:
|
1 |
DROP ROLE IF EXISTS role_name; |
Bu komutla rolü silmeyi tekrar deneyebilirsiniz:
|
1 |
DROP ROLE IF EXISTS demo_role; |
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:
|
1 |
CREATE ROLE role_name WITH optional_permissions; |
Bunun seçeneklerini görmek için bu komutu kullanarak yardımı açabilirsiniz:
|
1 |
\h CREATE ROLE |

Giriş izinlerine sahip bir rol oluşturmak istiyorsanız, komutu şu şekilde oluşturabilirsiniz:
|
1 |
CREATE ROLE demo_role WITH LOGIN; |

Daha önce gördüğümüz gibi, oturum açma iznine sahip roller oluşturmak istiyorsanız aşağıdaki komutu da kullanabilirsiniz:
|
1 |
CREATE USER role_name; |
İ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:
|
1 |
ALTER ROLE role_name WITH attribute_options; |
Örneğin, isterseniz bu komutla demo_role rolünün oturum açma izinlerini ‘oturum açma’ olarak değiştirebilirsiniz:
|
1 |
ALTER ROLE demo_role WITH NOLOGIN; |

Kullanıcının tekrar oturum açmasına izin vermek için aşağıdaki komutla izinleri değiştirebilirsiniz:
|
1 |
ALTER ROLE demo_role WITH LOGIN; |
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:
|
1 |
\password test |
İ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:
|
1 2 |
\q exit |
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:
|
1 |
psql -U <span class="highlight">user</span> -d <span class="highlight">db</span> -h 127.0.0.1 -W |
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:
|
1 |
psql -U test -d postgres -h 127.0.0.1 -W |

Ş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:
|
1 2 3 |
\q sudo su - postgres psql |
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:
|
1 |
GRANT permission_type ON table_name TO role_name; |
Komutu yürütmek için basit bir tablo oluşturabilirsiniz:
|
1 2 3 4 |
CREATE TABLE demo ( name varchar(25), id serial, start_date date); |
Oluşturulan tabloyu görmek için şu komutu çalıştırın:
|
1 |
\d |

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:
|
1 |
GRANT UPDATE ON demo TO demo_role; |
Yetkiyi ‘ALL’ olarak belirterek bir role tüm izinleri verebilirsiniz:
|
1 |
GRANT ALL ON demo TO demo_role; |
Sistemdeki tüm rollere belirli bir izin vermek istiyorsanız, aşağıdaki komutta olduğu gibi rol yerine ‘public’ anahtar kelimesini kullanabilirsiniz:
|
1 |
GRANT INSERT ON demo TO PUBLIC; |
Aşağıdaki komutu kullanarak verilen tüm izinleri görüntüleyebilirsiniz:
|
1 |
\z |
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:
|
1 |
REVOKE permission_type ON table_name FROM user_name; |
GRANT işleminde olduğu gibi, tüm izinleri vermek veya tüm rollere izin vermek için – ‘ALL’ ve ‘PUBLIC’ anahtar kelimelerini kullanabiliriz:
|
1 |
REVOKE INSERT ON demo FROM PUBLIC; |
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:
|
1 2 3 |
CREATE ROLE temporary_role; GRANT temporary_role TO demo_role; GRANT temporary_role TO test_user; |
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:
|
1 |
\du |

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:
|
1 |
SET ROLE temporary_role; |
Şimdi oluşturacağınız tüm tabloların sahibi temporary_role olacaktır:
|
1 2 3 4 |
CREATE TABLE hello ( name varchar(25), id serial, start_date date); |
Tablonun sahipliğini kontrol etmek için aşağıdaki komutu çalıştırın:
|
1 |
\d |

‘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:
|
1 |
RESET ROLE; |
Rolün ait olduğu rolün tüm yetkilerine sahip olmasını istiyorsanız, ‘alter role’ komutuyla ‘inherit’ özelliğini belirtebilirsiniz:
|
1 |
ALTER ROLE test_user INHERIT; |
Yukarıdaki komutla, ‘test_user’ ait olduğu rollerin tüm yetkilerini almış olur. Bir rolü silmek için ‘drop role’ komutunu kullanabilirsiniz:
|
1 |
DROP ROLE temporary_users; |

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:
|
1 |
ALTER TABLE hello OWNER TO demo_role; |
Aşağıdaki komutla temporary_role rolünün artık hiçbir tabloya sahip olmadığını kontrol edebilirsiniz:
|
1 |
\d |

Artık herhangi bir bağımlılığı kalmadığı için ‘temporary_role’ rolünü silebilirsiniz:
|
1 |
DROP ROLE temporary_users; |
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!


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