Как зашифровать все существующие хранимые процедуры базы данных

Я раньше преподавал программирование, и у Вашего брата есть одно основное преимущество перед большинством моих студентов, которых он хочет изучить:)

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

Лично я думаю, Python и Ruby сделали бы большие первые языки.

РЕДАКТИРОВАНИЕ: список распределений работы по программированию новичка казался ночным, мог бы быть, что Вы ищете.

5
задан Marc 25 November 2009 в 15:27
поделиться

3 ответа

У меня есть та же проблема.

Мое решение - поставить "- С ШИФРОВАНИЕМ" во все мои хранимые процедуры. Эта версия используется разработчиками и хранится в системе управления версиями.

Затем я использую инструмент (например, sed) в своей сборке, чтобы заменить "- WITH ENCRYPTION" на "WITH ENCRYPTION" в файлах, прежде чем я отправлю их для установки .

Для решения на чистом SQL вы можете использовать REPLACE.

3
ответ дан 13 December 2019 в 22:10
поделиться

С ШИФРОВАНИЕМ означает, что код процедуры не хранится в таблице SysComments.

Вы можете написать сценарий, который выполняет exec sp_helptext 'MyProcName' и получает содержимое в a VarChar (MAX) , чтобы он мог легко удерживать многострочные / большие процедуры, а затем изменять процедуру из исходного состояния

CREATE MyProcName AS

SELECT SecretColumns From TopSecretTable

изменить CREATE на ALTER и AS , окруженный пробелом, табуляцией или новой строкой (хорошее место для использования регулярных выражений) до С ШИФРОВАНИЕМ AS

ALTER MyProcName WITH ENCRYPTION AS

SELECT SecretColumns From TopSecretTable

Это скроет весь код для сохраненной процедуры на производственном сервере.

Вы можете поместить это в LOOP или КУРСОР (на самом деле не операция на основе набора IMHO) для всех объектов определенного типа и / или соглашения об именах, которые вы хотите encrypt и запускать его каждый раз при развертывании.

2
ответ дан 13 December 2019 в 22:10
поделиться

Я бы рекомендовал создать sproc в многострочную строковую переменную, а затем вставить или изменить его с помощью sp_executesql . Единственным неприятным недостатком этого подхода является удвоение одинарных кавычек для строк.

DECLARE @action varchar(max);
SET @action = 'CREATE'; /* or "ALTER" */

DECLARE @withEncryption varchar(max);
SET @withEncryption = ''; /* or "WITH ENCRYPTION" */

DECLARE @sql varchar(max);
SET @sql = @action + ' PROCEDURE dbo.Something'
    (
        ....
    ) ' + @withEncryption +
    ' AS
    BEGIN
        DECLARE @bob varchar(10);
        SET @bob = ''Bob'';
        ....
    END;
    ';

EXEC sp_executesql @statement = @sql;

[Обратите внимание на пробелы вокруг переменных.]

Все мои скрипты используют этот метод, который хорошо работает, если вы привыкнете к удвоению кавычек.

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

1
ответ дан 13 December 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: