2009-03-13 13 views
10

Mi empresa de trabajo tiene un servidor MSSQL 2005. Tengo dos preguntas acerca de averiguar de usuario del registro actual y cualquier manera de enviar un mensaje de advertencia:¿Cómo encontrar el nombre de usuario y el nombre de la máquina para el acceso al servidor SQL

La primera pregunta es si hay algún T-SQL o SP disponible para averiguar el nombre de usuario y el nombre de usuario de inicio de sesión actuales. Si el usuario está utilizando un nombre de servidor de SQL para acceder remotamente al servidor SQL, ¿hay alguna forma de averiguar el nombre de esa ventana del usuario (el nombre para iniciar sesión en la ventana)?

Mi siguiente pregunta es si puedo obtener el nombre de usuario o ID, ¿hay alguna manera de enviar un mensaje de advertencia como "actualmente el servidor SQL está limpio o respaldado, no inicie sesión en este momento" . Supongo que puede ser difícil. Es posible que deba enviar un correo electrónico al usuario.

El servidor SQL solo es accesible en la empresa. El servidor SQL tiene una lista de usuarios como usuarios de inicio de sesión: usuarios de Windows, usuarios de SQL y sa.

Respuesta

30
SELECT SUSER_SNAME(), HOST_NAME() 

Si la conexión es "sa" (o cualquier otra sesión de SQL), entonces usted no puede encontrar el nombre de usuario de dominio/ventanas. SQL Server solo sabe que es "sa" o que el inicio de sesión de SQL.

HOST_NAME puede no ser confiable tampoco, se puede establecer en la cadena de conexión ("Nombre de la aplicación"). O podría ser vaga por ejemplo, "Microsoft Office" de forma predeterminada para Access, Excel, etc

Se podría dar marcha atrás a través de client_net_address en sys.dm_exec_connections y hacer coincidir la dirección MAC a IP y averiguar quién está conectado ...

4

Un manera fácil de averiguar tanto el anfitrión como usuario es

EXEC sp_who2; 

donde se obtiene alguna otra información que puede ser bueno saber, como si el usuario está activo y así sucesivamente ... no resuelve los problemas que gbn anunciado.

3

Gracias por todas sus sugerencias primero. Probé todos los métodos y creo que el método de Joakim Backman satisface mis necesidades. Aquí hay un resumen de lo que descubrí.

  • La consulta de sys.syslogins solo muestra la información de inicio de sesión. El accdate no da la marca de tiempo del usuario de inicio de sesión actual. Traté de iniciar sesión desde otra aplicación a mi SQL y esta consulta no muestra el inicio de sesión.
  • SELECT SUSER_SNAME(), HOST_NAME() solo listan a un usuario en el servidor SQL. Por ejemplo, inicio sesión como mi nombre en el servidor SQL. El resultado de esta consulta solo muestra mi nombre y el nombre de la máquina. Esta consulta no muestra usuarios actuales en el servidor SQL.
  • exec sp_who2 lista la información que necesito. Enumera el nombre de la máquina del nombre de usuario actual, el estado activo, el acceso del usuario del nombre db y el comando utilizado.

Para obtener la información que uso en SP, debo filtrar y unir la información con otras tablas, como los correos electrónicos. Estos son los códigos que uso:

DECLARE @retTable TABLE (
SPID int not null 
, Status varchar (255) not null 
, Login varchar (255) not null 
, HostName varchar (255) not null 
, BlkBy varchar(10) not null 
, DBName varchar (255) null 
, Command varchar (255) not null 
, CPUTime int not null 
, DiskIO int not null 
, LastBatch varchar (255) not null 
, ProgramName varchar (255) null 
, SPID2 int not null 
, REQUESTID INT 
) 

INSERT INTO @retTable EXEC sp_who2 

SELECT Status, Login, HostName, DBName, Command, CPUTime, ProgramName -- * 
    FROM @retTable 
    --WHERE Login not like 'sa%' -- if not interested in sa 
    ORDER BY Login, HostName 
Cuestiones relacionadas