PostgreSQL’de Tüm Veritabanlarında Sadece Okuma Yetkisi Olan Bir Kullanıcı Oluşturma
PostgreSQL’de bir kullanıcı oluşturup, bu kullanıcıya tüm veritabanlarındaki tablolar üzerinde yalnızca SELECT
yetkisi vermek için aşağıdaki adımları izleyebilirsin:
1. Kullanıcıyı Oluştur
Öncelikle, tüm veritabanlarında geçerli olacak bir kullanıcı oluşturman gerekiyor. Bunu PostgreSQL’in postgres
veritabanı üzerinden yapabilirsin:
CREATE USER readonly_user WITH PASSWORD 'sifre';
Bu komutla readonly_user
adında bir kullanıcı oluşturuyoruz ve şifresini ayarlıyoruz.
2. Kullanıcıya Tablolarda Sadece SELECT
Yetkisi Ver
Şimdi, bu kullanıcıya tüm tablolar üzerinde yalnızca SELECT
izni vereceğiz. PostgreSQL’de bir kullanıcıya tüm tablolar üzerinde izin vermek için aşağıdaki adımları uygulayabilirsin. Ancak, her veritabanı için bu adımı ayrı ayrı yapman gerekecek.
Öncelikle, PostgreSQL’in sistem komutlarından GRANT
komutunu kullanarak tablolar üzerinde SELECT
yetkisini verebiliriz:
GRANT CONNECT ON DATABASE veritabani_adi TO readonly_user;
GRANT USAGE ON SCHEMA public TO readonly_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;
Yukarıdaki komutlar sırasıyla şunları yapar:
CONNECT
yetkisi vererek kullanıcıya veritabanına bağlanma yetkisi verilir.USAGE
yetkisi ile kullanıcıyapublic
şeması üzerinde erişim hakkı verilir.SELECT
yetkisi ile tüm tablolar üzerinde yalnızca okuma yetkisi tanımlanır.
3. Tüm Gelecekteki Tablolar için SELECT
Yetkisi
Eğer ileride yeni tablolar eklenecekse ve bu kullanıcıya otomatik olarak SELECT
yetkisi verilmesini istiyorsan aşağıdaki komutu da eklemen gerekir:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly_user;
Bu komut, gelecekte oluşturulacak tablolar için readonly_user
kullanıcısına otomatik olarak SELECT
yetkisi verir.
4. Tüm Veritabanlarına Uygulama
Yukarıdaki işlemleri her veritabanı için tekrar etmen gerekiyor. PostgreSQL’de bir veritabanından diğerine direkt geçiş yapamazsın, bu yüzden her veritabanına bağlanarak aynı adımları uygulamalısın:
psql -d veritabani1 -c "GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;"
psql -d veritabani2 -c "GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;"
...
Bu şekilde tüm veritabanlarına erişimi kısıtlayarak, sadece SELECT
yetkisi verebilirsin.
5. Ekstra Güvenlik
Eğer kullanıcının veri değiştirme yetkisini daha da sınırlamak istiyorsan, INSERT
, UPDATE
ve DELETE
gibi yetkileri de manuel olarak iptal edebilirsin:
REVOKE INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public FROM readonly_user;
Bu adımlarla, readonly_user
kullanıcısı sadece tablolar üzerinde SELECT
yapabilecek, veri ekleme, güncelleme veya silme yetkisine sahip olmayacaktır.