HAS_TABLE_PRIVILEGE - Amazon Redshift

Amazon Redshift non supporterà più la creazione di nuove UDF Python a partire dal 1º novembre 2025. Se desideri utilizzare le UDF Python, creale prima di tale data. Le UDF Python esistenti continueranno a funzionare normalmente. Per ulteriori informazioni, consulta il post del blog.

HAS_TABLE_PRIVILEGE

Restituisce true se l'utente ha il privilegio specificato per la tabella specificata, altrimenti restituisce false.

Sintassi

Nota

Questa è una funzione del nodo principale. Questa funzione restituisce un errore se fa riferimento a una tabella creata dall'utente, a una tabella di sistema STL o STV o a una vista di sistema SVV o SVL. Per ulteriori informazioni sui privilegi, consultare GRANT.

has_table_privilege( [ user, ] table, privilege)

Argomenti

user

Il nome dell'utente per controllare i privilegi della tabella. Il valore predefinito serve a controllare l'utente corrente.

table

Tabella associata al privilegio.

privilegio

Privilegio da controllare. I valori validi sono i seguenti.

  • SELECT

  • INSERT

  • UPDATE

  • DELETE

  • DROP

  • REFERENCES

Tipo restituito

BOOLEAN

Esempi

La seguente query trova che l'utente GUEST non ha il privilegio SELECT nella tabella LISTING.

select has_table_privilege('guest', 'listing', 'select'); has_table_privilege --------------------- false

La seguente query elenca i privilegi delle tabelle, inclusi select, insert, update e delete, utilizzando l'output delle tabelle del catalogo pg_tables e pg_user. Si tratta solo di un esempio, Potrebbe essere necessario specificare un nome di schema e i nomi delle tabelle del database. Per ulteriori informazioni, consulta Query sulle tabelle di catalogo.

SELECT tablename ,usename ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'select') AS sel ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'insert') AS ins ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'update') AS upd ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'delete') AS del FROM (SELECT * from pg_tables WHERE schemaname = 'public' and tablename in ('event','listing')) as tables ,(SELECT * FROM pg_user) AS users; tablename | usename | sel | ins | upd | del ----------+-----------+--------+-------+-------+------- event | john | true | true | true | true event | sally | false | false | false | false event | elsa | false | false | false | false listing | john | true | true | true | true listing | sally | false | false | false | false listing | elsa | false | false | false | false

La query precedente contiene anche un cross join. Per ulteriori informazioni, consulta Esempi di JOIN. Per interrogare tabelle che non si trovano nello schema public, rimuovi la condizione schemaname dalla clausola WHERE e utilizza il seguente esempio prima della query.

SET SEARCH_PATH to 'schema_name';