sql >> Base de Datos >  >> RDS >> Sqlserver

Devuelve el nombre de la estación de trabajo actual que está conectada a SQL Server (T-SQL)

Ocasionalmente, puede encontrarse en la situación en la que necesita obtener el nombre de la estación de trabajo actual que está conectada a SQL Server.

Por ejemplo, quizás tenga un procedimiento almacenado que inserte datos y desee registrar el nombre de la estación de trabajo que insertó los datos.

En tales casos, puede usar el HOST_NAME() función.

Esto no debe confundirse con obtener el nombre del servidor.

Ejemplo

Este es un ejemplo de cómo ejecutar una consulta ad-hoc para seleccionar el nombre de la computadora actual.

SELECT HOST_NAME();

Resultado:

Tims-MacBook-Pro

En este caso, Tim ejecutó la consulta desde su MacBook Pro y el nombre de su computadora es Tims-MacBook-Pro.

Probablemente pueda imaginar lo útil que podría ser esto si quisiera poder mirar una fila y ver quién insertó esa fila y desde qué estación de trabajo.

No por razones de seguridad

A pesar de lo útil que es esta función, Microsoft advierte contra su uso por motivos de seguridad. El razonamiento detrás de esto es que, HOST_NAME() es proporcionado por el cliente, lo que posiblemente podría proporcionar datos inexactos.

Por ejemplo, un pirata informático podría obtener acceso falsificando el nombre de host y eso obviamente proporcionaría un registro falso de la estación de trabajo que se estaba utilizando en el momento del ataque.

Grabar el nombre de host en una base de datos

Aquí hay un ejemplo simple de cómo crear una tabla que registra el nombre de host como un valor predeterminado en una columna.

CREATE TABLE Books  
   (
    BookID int IDENTITY(1,1) NOT NULL PRIMARY KEY,  
    BookName nvarchar(255) NOT NULL,  
    Workstation nvarchar(50)  NOT NULL DEFAULT HOST_NAME()
   );
INSERT INTO Books (BookName)
VALUES ('How to Spoof Hostnames');
SELECT * FROM Books;

Resultado:

+----------+------------------------+---------------------+
 | BookID   | BookName               | Workstation         |
 |----------+------------------------+---------------------|
 | 1        | How to Spoof Hostnames | Tims-MacBook-Pro    |
 +----------+------------------------+---------------------+ 

En este caso usé DEFAULT para especificar que el nombre de host es el valor predeterminado para la fila. Esto evita que la aplicación tenga que insertar este valor (pero tampoco impide que la aplicación lo anule).

INSERT INTO Books (BookName, Workstation)
VALUES ('How to Override Hostnames', 'Bobs-Windows-Machine!');
SELECT * FROM Books;

Resultado:

+----------+---------------------------+-----------------------+
 | BookID   | BookName                  | Workstation           |
 |----------+---------------------------+-----------------------|
 | 1        | How to Spoof Hostnames    | Tims-MacBook-Pro      |
 | 2        | How to Override Hostnames | Bobs-Windows-Machine! |
 +----------+---------------------------+-----------------------+ 

Incluir el Usuario

Si va a registrar la estación de trabajo, probablemente también desee incluir al usuario que inició sesión. Puedes usar SUSER_NAME() por eso.

SELECT 
 HOST_NAME() AS HOST_NAME,
 SUSER_NAME() AS SUSER_NAME;

Resultado:

+---------------------+--------------+
 | HOST_NAME           | SUSER_NAME   |
 |---------------------+--------------|
 | Tims-MacBook-Pro.   | sa           |
 +---------------------+--------------+