2013-09-27 10 views
22

Potrzebuję ograniczyć użytkownika, dostęp tylko do tabel schematów particualr.Tak próbowałem wykonać zapytanie i zalogować się jako user1_gmail_com. Ale mam następujące błędy, gdy próbuję przeglądać tabelę schematu.BŁĄD: odmowa uprawnień dla schematu user1_gmail_com przy znaku 46

moje pytanie: error

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:

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 

Aktualizacja Zapytanie robocza:

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

Co robi funkcja 'clone_schema()'? –

+0

Zajmuje kopię wszystkich tabel w my_application_template_schema do user1_gmail_com schema.https: //wiki.postgresql.org/wiki/Clone_schema – Ramprasad

+0

Ani 'clone_schema()' ani twoje przykłady zawierają instrukcję, w której wystąpił błąd. Skąd zatem pochodzi to stwierdzenie, które generuje błąd? –

Odpowiedz

46

Ty trzeba przyznać dostęp nie tylko do tabel w schemacie, ale także do samego schematu.

Z manual:

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.

Więc albo dokonać utworzony użytkownik właściciel schematu, lub udzielenia Wykorzystanie w schemacie do tego użytkownika.

+14

Engstrom Great. Dodałem następujące zapytanie. Działa dobrze. UŻYTKOWANIE GRANT NA SCHEMA user1_gmail_com TO user1_gmail_com; – Ramprasad

22

To mnie zdezorientowało. Nadal nie jestem pewien, czy robię to poprawnie. Uruchom \h grant dla składni w psql. Oto, w jaki sposób udało mi się przekonać moich innych użytkowników i grupy do pracy, tak jak potrzebowałem:

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

Podobno nawet "PRZYZNAJ WSZYSTKIE PRZYWILEJE NA BAZY DANYCH xx TO yy" nie oznacza "UDZIAŁU GRANTÓW NA SCHEMA zz", gdy 'zz' jest schematem bazy danych' xx', – Jacopofar

Powiązane problemy