小编mgw*_*854的帖子

防止在 SSMS 之外执行存储过程

我目前正在研究修改应用程序元数据的存储过程。此存储过程只能在应用程序脱机时运行。我不希望开发人员不小心调用它并破坏某些东西,所以我认为我很聪明,将这个块插入到存储过程的顶部:

IF (APP_NAME() NOT LIKE '%SQL Server Management Studio%')
BEGIN
  RAISERROR(N'The stored procedure must be run interactively.', 10, -1, -1);
  RETURN;
END;
Run Code Online (Sandbox Code Playgroud)

这适用于正常执行,但在本地服务器组上运行时,应用程序名称更改为“.Net SqlClient 数据提供程序”。

我找不到另一种方法来确定查询是否来自 SSMS。我无法根据用户名进行区分,因为我们的应用程序使用域帐户。主机名也不是一个选项,因为在某些灾难场景中,从数据库服务器本身访问 SSMS 是预期的操作过程(并且我宁愿在灾难恢复期间不会让任何人感到惊讶,即使它不太可能) .

是否有更好的方法来确定查询是来自 SSMS,是直接发送到一台服务器还是来自链接服务器组?

sql-server ssms

8
推荐指数
1
解决办法
1071
查看次数

标签 统计

sql-server ×1

ssms ×1