sql >> Databasteknik >  >> RDS >> Sqlserver

Returnera det aktuella arbetsstationsnamnet som är anslutet till SQL Server (T-SQL)

Ibland kan du hamna i den situationen att du behöver få namnet på den aktuella arbetsstationen som är ansluten till SQL Server.

Till exempel kanske du har en lagrad procedur som infogar data, och du vill registrera namnet på arbetsstationen som infogade data.

I sådana fall kan du använda HOST_NAME() funktion.

Detta ska inte förväxlas med att hämta servernamnet.

Exempel

Här är ett exempel på hur du kör en ad-hoc-fråga för att välja den aktuella datorns namn.

SELECT HOST_NAME();

Resultat:

Tims-MacBook-Pro

I det här fallet körde Tim frågan från sin MacBook Pro, och namnet på hans dator är Tims-MacBook-Pro.

Du kan säkert föreställa dig hur praktiskt det här skulle kunna vara om du ville kunna titta på en rad och se vem som infogade den raden och från vilken arbetsstation.

Inte för säkerhetsändamål

Hur praktisk den här funktionen än är, varnar Microsoft för att använda den i säkerhetssyfte. Anledningen bakom detta är att HOST_NAME() tillhandahålls av klienten, vilket möjligen kan tillhandahålla felaktiga uppgifter.

En hackare kan till exempel få åtkomst genom att förfalska värdnamnet och det skulle uppenbarligen ge en falsk registrering av arbetsstationen som användes vid tidpunkten för attacken.

Spela in värdnamnet i en databas

Här är ett enkelt exempel på att skapa en tabell som registrerar värdnamnet som ett standardvärde i en kolumn.

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;

Resultat:

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

I det här fallet använde jag DEFAULT för att ange att värdnamnet är standardvärdet för raden. Detta sparar programmet från att behöva infoga detta värde (men det hindrar inte heller programmet från att åsidosätta det).

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

Resultat:

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

Inkludera användaren

Om du ska spela in arbetsstationen, så vill du förmodligen också inkludera den inloggade användaren. Du kan använda SUSER_NAME() för det.

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

Resultat:

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

  1. WEEKDAY() Exempel – MySQL

  2. Hur man ändrar en kolumn från Null till Not Null i SQL Server

  3. JDBC vs Web Service för Android

  4. SQL Server 2017 Backup -3