Come posso concedere autorizzazioni agli oggetti appena creati in Amazon Redshift?
Il mio utente ha ricevuto un errore di autorizzazione negata per un oggetto appena creato. Come posso concedere all'utente le autorizzazioni necessarie per accedere agli oggetti appena creati nello schema?
Breve descrizione
Gli utenti che desiderano accedere agli oggetti appena creati nello schema devono disporre dei privilegi di accesso concessi dal proprietario dell'oggetto o da un utente con privilegi avanzati.
Quando un utente non riesce ad accedere agli oggetti appena creati nello schema, potrebbe ricevere il seguente errore:
"ERROR: permission denied for relation 'objectname'"
Questo errore si verifica quando la prima volta si concede l'accesso solo agli oggetti presenti in uno schema. Per impostazione predefinita, l'accesso non viene concesso automaticamente agli oggetti creati nello schema corrente.
Per risolvere questo problema, concedi i privilegi di accesso all'utente o tramite i ruoli di gruppo. Utilizza il comando ALTER DEFAULT PRIVILEGES.
Risoluzione
Per concedere le autorizzazioni per le tabelle correnti e future nello schema, esegui le seguenti operazioni come utente con privilegi avanzati:
-
Per concedere l'accesso di utilizzo allo schema e l'accesso SELECT a tutte le tabelle attualmente presenti nello schema, esegui i seguenti comandi:
Nota: sostituisci newtestschema con il nome del tuo schema e newtestuser con il nome dell'utente.grant usage on schema newtestschema to newtestuser; grant select on all tables in schema newtestschema to newtestuser;
-
Per concedere l'accesso SELECT all'utente per le tabelle future create con lo schema, esegui il seguente comando:
Nota: sostituisci awsuser con il nome utente che verrà utilizzato per creare oggetti futuri nello schema. Quindi sostituisci newtestschema con il nome dello schema e newtestuser con il nome utente che deve accedere agli oggetti futuri.alter default privileges for user awsuser in schema newtestschema grant select on tables to newtestuser;
Nota: i privilegi predefiniti si applicano solo ai nuovi oggetti. Quando esegui il comando ALTER DEFAULT PRIVILEGES, i privilegi sugli oggetti esistenti non vengono modificati.
-
Per verificare che all'utente siano stati concessi i privilegi predefiniti, esegui la seguente query come utente con privilegi avanzati:
select * from svv_default_privileges where grantee_name = 'newtestuser'; select * from svv_default_privileges where schema_name = 'newtestschema'; select * from svv_default_privileges where grantee_type = 'role';
Per esaminare le autorizzazioni concesse direttamente all'utente, esegui la seguente query come utente con privilegi avanzati:
SELECT * FROM svv_relation_privileges where identity_name = 'newtestuser';
Esempio di risoluzione
L'esempio seguente inizia con questa configurazione:
- Un utente denominato newtestuser che non è un utente con privilegi avanzati.
- Uno schema denominato newtestschema e una tabella denominata newtesttable1 nello schermo con alcuni record.
Un utente con privilegi avanzati denominato awsuser concede a newtestuser l'accesso allo schema newtestschema e a tutte le tabelle attualmente presenti nello schema. Per concedere l'accesso, awsuser utilizza il seguente comando esemplificativo:
grant usage on schema newtestschema to newtestuser; grant select on all tables in schema newtestschema to newtestuser;
Il comando concede a newtestuser l'accesso SELECT alle tabelle attualmente presenti nello schema newtestschema. Attualmente, solo la tabella newtesttable1 è presente nello schema newtestschema. Di conseguenza, la tabella newtesttable1 è accessibile a newtestuser.
Successivamente, awsuser crea un'altra tabella denominata newtesttable2 nello schema newtestschema. Se newtestuser esegue una query SELECT sulla tabella newtestschema.newtesttable2, viene visualizzato il seguente errore:
ERROR: permission denied for relation newtesttable2.
Per risolvere l'errore, awsuser esegue i seguenti passaggi:
-
Concede l'accesso alla tabella newtesttable2. A tal fine, awsuser esegue il seguente comando esemplificativo:
grant select on table newtestschema.newtesttable2 to newtestuser;
-
Concede l'accesso a newtestuser a tutte le tabelle future create da awsuser nello schema newtestschema. A tal fine, awsuser esegue il seguente comando esemplificativo:
alter default privileges for user awsuser in schema newtestschema grant select on tables to newtestuser;
Ora, quando awsuser crea un'altra nuova tabella denominata newtesttable3 nello schema newtestschema, newtestuser avrà l'accesso SELECT alla tabella newtesttable3.
-
Per verificare che a newtestuser siano stati concessi i privilegi predefiniti, awsuser esegue la seguente query:
select * from svv_default_privileges where grantee_name = 'newtestuser'; select * from svv_default_privileges where schema_name = 'newtestschema'; select * from svv_default_privileges where grantee_type = 'role';
Per esaminare le autorizzazioni concesse direttamente a newtestuser, awsuser esegue la seguente query:
SELECT * from svv_relation_privileges where identity_name = 'newtestuser';
L'output mostra che awsuser concede a newtestuser i privilegi SELECT per tutte le nuove tabelle create da awsuser nello schema newtestschema.
schema_name | object_type | owner_id | owner_name | owner_type | privilege_type | grantee_id | grantee_name | grantee_type | admin_option newtestschema | RELATION | 100 | awsuser | user | SELECT | 101 | newtestuser | user | FALSE
Informazioni correlate

Contenuto pertinente
- AWS UFFICIALEAggiornata 7 mesi fa
- AWS UFFICIALEAggiornata 3 mesi fa
- AWS UFFICIALEAggiornata 4 mesi fa