Я хочу скрыть скрипт хранимой процедуры в SQL Server 2008 - PullRequest
7 голосов
/ 04 марта 2012

Я написал хранимую процедуру в SQL Server.

Теперь я просто не хочу, чтобы кто-либо видел мой сценарий или редактировал его.

Пожалуйста, помните, что я работаю над стандартным логином и паролем. Который делится с каждым.

Таким образом, я могу позволить каждому выполнить процедуру. Но они не должны видеть сценарий.

Ура! спасибо

Ответы [ 4 ]

7 голосов
/ 04 марта 2012

Вы ищете WITH ENCRYPTION, который шифрует код вашего сохраненного процесса.

CREATE PROCEDURE usp_MyProc
WITH ENCRYPTION
AS
SELECT *
FROM myTable

Просто предостережение от MSDN:

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

Некоторые ссылки и дальнейшее чтение:

3 голосов
/ 04 марта 2012

SQL Server не обеспечивает надежного метода защиты кода модуля.Предложение WITH ENCRYPTION должно быть названо как-то так, как указано в WITH LOOSE_OBFUSCATION, поскольку «шифрование» очень легко предотвратить.Вы не сможете использовать что-либо в SQL Server, чтобы сделать код неразборчивым для кого-либо, кроме самых случайных наблюдателей - каждый решил, что сможет побить нативные методы без проблем.

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

2 голосов
/ 04 марта 2012

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

CREATE PROCEDURE dbo.foo 
WITH ENCRYPTION 
AS 
BEGIN 
    SELECT 'foo' 
END
0 голосов
/ 29 октября 2018

Избегайте использования параметра WITH ENCRYPTION, кроме как для очень определенных требований. Это может привести к административным проблемам позже.

Использование WITH ENCRYPTION не рекомендуется для сокрытия определения / кода объекта. К счастью, есть альтернативный подход для SQL Server.

Если требуется скрыть определение / код какого-либо объекта от пользователя, то для этой цели можно использовать стандартные разрешения. Это может быть сделано путем предоставления или отзыва прав на определение вида.

Если разрешение View Definition отклонено для объекта любому пользователю, тогда пользователь не сможет просматривать объект в SSMS или просматривать его код с помощью системной хранимой процедуры sp_helptext.

Разрешение View Definition может также использоваться для других объектов в SQL Server, таких как таблицы, синонимы и т. Д. Разрешения View Definition могут быть предоставлены или запрещены с использованием T-SQL или SSMS

Для реализации разрешений через SSMS:

  1. Щелкните правой кнопкой мыши объект, необходимый для скрытия определения
  2. Нажмите «Свойства», появится рамка, выберите «Предоставить или запретить разрешение на просмотр определения» для объекта для выбранного пользователя или роли.

Запрет разрешения View Definition скроет объект для определенного пользователя, а также пользователь не сможет увидеть определение с помощью sp_helptext

Другие разрешения, такие как SELECT, INSERT и т. Д., Останутся без изменений.

Разрешения являются гибкими и могут быть реализованы на следующих четырех уровнях:

  1. Уровень сервера. На уровне сервера это разрешение будет отображаться как Просмотр любого определения 2. Уровень базы данных
  2. Уровень схемы
  3. Уровень индивидуального лица

Спасибо, надеюсь, это прояснит ситуацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...