Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从T-SQL存储过程获取应用程序可执行文件名_Sql Server_Stored Procedures_Executable - Fatal编程技术网

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

Sql server 从T-SQL存储过程获取应用程序可执行文件名,sql-server,stored-procedures,executable,Sql Server,Stored Procedures,Executable,从SQL Server中的存储过程中,是否可以获取拥有连接的可执行文件(即MyApp.exe)的名称?我知道有APP_NAME(),但它似乎只返回传递到连接字符串中“Application NAME”参数的字符串 如果这是可能的,怎么做?谢谢。不幸的是,我没有意识到任何这样的事情——请记住,连接很可能来自完全不同的机器 也许您可以设计安全性,以便不同的应用程序使用不同的用户名访问数据库。查找当前用户很容易。除非您修改存储过程以传递应用程序名,否则您将无法使用app_name()的结果。希望开发人

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


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

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


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

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

希望这有帮助


Bill

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


通过监视和其他措施,您可以确保开发人员在其连接字符串中始终使用应用程序名称。例如,您可以记录未经批准的应用程序名称的情况,或者使用探查器查看情况。

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

我意识到这不正是您要寻找的。但您可以通过使用DBCC INPUTBUFFER确定一点调用堆栈。如果您将这样的逻辑放入StoreProdure中,并将其记录在某个地方,您可能会获得有关调用方的一些信息

            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,因此如果您有某种神奇的方法将其映射到进程名称,那么您就可以这样做

我相当肯定那是不可能的…谢谢,这是我们必须要做的。