我目前正在研究修改应用程序元数据的存储过程。此存储过程只能在应用程序脱机时运行。我不希望开发人员不小心调用它并破坏某些东西,所以我认为我很聪明,将这个块插入到存储过程的顶部:
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,是直接发送到一台服务器还是来自链接服务器组?