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

  • jpmkm1

    jpmkm1

    4 NİSAN 2008
  • parlophone

    parlophone

    28 ŞUBAT 2006
  • Paulo Bautista

    Paulo Bautis

    21 Aralık 2008