从T-SQL存储过程获取应用程序可执行文件名

时间:2009-05-22 18:59:43

标签: sql-server stored-procedures executable

从SQL Server中的存储过程,是否可以获取拥有该连接的可执行文件(即MyApp.exe)的名称?我知道有APP_NAME(),但这似乎只是返回连接字符串中传递给'Application Name'参数的字符串。

如果可以,怎么办呢?感谢。

6 个答案:

答案 0 :(得分:4)

除非您修改存储过程以传递应用名称,否则您将无法使用APP_NAME()的结果。希望开发人员在那里放置有意义的值,而不是仅仅接受默认值,这通常表示用于构建应用程序的开发工具。

希望这有帮助,

比尔

答案 1 :(得分:2)

不幸的是我不知道任何这样的事情 - 请记住,连接最有可能来自完全不同的机器。

也许您可以设计安全性,以便不同的应用程序使用不同的用户名来访问数据库。找到当前用户很容易。

答案 2 :(得分:1)

您可以从连接字符串中获取计算机和信息,但基本上就是这样。

通过监控和其他措施,您可以确保开发人员始终在其连接字符串中使用Application Name。例如,您可以记录不是批准的应用程序名称的案例,或使用分析器来监视事物。

答案 3 :(得分:0)

Oracle可以为您提供exe的名称,但SQL Server不能 - 不同的架构。

答案 4 :(得分:0)

我意识到这并不是你想要的。但是你可以使用DBCC INPUTBUFFER来确定一些调用堆栈。如果您将这样的逻辑放在storeprodedure中并将其记录到某个地方,您可能会获得有关调用者的一些信息。

            CREATE TABLE #dbc
                (
                  EventType VARCHAR(15),
                  Parameters INT,
                  EventInfo VARCHAR(255)
                )
              DECLARE @execStr VARCHAR(500)
              SET @ExecStr = 'DBCC INPUTBUFFER(' + STR(@@SPID) + ')'



              INSERT    INTO #dbc
                        EXEC ( @execStr
                            )

              SELECT    *
              FROM      #dbc

答案 5 :(得分:0)

您还可以在客户端计算机上获取进程的ID,因此如果您有一些神奇的方法将其映射到进程名称,那么您可以执行此操作。

相关问题