Я использую SQL Server 2008 Enterprise на Windows Server 2003 Enterprise. Я разработал некоторую процедуру хранения для SQL Server, и машина, на которой установлен SQL Server, не может полностью находиться под моим контролем (может использоваться ненадежной третьей стороной).
Я хочу защитить исходный код T-SQL моей процедуры хранения (т. Е. Недоступный для просмотра какой-либо другой стороной) с помощью функции шифрования процедуры хранения, предоставляемой SQL Server. Я не уверен, является ли процедура зашифрованного хранилища на 100% безопасной и есть ли у администратора машины (установленного с SQL Server) еще способы просмотра исходных кодов процедуры хранения?
заранее спасибо, Джордж
Администратор баз данных SQl-сервера всегда сможет просмотреть содержимое хранимой процедуры, если будет достаточно стараться. Единственный способ усложнить эту задачу - использовать сторонний продукт, такой как sql-shield, который будет использовать другую схему шифрования, чтобы предотвратить успешные «обычные» атаки дешифрования. Всякий раз, когда вы даете кому-то зашифрованные данные и доступ к расшифровке ключ, вы никогда не сможете предотвратить расшифровку данных (независимо от того, насколько запутанным может быть процесс). Шифрование действительно "хорошее" только тогда, когда ключ шифрования и данные недоступны вместе. Вы также можете рассмотреть возможность обфускации своего кода с помощью хранимой среды CLR процедура и любой из множества доступных обфускаторов .net. Хранимые процедуры CLR для примера.
Это «безопасно» в том смысле, что SQL Server сохранил как зашифрованный текст процедуры, так и ключ, необходимый для его расшифровки, в вашей базе данных, поэтому, когда ему нужен текст процедуры - для компиляции плана запроса для его выполнения - он может его расшифровать.
Самое большее, что может сделать SQL Server, - это запутать ключ, пытаясь скрыть его, чтобы его не было легко украсть.
Исторически существовала атака повторного воспроизведения, при которой, если вы использовали ALTER PROCEDURE, она повторно использовала тот же ключ. Используя ALTER PROCEDURE с известным открытым текстом, вы можете сравнить полученный зашифрованный вывод и восстановить поток ключей, а затем использовать его для дешифрования исходного зашифрованного текста. (Он использует потоковый шифр RC4, который создает псевдослучайную строку битов, называемую потоком ключей, который затем подвергается XOR с открытым текстом для шифрования или XOR с зашифрованным текстом для расшифровки.) Я не знаю, так ли это до сих пор в SQL Server 2008.
Будьте уверены, что даже если вы используете шифрование для хранимых процедур в SQL Server 2008, его можно очень легко расшифровать с помощью сторонних инструментов. Их много, и одна из них - http://www.elitude.net/.
Если вы используете проприетарное программное обеспечение, то добавления еще одного уровня с использованием шифрования НЕ будет достаточно, если есть определенный пользователь. Все, что вы можете сделать, это попросить их подписать Соглашение о неразглашении информации (NDA) и соблюдать эти правила.