2009-05-22 108 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,所以如果你有映射的一些神奇的方式,以一個進程的名字,那麼你可以做到這一點。

相關問題