Хранимая процедура с необязательным параметром, который не отображается в SQL Server Management Studio "execute stored procedure" или " script stored procedure"



В среде SQL Server Management Studio (SSMS) можно выполнить хранимую процедуру с помощью графического интерфейса пользователя. Это можно сделать, щелкнув правой кнопкой мыши на хранимой процедуре в Обозревателе объектов и выбрав либо "выполнить хранимую процедуру", либо "написать хранимую процедуру как > создать в > новое окно редактора запросов".



Оба они приводят к заранее построенному SQL-запросу для выполнения SP, и оба они включают необязательные параметры из SP. Есть ли способ сделать его таким необязательным параметры "скрыты"?



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



Я пометил SQL Server 2014 и 2008 R2 на случай, если есть какая-то опция, которую я могу установить в самом SP.

557   1  

1 ответ:

Можно обернуть хранимую процедуру в другую:

CREATE PROCEDURE dbo.my_orig_proc
    @id INT
   ,@some_param_default INT = 10

AS
BEGIN
...
END

Обертка:

CREATE PROCEDURE dbo.my_wrapper_proc
   @id INT
 AS
 BEGIN
     EXEC dbo.my_orig_proc @id;
 END

Я бы также ограничил доступ к исходным процедурам, если это необходимо.


Другой способ-добавить проверку и не позволять конкретному пользователю переопределять значение:

CREATE PROCEDRUE dbo.my_orig_proc
   @id INT,
   ,@some_param_default INT = 10
AS
BEGIN
   IF USER_NAME() = 'user_name' AND @some_param_default <> 10
      RAISERROR('You cannot change @some_param_default value' ,16,1);
END

Недостаток: вам нужно изменить значение параметра в двух местах, и если пользователь имеет impersonate privilige, он все еще может выполнить его.

Comments

    Ничего не найдено.