SORU
17 NİSAN 2009, Cuma


Nasıl PostgreSQL içinde salt okunur bir kullanıcı oluşturmak mı

Sadece belirli bir veritabanı Seçer yapabileceği PostgreSQL bir kullanıcı oluşturmak istiyorum. MySQL komutu

GRANT SELECT ON mydb.* TO 'xxx'@'%' IDENTIFIED BY 'yyy';

PostgreSQL komutları eşdeğer veya komut dizisi nedir?

Denedim...

postgres=# CREATE ROLE xxx LOGIN PASSWORD 'yyy';
postgres=# GRANT SELECT ON DATABASE mydb TO xxx;

Ama bir DB üzerinde verebilirsiniz tek şey OLUŞTUR, BAĞLAN, GEÇİCİ ve GEÇİCİ olduğunu görünür.

CEVAP
18 NİSAN 2009, CUMARTESİ


Grant kullanım/tek bir masa seçin

Eğer sadece grant, bir veritabanına BAĞLANMAK, kullanıcı bağlanabilir, ancak başka bir ayrıcalığı yok. Ad (şemalar) KULLANIM izni vermek ve böyle ayrı ayrı: tablolar ve görünümler SEÇİN

GRANT CONNECT ON DATABASE mydb TO xxx;
-- This assumes you're actually connected to mydb..
GRANT USAGE ON SCHEMA public TO xxx;
GRANT SELECT ON mytable TO xxx;

Birden fazla tablo/görünümler (PostgreSQL 9.0 )

PostgreSQL son sürümleri, tüm tablolar/ya da yazmak zorunda kalmak yerine şema tek bir komut kullanarak onları tek tek görüş/etc: izinleri verebilirsiniz

GRANT SELECT ON ALL TABLES IN SCHEMA public TO xxx;

Bu sadece önceden oluşturulmuş tablolar etkiler. Daha güçlü, otomatik olarak gelecekte default roles assigned to new objects olabilir:

ALTER DEFAULT PRIVILEGES IN SCHEMA public
   GRANT SELECT ON TABLES TO xxx;

Ayrıca amir kullanıcının üye olduğu herhangi bir rolü ayarlanabilir olmasına rağmen. varsayılan olarak, bu sadece nesneleri (tablolar) bu komutu veren kullanıcı tarafından oluşturulan etkileyeceğini unutmayın: Ancak, yeni nesneleri oluştururken üyesi olduğunuz tüm roller için varsayılan ayrıcalıkları almak değil... hala bazı faffing etrafında var. Eğer bir veritabanı sahibi bir rolü vardır, ve şema değiştiren rol sahibi olarak gerçekleştirilen yaklaşımı benimserseniz, o zaman sahibi rolü için varsayılan ayrıcalıkları atamak gerekir. IMHO bu biraz kafa karıştırıcı bir durum ve deney için fonksiyonel bir iş akışı ile gelip gerekebilir.

Birden fazla Tablo görünümleri (9.0 önce PostgreSQL sürümleri)/

Uzun hataları önlemek için, çoklu masa değişiklikler, aşağıdaki kullanımı tavsiye 'otomatik' her masa için GRANT SELECT gerekli oluşturmak için süreci görmek/:

SELECT 'GRANT SELECT ON ' || relname || ' TO xxx;'
FROM pg_class JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
WHERE nspname = 'public' AND relkind IN ('r', 'v', 'S');

Bu kopyala-n-yapıştır aşk için kamu tüm tablolar, görünümler ve dizileri VERMEK SEÇMEK için ilgili HİBE komutları çıktı. Doğal olarak, bu sadece zaten oluşturulmuş olan tablolar için uygulanır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andytokkallos

    Andytokkallo

    27 Kasım 2007
  • HowtoDrawAndPaint

    HowtoDrawAnd

    24 EKİM 2010
  • Kindness

    Kindness

    23 Ocak 2006