Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Restituisce il nome della workstation corrente connessa a SQL Server (T-SQL)

Occasionalmente potresti trovarti nella situazione in cui devi ottenere il nome della workstation corrente che è connessa a SQL Server.

Ad esempio, potresti avere una procedura memorizzata che inserisce i dati e desideri registrare il nome della workstation che ha inserito i dati.

In questi casi, puoi utilizzare HOST_NAME() funzione.

Questo non deve essere confuso con ottenere il nome del server.

Esempio

Ecco un esempio di esecuzione di una query ad hoc per selezionare il nome del computer corrente.

SELECT HOST_NAME();

Risultato:

Tims-MacBook-Pro

In questo caso, Tim ha eseguito la query dal suo MacBook Pro e il nome del suo computer è Tims-MacBook-Pro.

Probabilmente puoi immaginare quanto potrebbe essere utile se volessi essere in grado di guardare una riga e vedere chi ha inserito quella riga e da quale workstation.

Non per motivi di sicurezza

Per quanto utile sia questa funzione, Microsoft avverte di non utilizzarla per motivi di sicurezza. Il ragionamento alla base di questo è che, HOST_NAME() è fornito dal cliente, che potrebbe eventualmente fornire dati inesatti.

Ad esempio, un hacker potrebbe ottenere l'accesso falsificando il nome host e ciò fornirebbe ovviamente una registrazione falsa della workstation utilizzata al momento dell'attacco.

Registrazione del nome host in un database

Ecco un semplice esempio di creazione di una tabella che registra il nome host come valore predefinito in una colonna.

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;

Risultato:

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

In questo caso ho usato DEFAULT per specificare che il nome host è il valore predefinito per la riga. Ciò evita all'applicazione di dover inserire questo valore (ma non impedisce anche all'applicazione di sovrascriverlo).

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

Risultato:

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

Includi l'utente

Se hai intenzione di registrare la workstation, probabilmente vorrai includere anche l'utente che ha effettuato l'accesso. Puoi utilizzare SUSER_NAME() per quello.

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

Risultato:

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