从SQL Server的存储过程中,可以获取拥有连接的可执行文件(即MyApp.exe)的名称吗?我知道有APP_NAME(),但似乎只是返回连接字符串中传递给“应用程序名称”参数的任何字符串。从T-SQL存储过程获取应用程序可执行文件名称
如果这是可能的,该怎么办?谢谢。
从SQL Server的存储过程中,可以获取拥有连接的可执行文件(即MyApp.exe)的名称吗?我知道有APP_NAME(),但似乎只是返回连接字符串中传递给“应用程序名称”参数的任何字符串。从T-SQL存储过程获取应用程序可执行文件名称
如果这是可能的,该怎么办?谢谢。
不幸的是我不知道有任何这样的事情 - 记住,连接来自最有可能的完全不同的机器。
也许你可以设计你的安全性,以便不同的应用程序使用不同的用户名来访问数据库。找到当前用户很容易。
谢谢,这是我们必须要做的。 – joelsand 2009-05-22 19:08:32
除非您修改存储过程以传递应用程序名称,否则您将被卡住APP_NAME()的结果。希望开发人员可以在其中放置有意义的值,而不是仅仅接受默认值,这通常表示用于构建应用程序的开发工具。
希望这有助于
比尔
你可以得到计算机和连接字符串的信息,但是这基本上它。
通过监控和其他措施,您可以确保开发人员始终在其连接字符串中使用应用程序名称。例如,您可以记录它不是批准的应用程序名称的情况,也可以使用分析器来查看事情。
Oracle可以给你的exe名称,但SQL Server不能 - 不同的体系结构。
我意识到这不完全是你在找什么。但是,您可以使用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
您也可以在客户机上的进程的ID,所以如果你有映射的一些神奇的方式,以一个进程的名字,那么你可以做到这一点。
我相当肯定这是不可能的... – 2009-05-22 19:07:18