Это проблема курицы и яйца. Если ваше приложение имеет доступ к секретному ключу (ключу для шифрования строки подключения), любой, работающий с теми же правами, что и ваше приложение, также имеет его.
Лучший способ справиться с этим - вообще не иметь секрета и не использовать login / pwd в строке подключения SQL Server, а использовать встроенную защиту (SSPI). Таким образом, ваше приложение будет проходить аутентификацию в базе данных, используя свои учетные данные Windows (учетную запись, от имени которой работает ваше приложение), без отправки каких-либо учетных данных по проводам (обычная аутентификация означает, что login / pwd передается между приложением и db при каждом открытии соединение), и вам не нужно хранить пароль. Вам просто нужно убедиться, что пароль к действующей учетной записи нелегко угадать. После этого вы так же надежны, как и учетная запись (о которой нечего и говорить, но гораздо лучше, чем передавать учетные данные между процессами).
Обратите внимание, что все, что выполняется с теми же учетными данными (любой код в вашем приложении), также будет работать с правами учетной записи службы.
Вы также должны ограничить действия, которые может выполнять учетная запись приложения на БД, до необходимого минимума (без admin / dbo).