Допустим, два программиста работают над сайтом для магазина. Они создали небольшую базу данных для интернет-магазина. Пользователи должны будут зарегистрироваться и предоставить имя пользователя (адрес электронной почты), пароль, домашний адрес и иметь возможность хранить информацию о кредитной карте в своей учетной записи. Очевидно, вы не хотите, чтобы злоумышленники получали какую-либо информацию. Предположим, что один из программистов был неосторожен, не фильтровал SQL-выражения и не принимал надлежащих мер, чтобы гарантировать, что вредоносный код не будет принят. Программист, работающий с базой данных, что он может сделать, чтобы он гарантировал, что даже если злоумышленник сможет ввести операторы SQL в форму и получить доступ к базе данных, он будет зашифрован? Какой тип шифрования в этом случае будет работать лучше?
В соответствии с этим SQL Server не использует соление при шифровании.
Что я ищу, так это то, что если пользователь введет правильное имя пользователя / пароль, он получит доступ к своей учетной записи, но если злоумышленник использует SQL-инъекцию, он получит зашифрованную базу данных, которую он должен атаковать, чтобы получить информацию ,
Примечание: программисты используют SQL Sever 2012
источник
Ответы:
Шифрование SQL Server предназначено для защиты данных в состоянии покоя, защиты файлов резервных копий и предотвращения доступа кого-либо к файлам данных базы данных в необработанном формате.
это НЕ для защиты данных из приложения, которое было написано и настроено для доступа к этим самым данным. Имейте в виду, что атаки на вашу инфраструктуру, проходящие через одно из ваших приложений, используют эти учетные данные и привилегии для выполнения атаки. это все равно, что отдать свой ключик своему беззащитному родственнику, чтобы он мог догнать, но ожидать, что он не сможет украсть твой телевизор. Даже если вы выполняли шифрование на уровне приложения, у приложения есть ключи для шифрования, так что любой злоумышленник делает то же самое. единственный реальный вариант - привязать ключи к пользователям, а не к самому приложению, чтобы ни один пользователь не смог расшифровать данные cc, которые не были его собственными.
Во-вторых, для легального хранения данных кредитных карт вы должны соответствовать отраслевым стандартам безопасности PCI, которые выходят далеко за рамки этого форума.
Все, что касается вашего вопроса, говорит мне, что вы никогда не должны позволять вашим кодировщикам хранить данные CC. вы, ребята, далеко не там, где вам нужно, чтобы безопасно обрабатывать эти данные.
Изменить: я отмечаю, что вы удалили все ссылки на кредитные карты из вашего OP, поэтому, если это не ваша цель, не обращайте внимания на мои комментарии по стандартам PCI. Мои комментарии по шифрованию SQLServer остаются в силе.
источник
Пожалуйста, обратитесь к таблице dbo.aspnet_Membership провайдера ASP.Net. Он хранит соль пароля на уровне пользователя и шифрует пароли перед их сохранением. Очень похоже на ваше требование.
В SQL Server нет готовых функциональных возможностей, если только вы не используете опцию для шифрования столбца. Но тогда вы застряли с необходимостью использовать тип данных varbinary, а также столкнуться с возможным снижением производительности (на 20% медленнее, чем в некоторых статьях). См. Http://technet.microsoft.com/en-us/library/ms179331.aspx.
источник