Kullanım ver / tek bir tabloya seç
Yalnızca bir veritabanına CONNECT izni verirseniz, kullanıcı bağlanabilir ancak başka ayrıcalıklara sahip değildir. İsim alanlarında (şemalar) USAGE ve tablolarda ve görünümlerde SELECT'i ayrı ayrı şöyle vermeniz gerekir:
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 çok tablo / görünüm (PostgreSQL 9.0+)
PostgreSQL'in son sürümlerinde, şemadaki tüm tablolar / görünümler / vb. İçin bunları tek tek yazmak yerine tek bir komut kullanarak izin verebilirsiniz:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO xxx;
Bu yalnızca önceden oluşturulmuş tabloları etkiler. Daha güçlü bir şekilde, gelecekte yeni nesnelere varsayılan rollerin otomatik olarak atanmasını sağlayabilirsiniz :
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO xxx;
Varsayılan olarak, bunun yalnızca bu komutu yayınlayan kullanıcı tarafından oluşturulan nesneleri (tabloları) etkileyeceğini unutmayın: ancak bunu veren kullanıcının üyesi olduğu herhangi bir rol için de ayarlanabilir. Ancak, yeni nesneler oluştururken üyesi olduğunuz tüm roller için varsayılan ayrıcalıklar almazsınız ... bu nedenle hala biraz solgunluk var. Veritabanının sahip olma rolüne sahip olduğu yaklaşımını benimserseniz ve şema değişiklikleri bu sahip olma rolü olarak gerçekleştirilirse, o sahip olma rolüne varsayılan ayrıcalıklar atamalısınız. IMHO bu biraz kafa karıştırıcı ve fonksiyonel bir iş akışı bulmak için denemeniz gerekebilir.
Birden çok tablo / görünüm (9.0'dan önceki PostgreSQL sürümleri)
Uzun, çok tablolu değişikliklerde hatalardan kaçınmak GRANT SELECT
için, her tablo / görünüm için gerekli olanı oluşturmak üzere aşağıdaki 'otomatik' işlemi kullanmanız önerilir :
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, kopyalama-n-yapıştırma aşkı için herkese açık tüm tablolarda, görünümlerde ve dizilerde ilgili GRANT komutlarını GRANT SELECT'e çıktılamalıdır. Doğal olarak, bu sadece önceden oluşturulmuş tablolara uygulanacaktır.