2013-09-27 13 views
22

Devo limitare un utente, accedere solo a tabelle di uno schema particolare solo. Ho provato a seguire la query e accedere come user1_gmail_com. Ma ho ricevuto un errore in seguito quando provo a sfogliare qualsiasi tabella dello schema.ERRORE: autorizzazione negata per lo schema user1_gmail_com al carattere 46

la mia domanda: errore

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 

Aggiornato Domanda di lavoro:

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

Quindi cosa fa "clone_schema()'? –

+0

Copia di tutte le tabelle in my_application_template_schema per user1_gmail_com schema.https: //wiki.postgresql.org/wiki/Clone_schema – Ramprasad

+0

Né il 'clone_schema()' né i tuoi esempi contengono l'istruzione in cui si verifica l'errore. Quindi da dove viene questa affermazione che genera l'errore? –

risposta

46

È è necessario concedere l'accesso non solo alle tabelle nello schema, ma anche allo schema stesso.

Dal 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.

Quindi, o rendere il vostro utente creato il proprietario dello schema, o concedere l'utilizzo su schema a questo utente.

+14

Engstrom Great. Ho aggiunto la seguente query. Funziona bene. GRANT USEGE ON SCHEMA user1_gmail_com TO user1_gmail_com; – Ramprasad

22

Questo mi ha confuso. Ancora non sono sicuro che lo sto gestendo correttamente. Eseguire \h grant per la sintassi all'interno di psql. Ecco come sono riuscito a far funzionare gli altri utenti e gruppi come necessario:

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

Apparentemente anche 'CONCEDERE TUTTI I PRIVILEGI SU DATABASE xx A yy' non implica 'GRANT USAGE ON SCHEMA zz' quando' zz' è uno schema del database 'xx', strano – Jacopofar

Problemi correlati