PostgreSQL'de salt tek tablo erişimi için asgari bağışlar


10

Aşağıda, yeni kullanıcı (oturum açma) oluşturmak ve PostgreSQL'de belirtilen bir tablo için salt okunur erişim izni vermek gibi görünen komutların bir listesi bulunmaktadır.

Bu komutların yeterli ayrıcalıklarla oturum açıldığında yürütüldüğünü varsayalım (yani postgresvarsayılan kurulumda oturum aç).

CREATE ROLE user_name NOSUPERUSER NOCREATEDB 
NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity';

Şimdi veritabanı selecttablo tab_abcüzerinde vermek istiyorum db_xyz, bu yüzden işte gidiyor (veritabanı db_xyzPgAdmin veya bunun gibi bir şey üzerinden geçerli olarak seçilir):

grant select on tab_abc to user_name;

Soru şu: bu yeterli mi yoksa daha fazla hibe olmalı (veritabanı connect, usagebelki)?

Bu komutlar benim için çalışıyor gibi görünüyor, ancak varsayılan yüklememde varsayılan güvenlik ayarları var. Sunucu yöneticisi daha güçlü güvenlik yapılandırdıysa hangi ek hibeleri eklemeliyim?

Ben vermek gerekmez görünüyor connect, ne de usageki implicite vermeyi kabul ederken - select? Her zaman öyle mi?

Yanıtlar:


12

Soru şu: bu yeterli mi veya daha fazla hibe olmalı (veritabanı bağlantısı, kullanım belki)?

Güvenlik esas olarak şu noktalarda varsayılan değerlerden daha da sertleştirilebilir:

  • pg_hba.confDosyası. Herhangi bir veritabanı ayrıcalığı dikkate alınmadan bağlantıları filtreler. Varsayılan yerel bağlantılar için nispeten açıktır, ancak açık bir veritabanı, kullanıcı adı ve ağ kaynağı listesiyle sınırlı olabilir.

  • Herkese açık olan , herkesin sözde rolü olan izinler . Bir kullanıcı yalnızca connect ayrıcalığı verildiğinde örtük olarak bağlanabilir PUBLIC. Bkz düzenlendi Kullanıcı herhangi hibe olmadan PostgreSQL tüm veritabanlarını erişebilir . Bir veritabanı tüm yetkileri herkese açık olarak iptal edebilir. Kullandığınız başlıca PostgreSQL sürümü için doc'deki REVOKE'a bakın .

  • Şemanın varlığı public. Kolaylık sağlamak için varsayılan olarak veritabanı ile oluşturulur, ancak zorunlu değildir. Genel izinleri publicşemadan kaldırmak yerine, DBA'ların publicyeni kullanıcıların hiçbir şekilde örtük izni olmaması gerektiğinde şemayı bırakmaları mantıklı olabilir .

Bu varsayılanların kaldırılması durumunda, bir tabloyu okumak için yeni bir kullanıcı verilmelidir:

GRANT CONNECT ON DATABASE dbname TO username;

Veritabanı düzeyinde:

GRANT USAGE ON SCHEMA schemaname TO username;
GRANT SELECT ON schemaname.tablename TO username;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.