Soru GRANT SEÇİN postgresql içindeki tüm tablolara


Veren bir tek liner var mı SELECT izinleri bir yeni kullanıcı postgresql?

Aşağıdaki sözde kodu uygulayan bir şey:

GRANT SELECT ON TABLE * TO my_new_user;

78
2017-08-30 14:11


Menşei




Cevaplar:


9.0'dan itibaren, postgre'lerin şemadaki tüm tablolarda (diğer nesnelerin yanı sıra) ayrıcalık vermesi sözdizimine sahip olduğunu belirtmenin yararlı olabileceğini düşündüm:

GRANT SELECT ON ALL TABLES IN SCHEMA public TO user;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO user;

İşte Bağlantı.


132
2018-06-26 14:00



Yakında yükselteceğim, bu gerçekten iyi bir haber. Teşekkürler! - Adam Matan
Bu, genel şemayı kullanan sunucudaki tüm veritabanlarını etkiler mi? - kristianp
Yeni bir tablo oluşturursam, bu kullanıcı yeni oluşturulan tabloya erişebilir mi? - GuiSim
@GuiSim Hayır, sen ayarlamak zorunda default privileges ytou'nun masayı oluşturduğu bir şemada: postgresql.org/docs/current/static/... - SkyRaT
Kristianp Hayır, PG kümesindeki her veri tabanının kendi genel şeması vardır. Şemadaki tüm tabloları (fonksiyonları) etkiler. public bağlandığınız geçerli DB için. - SkyRaT


Benim (tek liner olmayan) çözümüm:

#!/bin/bash

for table in `echo "SELECT schemaname || '.' || relname FROM pg_stat_user_tables;" | psql -A -t my_database_name`;
do
    echo "GRANT SELECT ON TABLE $table to my_new_user;"
    echo "GRANT SELECT ON TABLE $table to my_new_user;" | psql my_database_name
done

Ayrıcalıklı kullanıcılardan çalıştırın, cazibe gibi çalıştı.


11
2018-06-01 06:29



All_tables yerine pg_stat_user_tables kullanırsanız, grep'inize ihtiyacınız olmaz ... Ayrıca, formatlanmış çıktıdan kurtulmak için -A -t dosyasını psql'ye geçirin. - Magnus Hagander
Postgres 9.0'dan itibaren, bu cevabın yaklaşımı bunu zor yoldan yapıyor. 9.x'te, artık "ON TÜMÜ" görüyoruz bu diğer cevap. - Basil Bourque


Bu iki adımlı bir işlemle yapılabilir.

  1. Bu sorguyu çalıştır:

    select 'grant all on '||schemaname||'.'||tablename||' to $foo;'
    from pg_tables where schemaname in ('$bar', '$baz')
    order by schemaname, tablename;
    

    Yedekler:

    $foo = izin vermek istediğiniz kullanıcı adı
    $bar, $baz = izinleri vermek istediğiniz şemalar (sadece "herkese açık" olabilir)

  2. Bu, gerekli izinleri oluşturacak sorguların bir listesini verecektir. Çıktıyı kopyalayın, başka bir sorguya yapıştırın ve yürütün.


8
2017-08-05 13:25





Bu benim kullandığım şey:

psql dbname -tc "select 'grant select on '||relname||' to readonly;' from pg_stat_user_tables" | psql dbname

Metinde biçimlendirme ve nerede-cümleleri yapmak daha doğal olduğunu hissediyorum.


2
2017-11-30 00:38





Ben 8.4 postgres ile çalışıyorum ve bir kullanıcıya tüm ayrıcalıkları vermek için aşağıdakileri yapın:

#!/bin/bash

for table in `echo "SELECT schemaname||'.'||relname FROM pg_stat_all_tables WHERE schemaname NOT IN('pg_catalog','pg_toast','information_schema')" | psql -t db `;
do
    echo "grant select on table $table to my_new_user;"
    echo "grant select on table $table to my_new_user;" | psql db
done

1
2018-04-05 18:04



İngilizce lütfen. - Linger


Bunu düzeltmenin bir yolu saklanmış bir prosedür yazmaktır. maalesef "her şeyi tüm tablolara ver" komutu yok ya da öyle. Bu işi yapmak için gerçekten bir prosedür veya bazı harici kabuk betiğine ihtiyacınız var.


0
2017-07-03 18:20





Bitti bitti buve işe yaradı:

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

0