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

Questo argomento descrive le credenziali del database necessarie per creare ed eseguire le stored procedure.

Per impostazione predefinita, tutti gli utenti hanno l'autorizzazione a creare una procedura. Per creare una procedura, è necessario disporre dei USAGE privilegi sul linguaggio PL/pgSQL, che è concesso di default. PUBLIC Solo gli utenti con privilegi avanzati e i proprietari hanno per impostazione predefinita l'autorizzazione di richiamare una procedura. I superutenti possono eseguire REVOKE USAGE PL/pg SQL da un utente se vogliono impedire all'utente di creare una procedura memorizzata.

Per richiamare una procedura, è necessario che vi venga concesso il EXECUTE privilegio sulla procedura. Per impostazione predefinita, EXECUTE il privilegio per le nuove procedure viene concesso al proprietario della procedura e ai superutenti. Per ulteriori informazioni, consulta GRANT.

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

L'SECURITYattributo controlla i privilegi di una procedura per accedere agli oggetti del database. Quando si crea una stored procedure, è possibile impostare l'SECURITYattributo su DEFINER oINVOKER. Se si specifica SECURITYINVOKER, la procedura utilizza i privilegi dell'utente che richiama la procedura. Se si specifica SECURITYDEFINER, la procedura utilizza i privilegi del proprietario della procedura. INVOKERè l'impostazione predefinita.

Poiché una SECURITY DEFINER procedura viene eseguita con i privilegi dell'utente che la possiede, è necessario assicurarsi che la procedura non possa essere utilizzata in modo improprio. Per assicurarti che SECURITY DEFINER le procedure non possano essere utilizzate in modo improprio, procedi come segue:

  • EXECUTEConcedi SECURITY DEFINER le procedure a utenti specifici e non aPUBLIC.

  • 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 riesci a qualificare il nome di un oggetto in base al relativo schema, search_path impostalo durante la creazione della procedura utilizzando l'SETopzione. 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'SETopzione, consultaCREATE 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;