2016-02-09 2 views
0

Как я могу зашифровать функцию на SQL Server, чтобы ее нельзя было редактировать другим пользователям? Заранее спасибо.Как зашифровать функцию в SQL Server

+1

Удалить привилегию, чтобы просмотреть функции для других пользователей –

ответ

4

Используйте ENCRYPTION вариант:

CREATE FUNCTION testFunction() 
RETURNS int 
WITH ENCRYPTION 
AS 
BEGIN 
RETURN 1 
END 

Это означает, что определение не будет храниться в любом месте, легко читается, например:

SELECT m.definition 
FROM sys.sql_modules m 
JOIN sys.objects o 
on M.object_id = o.object_id AND o.type = 'FN' AND o.name = 'testFunction' 

вернет ноль, и если пользователь (даже sysadmin) пытается использовать SSMS для изменения функции, которую они получат MessageBox, заявив, что текст зашифрован и не может быть восстановлен. Тем не менее, за MSDN,

Определение понятия функций, созданных с помощью опции ENCRYPTION не может быть просмотрен с помощью sys.sql_modules; однако отображается другая информация о зашифрованных функциях.

и

Относится к: SQL Server 2008 с помощью SQL Server 2016.

Указывает, что компонент Database Engine преобразует исходный текст CREATE FUNCTION заявления на запутанном формате. Результат обфускации не отображается непосредственно в любых видах каталога. Пользователи, не имеющие доступа к системным таблицам или файлам базы данных, не могут получить обфускацию текста. Тем не менее, текст будет доступен для привилегированных пользователей, которые могут либо обращаться к системным таблицам через порт ЦАП, либо напрямую обращаться к файлам базы данных. Кроме того, пользователи, которые могут подключить отладчик к серверному процессу, могут извлечь исходную процедуру из памяти во время выполнения. Дополнительные сведения о доступе к системным метаданным см. В разделе Конфигурация видимости метаданных.

Использование этого параметра запрещает публикацию функции как часть репликации SQL Server. Этот параметр не может быть указан для функций CLR.

Вы по-прежнему должны обеспечить правильные привилегии для решения таких сценариев. Вы можете прочитать немного более подробно об этом here.

В конце концов, если это предназначено для отправки клиенту, к которому вы не хотите иметь доступ к источнику, они смогут получить к нему доступ, если они будут повторно настойчивыми (используя отладчик).

+0

Есть ли способ, где я просто поставить пароль (но не обязательно пароль, просто пример) на него, и когда я хотел изменить что-то на нем, тогда я просто использую этот пароль? @Dan Field – JanLeeYu

+0

На самом деле это не так. У вас будет пароль в учетной записи, и эта учетная запись может принадлежать роли, которой разрешено изменять функции. Тем не менее, любой, у кого есть владелец на БД или sysadmin на сервере, сможет «DROP» использовать эту функцию в любом случае. только способ контроля, который должен контролировать доступ к БД .... –

+0

Хорошо. похоже, что ты прав. Я тоже ничего не нашел в сети. Но я действительно надеюсь, что смогу найти ... ха-ха. – JanLeeYu

3

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

Вы не можете запретить им иметь правильные разрешения, если у них есть физический доступ к SQL Server.

  • Они могут просто отказаться от него, а затем создать все, что захотят, с тем же именем; поэтому их собственный код берет на себя для вашего исходного кода

  • Они могут расшифровывать его различными способами; см. dba.stackexchange вопрос How to view an encrypted view or stored procedure

    • Red Gate SQL Prompt делает это на свой собственный

    • Заменить содержимое с тем же именем, а затем XOR результаты, чтобы увидеть оригинальную

    • Получите еще сложнее с поиском в ОЗУ.

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