TLDR : siempre que la conexión de red a la base de datos sea segura, y mientras los hashes con sal estén almacenados en sus tablas, llamar a un procedimiento almacenado con una contraseña de texto simple es correcto. Creo que su tiempo y esfuerzo se emplean mejor protegiendo la base de datos del acceso no autorizado del tipo que hace posible obtener un seguimiento de las llamadas a procedimientos almacenados.
Primero, entiendo que el escenario en cuestión es que un atacante puede recuperar la contraseña de texto simple revisando los valores de parámetros pasados al procedimiento almacenado, uno de los cuales es la contraseña de texto simple, y luego usar esa contraseña para comprometer una cuenta de usuario en su aplicación.
Si eso es correcto, entonces la única solución puramente técnica que veo es implementar un esquema de PK dentro del alcance del procedimiento almacenado, de modo que la contraseña se debe cifrar con la clave pública del procedimiento almacenado, el texto cifrado se transfiere al procedimiento, y el valor del parámetro, a continuación, descifrado por el propio proceso almacenado con una clave privada antes de ser utilizado. (O mejor, como TLS en sí mismo, podría negociar un intercambio Diffie-Hellman usando otros procedimientos almacenados, y usar una clave de sesión). A menos que pueda encontrar alguna implementación de código abierto de esto por ahí, en la que confíe, y la use, Esto será un levantamiento muy pesado. Y ahora tienes que proteger esa clave privada.
Pero considera de lo que realmente estás tratando de protegerte. En este escenario, el atacante puede leer sus llamadas a procedimientos almacenados y obtener los valores pasados. ¿Cualquier usuario con este privilegio también tendría acceso de lectura a cualquier clave privada que use, o seleccionará / insertará / actualizará el acceso a sus tablas? Si es así, incluso si pasas por el trabajo de implementar PKI en el nivel del procedimiento almacenado, tus esfuerzos se derrotarán instantáneamente.
También permítame responder específicamente a la idea de crear hash de la contraseña, por supuesto, con una sal, y pasar el valor de hash al procedimiento almacenado. Si haces esto, entonces el valor hash es ahora la contraseña. Todo lo que un atacante tiene que hacer, si realmente puede leer los parámetros proc almacenados, es repetir esos parámetros exactamente como los ve para comprometer el sistema. En realidad, no necesita revertir el hash y aprender cuál es la contraseña "simple"; el valor hasheado es la contraseña de texto sin formato ahora. Así que este esquema no tiene efecto.