Si un atacante obtiene acceso al servidor, es probable que tenga otras preocupaciones además de exponer las credenciales de texto sin cifrar en un archivo.
Además, está en el camino correcto para consultar las mejores prácticas de seguridad. No haga todo este esfuerzo solo para enviar los resultados por correo electrónico. El correo electrónico no es seguro, por lo que sus resultados deben estar encriptados o usar otra cosa, como su mención de SFTP.
Con eso dicho, tienes dos opciones:
Cuenta de Windows: ejecute la tarea como una cuenta dedicada de Windows y use la autenticación integrada. Esto no requerirá almacenar el nombre de usuario / contraseña en la cadena de conexión, pero tendrá que almacenar las credenciales cuando configure la tarea programada. Si esta cuenta está comprometida, ahora debe considerar qué acceso tiene. Ya sea una cuenta de dominio o una cuenta local en el servidor de SQL. Si es el primero, podrán enumerar los recursos del dominio y si el acceso posterior se limitará al servidor de SQL. Finalmente, tenga cuidado con los grupos de seguridad a los que se concede membresía a esta cuenta, si corresponde.
Cuenta de SQL: será específica para la instancia de MSSQL aunque requerirá almacenar la combinación de nombre de usuario / contraseña en la cadena de conexión. Una forma de evitar esto es configurar los permisos NTFS que solo permiten que la cuenta ejecute el acceso a la tarea programada. Por ejemplo, si la tarea se ejecuta como SISTEMA, solo permita el acceso de esa cuenta a su script. No olvide incluir la cuenta utilizada para ejecutar copias de seguridad y su cuenta también.
DPAPI: creo que esto estaría fuera del alcance de lo que está buscando lograr, así que solo mencionaré que DPAPI permite el uso de cifrado asimétrico en los archivos de configuración y demás.
Considere la administración de la cuenta cuando haga su elección. Puede haber políticas que requieren un cambio de contraseña cada ?? dias. Vea qué se aplica y elija el tipo de cuenta que mejor se adapte a lo que desea lograr.
Independientemente de la opción que elija, asegúrese de que la cuenta solo tenga acceso para ejecutar los procedimientos almacenados correspondientes. Esto limitará la exposición en su servidor SQL si la cuenta se ve comprometida.
Finalmente, hay muchos ejemplos de cómo usar PowerShell para ejecutar procedimientos almacenados. Acabo de usar la siguiente cadena de búsqueda que arrojó muchos resultados.
procedimiento almacenado del servidor sql de powershell stackoverflow