2013-09-27 17 views
22

Yalnızca bir partikül şema tablosuna erişen bir kullanıcıyı kısıtlamam gerekiyor. Sorguyu izledim ve user1_gmail_com olarak oturum açmayı denedim. Ancak, herhangi bir şema tablosunu taramaya çalışırken hatayla karşılaştım.HATA: schema user1_gmail_com şema için izin reddedildi 46

Benim Sorgu:

SELECT clone_schema('my_application_template_schema','user1_gmail_com'); 
CREATE USER user1_gmail_com WITH PASSWORD 'myloginpassword'; 
REVOKE ALL ON ALL TABLES IN SCHEMA user1_gmail_com FROM PUBLIC; 
GRANT SELECT ON ALL TABLES IN SCHEMA user1_gmail_com TO user1_gmail_com; 

SQL hatası:

ERROR: permission denied for schema user1_gmail_com at character 46 
In statement: 
SELECT COUNT(*) AS total FROM (SELECT * FROM "user1_gmail_com"."organisations_table") AS sub 

Güncelleme Çalışma Sorgu:

SELECT clone_schema('my_application_template_schema','user1_gmail_com'); 
CREATE USER user1_gmail_com WITH PASSWORD 'myloginpassword'; 
REVOKE ALL ON ALL TABLES IN SCHEMA user1_gmail_com FROM PUBLIC; 
GRANT USAGE ON SCHEMA user1_gmail_com TO user1_gmail_com; 
GRANT SELECT ON ALL TABLES IN SCHEMA user1_gmail_com TO user1_gmail_com; 
+0

Yani 'clone_schema()' ne yapıyor? –

+0

my_application_template_schema'daki tüm tabloların kopyalarını user1_gmail_com şema.https: //wiki.postgresql.org/wiki/Clone_schema – Ramprasad

+0

içine alır. Ne clone_schema() 'ne de örnekleriniz hatanın oluştuğu bildirimi içerir. Peki, hatayı üreten bu ifade nereden geliyor? –

cevap

46

Sen şemadaki tablolara değil, şemaya da erişim hakkı vermesi gerekir. manual itibaren

:

By default, users cannot access any objects in schemas they do not own. To allow that, the owner of the schema must grant the USAGE privilege on the schema.

Yani ya da oluşturulan kullanıcı şema sahibi yapmak veya bu kullanıcıya şemada KULLANIM verin.

+14

Engstrom Great hatası üstlendim. Aşağıdaki sorguyu ekledim.İyi çalışıyor. SCHEMA ÜZERİNDE HİBE KULLANIMI user1_gmail_com TO user1_gmail_com; – Ramprasad

22

Bu beni şaşırttı. Eminim doğru şekilde kullanıyorum. Psql içindeki sözdizimi için \h grant'u çalıştırın. İşte gerektiği gibi benim diğer kullanıcılar ve gruplar çalışmaya başardı nasıl:

GRANT ALL PRIVILEGES ON SCHEMA foo TO GROUP bar; 
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA foo TO GROUP bar; 
+0

Görünüşe göre bile D DATABASE ÜZERİNE HERHANGİ TÜM PRIVILEGELAR xx TO yy', 'zz' xx' veritabanının bir şeması olduğunda gariptir. – Jacopofar

İlgili konular