SELECT izinlerini yeni bir postgresql kullanıcısına veren bir liner var mı?
Aşağıdaki sözde kodunu uygulayacak bir şey:
GRANT SELECT ON TABLE * TO my_new_user;
SELECT izinlerini yeni bir postgresql kullanıcısına veren bir liner var mı?
Aşağıdaki sözde kodunu uygulayacak bir şey:
GRANT SELECT ON TABLE * TO my_new_user;
Yanıtlar:
9.0'dan itibaren postgres'in bir şemadaki tüm tablolarda (ve diğer nesnelerde) ayrıcalıklar sağlayacak sözdizimine sahip olduğunu söylemenin faydalı olacağını 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ı .
default privileges
ytou'nun tabloyu oluşturduğu bir şemaya ayarlamanız gerekir : postgresql.org/docs/current/static/…
public
Bağlı olduğunuz mevcut DB şemadaki tüm tabloları (fonksiyonları) etkiler .
Benim tek astarlı 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ıdan çalıştırın, bir cazibe gibi çalıştı.
Bu iki aşamalı bir işlemle yapılabilir.
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 "genel" olabilir)
Bu size gerekli izinleri sağlayacak sorguların bir listesini verecektir. Çıktıyı kopyalayın, başka bir sorguya yapıştırın ve yürütün.
Postgres 8.4 ile çalışıyorum ve bir kullanıcıya tüm yetkileri vermek için aşağıdakileri yapıyorum:
#!/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
Bunu düzeltmenin bir yolu saklı bir prosedür yazmaktır. maalesef "tüm tablolara her şeyi ver" komutu yoktur. Gerçekten bu işlemi yapmak için bir yordam veya bazı dış kabuk komut dosyası gerekir.
Adam Matan'ın (one-liner solution) betiği, birçok şema olduğunda harikadır, ancak şema adlarının veya tablo adlarının büyük harf veya özel karakterler içerdiği durumlarda çalışmaz.
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