2012-02-18 3 views
4

Я довольно новичок в C#, я занимаюсь кучей вещей, но мне не хватает многих основ. В любом случае, я делаю программу, в которой пользователь должен войти в систему, а затем проверяет, совпадает ли введенный пароль с именем, указанным в базе данных.Безопасное подключение к базе данных mySQL в C#

В любом случае, я знаю, что есть способы войти в код скомпилированной программы, и я хотел бы знать, есть ли что-нибудь, что я должен сделать, чтобы никто не мог видеть данные входа в систему данных MySQL каким-то образом.

Благодаря

ответ

6

В зависимости от ваших требований и требований существует множество различных способов: Protect Connection Information.

Одно простое правило, никогда не включайте строки подключения базы данных в скомпилированный код !!!

Некоторые ссылки
Protect Connection Information
SO - Encrypt connection string in NON ASP.Net applications
MSDN Securing Connection Strings

Далее до вопросов, поднятых в комментариях.
Конфигурация второй или любой строки подключения также должна ограничивать доступ приложений к базе данных с помощью Role Base Access Control, чтобы уменьшить разрешения, предоставляемые приложению, а также процедуры или команды Sql, которые он может выполнить до минимума.

+1

Даже если вы зашифруете его, и клиент имеет ключ шифрования (который должен быть способен расшифровать его во время выполнения для подключения к базе данных), клиент может вручную расшифровать строку подключения и проверить учетные данные для входа. –

+0

Если у предполагаемого пользователя была возможность декомпилировать ваш код, найдите ключ, расшифруйте строку соединения, а затем да, в этот момент ваша база данных и данные должны быть защищены путем ограничения возможностей приложений с помощью Ролей. – Lloyd

2

Единственный способ помешать людям видеть ваш MySQL строку соединения учетных данных будет использовать трехуровневую архитектуру, где у вас есть веб-сервер или служба, работающие на сервере, который содержит строку соединения и делает запросы к базе данных. Ваши клиентские приложения будут взаимодействовать с веб-сервером/службой.

1

Я согласен с Ллойдом.

В дополнение к аспекту безопасности сохранение строки соединения из скомпилированного кода означает, что если вам по каким-то причинам необходимо изменить его, вам не нужно перекомпилировать и повторно развернуть код. Часто вы не знаете, что кто-то испортил имя или имя базы данных или учетные данные, пока ваш сайт не перестанет работать. В середине ночи.

+0

Прошу прощения, но что это значит даже для того, чтобы «сохранить строки соединения из скомпилированного кода». – user1071461

+0

В вашем вопросе вы говорите, что беспокоитесь о ком-то, кто может «попасть в код скомпилированной программы» и посмотреть ваш MySQL данные. Это говорит о том, что у вас есть информация о соединении с базой данных в вашем скомпилированном коде.Любой, кто хочет получить доступ к базе данных для просмотра сохраненных паролей (и других данных), потребует учетных данных из строки подключения для доступа к базе данных. – DOK

1

Я думал, что это будет проблемой для моей программы. Поэтому я создаю файл PHP для обработки данных POST и возвращаю ответ. Где в файле PHP на моей стороне находится соединение с базой данных, а также только ограничение возврата данные моей программе на C#. И программа C# затем читает ответ и получает соответствующие данные. Это сделает так, что программа сама делает HTTP POST и не знает пользователя базы данных и пароль. Как и дать мне контроль над тем, какие данные могут быть отправлены в программу C#.

+0

Кажется, самый безопасный метод. Из того, что я читаю здесь и в других местах, прямое подключение к БД является наихудшим, потому что учетная информация, безусловно, будет перехвачена. Это и я нахожу, что боль в заднице делает простые вещи с mysql в C#. в php это вообще не проблема, но в C# мне пришлось пройти через раздражающие циклы, чтобы правильно вставлять запросы (нужно было сделать приложение, в котором пользователь должен вводить данные mysql на свой собственный сервер) – user1071461

Смежные вопросы