TLDR : purché la connessione di rete al DB sia sicura e fintanto che gli hash salati sono memorizzati nelle tabelle, la chiamata di una procedura memorizzata con una password in chiaro è valida. Penso che il tuo tempo e il tuo impegno siano spesi meglio proteggendo il database dall'accesso non autorizzato del tipo che consente di ottenere una traccia di chiamate di stored procedure.
In primo luogo, comprendo che lo scenario in questione è che un utente malintenzionato può recuperare la password in testo semplice esaminando i valori dei parametri passati alla stored procedure, uno dei quali è la password in chiaro, quindi utilizzare tale password per compromettere un account utente in la tua applicazione.
Se ciò è corretto, l'unica soluzione puramente tecnica che vedo è implementare uno schema PK nell'ambito della stored procedure, in modo che la password debba essere crittografata con la chiave pubblica della stored procedure, il testo cifrato passato nello stored procedura e il valore del parametro decrittografato dallo stesso proc memorizzato con una chiave privata prima di essere utilizzato. (O meglio, come TLS stesso, si può negoziare uno scambio Diffie-Hellman usando altri proc memorizzati e usare una chiave di sessione.) A meno che non si possa trovare qualche implementazione open-source di questo, che ci si fida e si usi, questo sarà un ascensore molto pesante. E ora devi proteggere quella chiave privata.
Ma pensa a cosa stai davvero cercando di proteggerti. In questo scenario, l'utente malintenzionato può leggere le chiamate della procedura memorizzata e ottenere i valori passati. Qualsiasi utente con questo privilegio ha anche accesso in lettura a qualsiasi chiave privata utilizzata o seleziona / inserisce / aggiorna l'accesso alle proprie tabelle? Se è così, anche se passi attraverso l'implementazione di PKI a livello di stored procedure, i tuoi sforzi vengono immediatamente sconfitti.
Permettetemi anche di rispondere in modo specifico all'idea di hashing della password, con un sale ovviamente, e passando il valore hash alla stored procedure. Se si esegue questa operazione, il valore hash è ora la password. Tutto ciò che un utente malintenzionato deve fare, se davvero è in grado di leggere i parametri memorizzati del proc, è ripetere questi parametri esattamente come li vede compromettere il sistema. In realtà non ha bisogno di invertire l'hash e imparare cosa sia la "semplice" password; il valore hash è la password in chiaro ora. Quindi questo schema non ha alcun effetto.