Standard di codifica stabiliti per il codice pl / pgsql

2

Ho bisogno di standardizzare le pratiche di codifica per il progetto che compromette, tra gli altri, il database pl / pgsql, che ha una certa quantità di codice non banale.

Cerco:

  • Linee guida per la formattazione del codice, in particolare all'interno delle procedure.
  • Linee guida su quali costrutti sono considerati non sicuri (se presenti)
  • Convenzioni sui nomi.
  • Convenzioni sulla documentazione del codice (se questo è praticato)

Qualche suggerimento per i documenti che definiscono buone pratiche nel codice pl / pgsql? Se non sto cercando suggerisce pratiche che consideri buone.

C'è una domanda relativa a TSQL: Qualcuno può raccomandare standard di codifica per TSQL? , che è rilevante anche per psql, ma ho bisogno di maggiori informazioni sulle stored procedure.

Altre domande correlate:

posta jb. 23.10.2012 - 12:48
fonte

1 risposta

5

Alcuni punti della nostra esperienza sia in termini di manutenibilità e sicurezza. Un sacco di cose come la formattazione del codice sono cose che possono essere fatte in un numero qualsiasi di modi finché sei coerente e usi lo spazio bianco in modo appropriato.

Per quanto riguarda ciò che non è sicuro da una prospettiva di sicurezza, l'unica cosa che viene in mente è combinare SECURITY DEFINER, EXECUTE e l'interpolazione delle stringhe. Ciò porta alla possibilità di SQL injection che verrà eseguito come proprietario della funzione. A volte ciò è necessario (quindi utilizzare quote_ident e quote_literal come appropriato), ma quando lo è, il codice deve essere ulteriormente esaminato per i punti deboli. Questo si verifica quando si esegue DDL all'interno di proc stored, in particolare per la gestione degli utenti.

Una precauzione è tuttavia la possibilità che il percorso di ricerca abbia problemi con le funzioni SICUREZZA DEFINER. Potresti volerlo considerare in particolare nei casi in cui gli utenti avranno la possibilità di creare relazioni in altri schemi (o anche relazioni temporanee). Vedi link

Una seconda cosa che preferisco fare è aggiungere COMMENT ON FUNCTION .... dopo ogni definizione di funzione. Penso che questo sia preferibile ai commenti esplicativi dell'API in alto perché può essere richiamato da strumenti di documentazione automatica.

Una terza cosa che consiglio vivamente è di cercare di mantenere le funzioni PLPGSQL nella forma di una query db principale con piccole quantità di logica procedurale di supporto. Questo aiuta sia con chiarezza che con il debug. Quanto più è possibile consolidare in una singola query tanto più velocemente è possibile eseguire il debug della procedura nel suo complesso, perché ci sono meno possibilità di nascondere qualsiasi errore dato.

Infine una grande trappola che si verifica con le funzioni definite dall'utente che vengono chiamate dall'applicazione è che le funzioni richiedono spesso un numero fisso di argomenti e questo può essere un problema in termini di manutenibilità. Consiglierei di leggere questo link che è un tentativo di applicare ciò che si può imparare dal web servizi alle stored procedure di PostgreSQL.

Il mio blog, link , presenta regolarmente pensieri ed esperienze su questo argomento, quindi potrebbe essere utile: -)

    
risposta data 18.02.2013 - 05:18
fonte

Leggi altre domande sui tag