2009-05-22 64 views
0

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

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

+0

我相当肯定这是不可能的... – 2009-05-22 19:07:18

回答

2

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

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

+0

谢谢,这是我们必须要做的。 – joelsand 2009-05-22 19:08:32

4

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

希望这有助于

比尔

1

你可以得到计算机和连接字符串的信息,但是这基本上它。

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

0

Oracle可以给你的exe名称,但SQL Server不能 - 不同的体系结构。

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 
0

您也可以在客户机上的进程的ID,所以如果你有映射的一些神奇的方式,以一个进程的名字,那么你可以做到这一点。

相关问题