Amazon Redshift non supporterà più la creazione di nuovi Python UDFs a partire dalla Patch 198. Python esistente UDFs continuerà a funzionare fino al 30 giugno 2026. Per ulteriori informazioni, consulta il post del blog
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
In questo argomento vengono descritte 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, devi disporre del privilegio USAGE sulla lingua PL/pgSQL, which is granted to PUBLIC by default. Only superusers and owners have the privilege to call a procedure by default. Superusers can run REVOKE USAGE on PL/pgSQL di un utente se desidera impedire all'utente di creare una procedura memorizzata.
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. Questo attributo determina quali privilegi vengono utilizzati durante l’esecuzione delle istruzioni nel corpo della stored procedure. 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.mytableinvece di solomytable.Se non puoi qualificare un nome di oggetto in base al suo schema, imposta
search_pathdurante la creazione della procedura utilizzando l'opzione SET. Impostasearch_pathper 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;