PostgreSQL'de yedeklemeler için nasıl salt okunur kullanıcı oluşturabilirim?


15

PostgreSQL'de salt okunur bir yedek kullanıcı oluşturmanın IMPOSSIBLE olduğu doğru mu?

Bir IRC kanalında, yalnızca sahiplik ayrıcalıklarına sahip olmayan bir yedek kullanıcıya sahip olamayacağınız bildirildi. Çok garip buluyorum, bu yüzden bir şey eksik olmadığımdan emin olmak istiyorum.

Aşağıda denediklerim ama aradığım sonuçları vermiyor. Ne zaman yapmak pg_dumpalıyorum verilen bir masada Permission denied for relation...:

GRANT SELECT ON ALL TABLES IN SCHEMA public TO backup; 
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO backup; 
GRANT SELECT, USAGE ON ALL SEQUENCES IN SCHEMA public TO backup;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, USAGE ON SEQUENCES TO backup;

Herhangi bir yardım büyük mutluluk duyacağız!


Yanıtlar:


9

Hayır, kolay (şimdi zaten).

  1. Yeni bir kullanıcıya bağlantı izni verme

    GRANT CONNECT ON DATABASE mydb TO myReadolyUser;
  2. Tüm geçerli izinleri verin veritabanı nesnelerinde . Bu şemaya özeldir ve kullanıcınızın kullanmasını istediğiniz her şema için bir kopya çalıştırmanız gerekir,

    GRANT SELECT ON ALL TABLES IN SCHEMA mySchema TO myReadonlyUser;

    Gönderen docs ,ALL TABLES sen istediğimiz her şeyi içerir.

    Bir veya daha fazla şemada aynı türdeki tüm nesnelere ayrıcalık verme seçeneği de vardır. Bu işlevsellik şu anda yalnızca tablolar, sıralar ve işlevler için desteklenmektedir (ancak TÜM TABLOLAR'ın görünümleri ve yabancı tabloları içerdiği kabul edilmektedir.

  3. Daha sonra henüz oluşturulmamış nesneler için gelecekteki ayrıcalıkları ALTER DEFAULT PRIVLEGESvermek . SELECT

    ALTER DEFAULT PRIVILEGES IN SCHEMA mySchema
    GRANT SELECT ON TABLES TO myReadonlyUser;

Ben çalıştırırken fark ALTER DEFAULT PRIVILEGES ... myReadonlyUser, 2 ek hatlar dökümü eklenir: ALTER DEFAULT PRIVILEGES FOR ROLE root IN SCHEMA public REVOKE ALL ON TABLES FROM PUBLIC; ALTER DEFAULT PRIVILEGES FOR ROLE root IN SCHEMA public REVOKE ALL ON TABLES FROM root;. Bunun gibi, root'un yeni tablolarda hiçbir şey yapamayacağı anlamına gelir. Bu doğru mu?
19'de

Ayrıca, tablolarınız bigintsalt okunur kullanıcınızı kullanıyorsa büyük olasılıkla da ihtiyaç duyacaktırGRANT SELECT ON ALL SEQUENCES
dthor

6

Basit ve güzel bir yol, salt okunur izinli bir süper kullanıcı oluşturmaktır.

  • Giriş psqlPostgres'e veya diğer süper kullanıcı olarak.
  • Yeni süper kullanıcı rolünü oluşturun ve salt okunur olarak ayarlayın:

    CREATE USER backadm SUPERUSER  password '<PASS>';
    ALTER USER backadm set default_transaction_read_only = on;
    • değiştirmek <PASS>Seçtiğiniz şifreyle .
    • backadmSeçilen kullanıcı adıyla değiştirebilirsiniz . (I koymak backadmiçinBackup Administrator ).
    • Şifre için tek tırnak unutmayın.

Artık bu rolü yedekleme yapmak için kullanabilirsiniz.


6
Ewww. Yedeklenecek bir süper kullanıcı mı? Özellikle salt okunur olmasını istedi. Bu kullanıcı, veritabanına sınırsız erişime sahip olan kullanıcılardan biri SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITEveya ALTER USER backadm set default_transaction_read_only = off;uzak.
Evan Carroll

Bu kullanıcı, işlemlerin salt okunur olmasına bakılmaksızın tabloları / şemaları / veritabanlarını bırakabilecektir.
Igor Mukhin

4

@Gyre tarafından verilen yanıtta atıfta bulunulan blogun "uygulama" salt okunur bir kullanıcı oluşturmak için (yani, bir web uygulamasının veritabanına bağlanması için salt okunur bir rol oluşturmak için) çalışmayacağını ve ciddi bir şekilde açabileceğini unutmayın. güvenlik açığı, bu postgresql liste yanıtında açıklandığı gibi kolayca atlatılabilir olduğundan . Başvuru için, oturum ayarlarını geçersiz kılan istemci tarafından:

SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE

Soruda yayınlanana benzer daha ayrıntılı bir yöntem için postgres wiki'sinde bağlanan 'postgresql'de hakları yönetme' sunumuna bakın .


Bu gerçekten bir cevap değil, bir yorum olarak kopyaladığım güvensiz olmanın diğer cevapları üzerine bir eleştiri. Bu soruyu şimdi doğru cevapladım.
Evan Carroll

3

Evan Caroll'un çözümünü test ettikten sonra şu hatayla karşılaştım:

HATA: 'tablo' ilişkisi için izin verilmedi

bir izin daha eksik:

GRANT SELECT ON ALL SEQUENCES IN SCHEMA mySchema TO myReadonlyUser

Bu izni eklemek, salt okunur kullanıcıma yedeklememi sağladı.


2

Bazı uygun araştırmalar yaptım ve bunun için bir çözüm var gibi görünüyor. Ne yapılması gerektiğini mükemmel bir şekilde açıklayan bu blog yazısına rastladım . Umarım bu benim aynı cevabı arayan insanlara yardımcı olur. Açıkçası - bu şekilde yapılan yedekleri geri yüklemek farklı bir sorudur.


Blog gönderisine bağlantı vermek yerine, blog gönderisinin bağlantı-çürümesi olması durumunda cevabınıza bazı ayrıntılar eklemelisiniz (bkz. En.wikipedia.org/wiki/Link_rot )
Max Vernon

Blogpost'taki temel fikir ALTER USER set default_transaction_read_only = on;, kullanıcının bunu değiştirmesini engellemez.
15:24

Ewww. Yedeklenecek bir süper kullanıcı mı? Özellikle salt okunur olmasını istedi. Bu kullanıcı, İŞLEM OKUYUN YAZIN veya ALTER USER backadm set default_transaction_read_only = off olarak OTURUM ÖZELLİKLERİNİ AYARLA; veritabanına sınırsız erişime sahip olmaktan uzaktır.
Evan Carroll
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.