Süper kullanıcı olmadan Postgresql etkinleştirme uzantıları


14

Kullanıcılar için otomatik olarak roller ve veritabanları oluşturmak komut dosyaları var bir PostgreSQL 9.5 sunucum var. Bu veritabanları içinde belirli uzantıları (ör. Pgcrypto) etkinleştirmek yararlı olacaktır, ancak anladığım kadarıyla çalışacak bir süper kullanıcı olmalıdır CREATE EXTENSION. Bir süper kullanıcı hesabıyla manuel olarak oturum açmadan bu tür uzantıları etkinleştirmenin bir yolu var mı?


4
Eğer ekleyerek denediniz mi template1ve o andan itibaren her kullanıcı veritabanı oluşturma template1gibi CREATE DATABASE foo OWNER=userfoo TEMPLATE=template1?
Kassandry

1
@Kassandry bunu hiç düşünmemişti, ama iyi bir düşünce. İdeal olarak sahipleri istedikleri takdirde uzantı eklemek mümkün olmak istiyorum, ama bu hala kabul edilebilir bir olasılık.
beldaz

Yanıtlar:


11

Gönderen docs Uzantıları,

superuser (boolean) Bu parametre true olursa (varsayılan değerdir), yalnızca süper kullanıcılar uzantıyı oluşturabilir veya yeni bir sürüme güncelleyebilir. False değerine ayarlanırsa, yalnızca yükleme veya güncelleme komut dosyasında komutları çalıştırmak için gereken ayrıcalıklar gerekir.

Değer ayarlanmadı pgcrypto.control, bu yüzden bir SuperUser gerektiren varsayılanı true değerine ayarlıyor .

Bu CREATE EXTENSION, CREATE EXTENSION'daki belgelerin sizi inanmanıza neden olmasına rağmen, veritabanının sadece sahibi olamayacağınız anlamına gelir .

Ben sert ayarlamak için çalıştı falseve hiçbir sevinç. C güvenilir olmayan bir dildir ve

HATA: c dili için izin verilmedi

Gönderen pg_language dokümanlar

Yalnızca süper kullanıcılar güvenilmeyen dillerde işlevler oluşturabilir.

... tabii ki süper kullanıcı olarak cgüvenebilirsiniz UPDATE pg_language set lanpltrusted = true where lanname = 'c';. Sonra CREATE EXTENSION pgcryptosüper kullanıcı olmayan olarak iyi çalışacaktır. Ancak, kullanıcılarınızın uzantı dizininize kaynak yüklemesi ve ardından veritabanına yüklemesi konusunda endişelenmeniz gerekiyorsa bu kötü bir fikir gibi görünüyor. Yani o kadar ileri gitmem. Bu kediyi görmek için başka bir yol bulurdum.


Teşekkürler Evan, bu sorabileceğim kadar kapsamlı bir cevap. Muhtemelen bu sorunu çözmek için @ Kassandry'nin kedi derisi önerisini tercih edeceğim. Ayrıca CREATE EXTENSION'ı saklı bir yordamda sarmalamayı düşündüm, ancak dblink kimlik doğrulama yuckiness olmadan aynı veritabanında bu işi yapmak için bir yol bulamadım.
beldaz

Öyleyse, pg_dumpuzantılarla ilgili açıklamaları dökmesini önlemek için herhangi bir seçeneğe sahip olmamanın anlamı nedir ? Şu anda tarafından atılan SQL bu ifadeleri kaldırmak için harici metin işleme araçları kullanmak zorunda pg_dump.
Claudix

@Evan Carroll: süper kullanıcı psql cli ile yanlış olarak ayarlanabilir mi? Amazon aws rds bir örneğim var ve pgcrypto.control erişimi yok.
ribamar

2
@ribamar hayır çünkü bu veritabanına bağlı herkes db postmaster olarak gerçek rasgele kod yürütme gerçekleştirebilir anlamına gelir. bu korkunç bir fikir olurdu.
Evan Carroll

kimse değil, süper kullanıcı. Bu şekilde işletim sistemini süper dbms süper kullanıcıdan farklılaştırdığınızı anlıyorum, ancak böyle bir karar verirsem aracı güçlendirmek için gideceğim ve gerçekten daha güçlü bir kullanıcı oluşturmak gerekirse, onu uygularım aracın içinde.
ribamar
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.