Sicurezza e privilegi per le procedure archiviate - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Sicurezza e privilegi per le procedure archiviate

Per impostazione predefinita, tutti gli utenti hanno l'autorizzazione a creare una procedura. Per creare una procedura, è necessario il privilegio USAGE nel linguaggio PL/pgSQL, che viene concesso a PUBLIC per impostazione predefinita. Solo gli utenti con privilegi avanzati e i proprietari hanno per impostazione predefinita l'autorizzazione di richiamare una procedura. Gli utenti con privilegi avanzati possono eseguire REVOKE USAGE su PL/pgSQL da un utente se desiderano evitare che l'utente crei una procedura archiviata.

Per richiamare una procedura, è necessaria l'autorizzazione EXECUTE per la procedura. Per impostazione predefinita, il privilegio EXECUTE per le nuove procedure viene concessa al proprietario e agli utenti con privilegi avanzati della procedura. Per ulteriori informazioni, consulta GRANT.

L'utente che crea una procedura è il proprietario come impostazione predefinita. Il proprietario dispone di privilegi CREATE, DROP e EXECUTE sulla procedura come impostazione predefinita. Gli utenti con privilegi avanzati hanno tutti i privilegi.

L'attributo SECURITY controlla i privilegi di una procedura per accedere agli oggetti del database. Quando crei una procedura archiviata, puoi impostare l'attributo SECURITY su DEFINER o INVOKER. Se specifichi SECURITY INVOKER, la procedura utilizza i privilegi dell'utente che la chiama. Se specifichi SECURITY INVOKER, la procedura utilizza i privilegi del proprietario che la chiama. INVOKER è l'impostazione predefinita.

In quanto una procedura SECURITY DEFINER viene eseguita con i privilegi dell'utente proprietario della procedura, assicurarsi che la procedura non venga utilizzata impropriamente. Per assicurare che le procedure SECURITY DEFINER non vengano utilizzate impropriamente, esegui le seguenti operazioni:

  • Concedi EXECUTE alle procedure SECURITY DEFINER per specificare gli utenti e non a PUBLIC.

  • Qualificare tutti gli oggetti di database ai quali deve accedere la procedura con i nomi dello schema. Ad esempio, utilizza myschema.mytable invece di solo mytable.

  • Se non puoi qualificare un nome di oggetto in base al suo schema, imposta search_path durante la creazione della procedura utilizzando l'opzione SET. Imposta search_path per escludere qualsiasi schema che è scrivibile da parte di utenti non attendibili. Questo approccio previene che qualsiasi intermediario di questa procedura crei oggetti (ad esempio, tabelle o visualizzazioni) che mascherano gli oggetti il cui scopo è di essere utilizzati dalla procedura. Per ulteriori informazioni sull'opzione SET, consultare CREATE PROCEDURE.

L'esempio seguente imposta search_path su admin per assicurare che l'accesso alla tabella user_creds avvenga dallo schema admin e non dal pubblico o da qualsiasi altro schema nel search_path dell'intermediario.

CREATE OR REPLACE PROCEDURE sp_get_credentials(userid int, o_creds OUT varchar) AS $$ BEGIN SELECT creds INTO o_creds FROM user_creds WHERE user_id = $1; END; $$ LANGUAGE plpgsql SECURITY DEFINER -- Set a secure search_path SET search_path = admin;