#mysql #sql-server #security
#mysql #sql-сервер #Безопасность
Вопрос:
У меня проблема с безопасностью у одного из наших дистрибьюторов. Мне нужно запретить им доступ к определенным данным в нашей базе данных. Поскольку они администрируют базу данных, я не могу использовать элементы управления паролями в самой базе данных для защиты данных. Я думаю, что мне нужно зашифровать конфиденциальные данные в базе данных и внедрить ключ шифрования в программное обеспечение, которое мы создаем. Таким образом, распространитель может копаться в базе данных сколько угодно, но конфиденциальные данные будут для него непонятны. Я вижу, как это может быть сделано в MYSQL. Существуют функции КОДИРОВАНИЯ и ДЕКОДИРОВАНИЯ, которые позволяют мне передавать ключ в качестве параметра. Я могу встроить эти ключи в часть программного обеспечения, заблокировать программное обеспечение, и это позволит мне вставлять и извлекать информацию. Но как насчет MS SQL. Как я могу зашифровать данные, чтобы даже кто-то, кто является администратором базы данных, не мог прочитать эти данные?
Спасибо,
Эллиотт
Ответ №1:
Для MS SQL существует множество документации по шифрованию, и, основываясь на том, что вы сказали о MYSQL, я думаю, вас больше всего заинтересуют криптографические функции.
Обратите внимание, что я был бы осторожен с тем, какие методы вы шифруете своим собственным ключом, поскольку трассировка в базе данных или другие средства могут быть использованы для получения ключа путем проверки отправляемых вами SQL-команд.
Комментарии:
1. Ссылка на криптографические функции была полезной. Я также нашел этот сайт с особенно наглядным примером. coder.amplify.com/2010/05/26 /…
Ответ №2:
В MSSQL определенно есть функциональность шифрования / дешифрования:
http://blog.sqlauthority.com/2009/04/28/sql-server-introduction-to-sql-server-encryption-and-symmetric-key-encryption-tutorial-with-script/ [это учебное пособие]
Вероятно, вам нужен кодовый, а не шифрующий файл…
Ответ №3:
Из этой статьи:http://www.sql-server-performance.com/articles/dev/encryption_2005_2_p1.aspx
(Который, кстати, является первым результатом поиска в Google encrypt data sql server
)
Симметричные ключи
Симметричный ключ — это один ключ, который используется как для шифрования, так и для дешифрования. Это быстрый, часто используемый метод шифрования. Как и в случае с сертификатом, при создании симметричных ключей доступно множество параметров. В большинстве случаев нам нужен только ограниченный набор параметров. Вы можете обратиться к книгам онлайн для получения всех параметров.
CREATE SYMMETRIC KEY TestSymKey
WITH ALGORITHM = TRIPLE_DES
ENCRYPTION BY CERTIFICATE CertificateTest2
Вы можете указать алгоритм шифрования для симметричного ключа. DES, TRIPLE_DES, RC2, RC4, DESX, AES_128, AES_192 и AES_256 — это алгоритмы шифрования, доступные для шифрования данных SQL Server. Алгоритмы шифрования AES в настоящее время поддерживаются только в Windows 2003. Если вы используете Windows 2000 или Windows XP, у вас нет доступа к алгоритмам шифрования AES с SQL Server. Если вы попытаетесь использовать алгоритм шифрования AES, вы получите сообщение об ошибке:
Либо алгоритм не был указан, либо длина бита и алгоритм, указанные для ключа, недоступны в этой установке Windows.
Вы можете зашифровать симметричный ключ с помощью PASSWORD
, SYMMETRIC KEY
, ASYMMETRIC KEY
или CERTIFICATE
.
Также доступны команды ALTER SYMMETRIC KEY
и DROP SYMMETRIC KEY
для улучшения обслуживания.
После создания симметричного ключа остается только использовать его. Есть три функции, которые вы можете использовать с симметричными ключами: Key_GUID
, EncryptByKey
и DecryptByKey
.
OPEN SYMMETRIC KEY TestSymKey
DECRYPTION BY CERTIFICATE CertificateTest2;
DECLARE @Encryptvalsym varbinary(MAX)
SET @Encryptvalsym = EncryptByKey( key_guid('TestSymKey'),'scott')
SELECT convert(varchar(max),DecryptByKey(@Encryptvalsym))
Перед использованием СИММЕТРИЧНОГО КЛЮЧА вам необходимо открыть его с помощью OPEN SYMMETRIC KEY
команды. Для шифрования данных вам необходимо передать GUID симметричного ключа. Однако для ее расшифровки вам не обязательно передавать GUID. Вместо этого вы должны открыть зашифрованный симметричный ключ, используя правильный метод дешифрования и значение.
Чтобы повысить безопасность симметричных ключей, вы можете добавить средство аутентификации во время шифрования. Вы должны использовать то же значение при расшифровке.
OPEN SYMMETRIC KEY TestSymKey
DECRYPTION BY CERTIFICATE CertificateTest2;
DECLARE @Encryptvalsym1 varbinary(MAX)
SET @Encryptvalsym1 = EncryptByKey(key_guid('TestSymKey'),'scott',1,'SQL Server')
— Расшифровка с помощью симметричных ключей
SELECT convert(varchar(max),DecryptByKey(@Encryptvalsym1,1,'SQL Server'))
Ответ №4:
Я бы пропустил алгоритмы, ориентированные на базу данных, и перенес их в решение, управляемое программным обеспечением. Таким образом, вы можете полностью избежать отправки ключа по проводам и его компрометации администратором, отслеживающим пакеты. (Это, конечно, при условии, что вы используете транспортные средства по умолчанию для подключения к базе данных)
Я использовал эту ссылку в качестве ссылки для создания моей библиотеки безопасности данных. Я предпочитаю сценарий, управляемый программным обеспечением, потому что он позволяет использовать настолько тяжелый или облегченный вариант, насколько требуется для решения, и позволяет управлять ключами таким образом, чтобы компрометация вашей базы данных не означала, что ваши данные также будут скомпрометированы.