it-swarm.asia

Postgresql içindeki tüm tablolara HİBE SEÇ

SELECT izinleri öğesini bir yeni kullanıcı postgresql'e veren tek bir astar var mı?

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

GRANT SELECT ON TABLE * TO my_new_user;
94
Adam Matan

9.0 itibariyle postgres'in bir şemadaki tüm tablolarda (ve diğer nesnelerde) ayrıcalık tanımak için 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ı .

153
TimH

Benim (bir astar 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ı çalıştırın, bir cazibe gibi çalıştı.

12
Adam Matan

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 = izin vermek istediğiniz şemalar (yalnızca "herkese açık" olabilir)

  2. Bu size 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.

9
Ben Williams

Ben b yaparak sona erdi ve işe yaradı:

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

Ben kullandım budur:

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

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

2
stox

Postgres 8.4 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
wilson

Adam Matan'ın (tek satırlık çözüm) komut dosyası, birçok şema olduğunda harika, ancak şema adlarının veya tablo adlarının büyük harfler veya özel karakterler içerdiği yerlerde işe yaramaz.

Değiştirilmiş sürü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
0
anneb

bunu düzeltmenin bir yolu saklı bir yordam yazmaktır. maalesef "tüm tablolara her şeyi ver" komutu yoktur. gerçekten bu işlemi gerçekleştirmek için bir yordama veya bazı harici Shell komut dosyasına ihtiyacınız olabilir.

0
postgresql007