Я отвечаю на это, чтобы решить проблему безопасности для локального приложения, так как это похоже на ситуацию OP, несмотря на то, что другие ответы рассматривают ее так, как будто это веб-приложение.
Если одна база данных разделяется несколькими пользователями с различными проблемами безопасности, как я подозреваю, то вам действительно не следует хранить строку подключения к базе данных локально, в коде, в конфиге, зашифрованной в конфиге, и т.д. Клиент никогда не должен иметь эту информацию. Это единственный способ по-настоящему гарантировать безопасность на стороне клиента.
Определенное лицо может просто перепроектировать ваш код и дешифровать детали соединения. Кроме того, если они используют что-то вроде .NET Reflector, отлаживают ваш код, они могут использовать отражение, чтобы вытащить строку соединения, включая пароль, из объекта соединения. Тогда для них тривиально напрямую подключаться к вашей базе данных и извлекать любую информацию, которую они хотят. Конечно, у вас может быть белый список IP, но если один из этих пользователей плохой, у вас все еще есть такая же проблема.
Я рекомендую вам создать веб-сервис, который будет управлять вашей базой данных. Программное обеспечение, которое ваши конечные пользователи используют, просто аутентифицируется с помощью веб-службы, используя учетные данные пользователя, а затем использует это для доступа к ресурсам, которым им разрешено. Это число современных приложений.
Если каждый пользователь имеет свою собственную базу данных, то вы можете просто хранить строку подключения зашифрованного локально, так как это будет достаточно, чтобы предотвратить большинство проблем, для злонамеренных людей, имеющих доступ на компьютер пользователей, за исключением.
Очевидно, как сказал Владимир, вы можете принять это как общее решение (зашифровать его в конфиге и надеяться на лучшее), но я действительно не рекомендую это, если требуется какая-либо безопасность. Например, если вы храните пароли пользователей в базе данных - даже в хэшированной форме - это не безопасная идея. Риск, который вы будете запускать с использованием этого метода для всех, заключается в том, что кто-то может украсть все ваши данные или стереть все ваши данные или даже манипулировать данными в своих интересах.
Опираясь на местную безопасность, это не является безопасностью. Если вы дистанционно размещаете базу данных, к которой подключаются несколько изолированных конечных пользователей, вы должны предоставить ее через веб-службу (API), а не предоставлять пользователям прямой доступ к базе данных. Независимо от любой локальной безопасности, которую вы используете, по-прежнему можно получить строку подключения обратно. Даже пароль, вероятно, будет доступен путем отражения. Это связано с соединениями MS SQL. – john
Я предпочитаю хранить эти данные в web.config или app.config и убедиться, что они зашифрованы. пожалуйста, проверьте этот пост. Http: // StackOverflow.com/questions/10168240/encrypting-decrypting-a-string-in-c-sharp –
И если веб-служба (API) недоступна, вы можете как минимум шифровать конфиденциальные данные. Его все еще можно получить, но, по крайней мере, не для всех. – Vladimir