0

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

如果这是可能的,怎么做?谢谢。

4

6 回答 6

4

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

希望这可以帮助,

账单

于 2009-05-22T19:09:48.460 回答
2

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

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

于 2009-05-22T19:06:17.500 回答
1

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

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

于 2009-05-26T21:35:23.277 回答
0

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

于 2009-05-26T21:39:27.167 回答
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
于 2009-07-10T19:01:15.207 回答
0

您还可以获取客户端计算机上进程的 ID,因此,如果您有某种神奇的方法将其映射到进程名称,那么您就可以做到。

于 2011-05-16T16:21:09.127 回答