如何识别调用存储过程的程序?

4 security sql-server stored-procedures sql-server-2014

作为应用程序数据库设计规范的一部分,我们被要求阻止执行一组直接从 SSMS/osql/sqlcmd 等触发的存储过程;也就是说,它们必须只被允许在应用程序本身内运行。

当我们的团队质疑这是否可行时,我们看到了一个演示,该演示将查询限制在特定系统(实际上它让查询运行,但记录到运行它的表中)。然而,这样做的过程是加密的,所以我们无法知道它是如何完成的。

我们如何做到这一点?

Aar*_*and 7

获取此信息的多种方法:

SELECT APP_NAME();

SELECT PROGRAM_NAME();

SELECT [program_name] 
  FROM sys.dm_exec_sessions 
  WHERE session_id = @@SPID;
Run Code Online (Sandbox Code Playgroud)

请记住,它可以在连接字符串或 Management Studio 的连接属性中被欺骗。如果我使用以下参数进行连接,则上述所有三个都将返回foobar

在此处输入图片说明

  • 回答+恶搞,不错! (3认同)
  • @vijayp 不,您不能根据应用程序名称授予执行权限;该逻辑必须在程序内部。 (2认同)