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

Returner det aktuelle arbejdsstationsnavn, der er forbundet til SQL Server (T-SQL)

Nogle gange kan du finde dig selv i den situation, hvor du har brug for at få navnet på den aktuelle arbejdsstation, der er forbundet til SQL Server.

For eksempel har du måske en lagret procedure, der indsætter data, og du vil registrere navnet på den arbejdsstation, der indsatte dataene.

I sådanne tilfælde kan du bruge HOST_NAME() funktion.

Dette skal ikke forveksles med at få servernavnet.

Eksempel

Her er et eksempel på at køre en ad-hoc-forespørgsel for at vælge den aktuelle computers navn.

SELECT HOST_NAME();

Resultat:

Tims-MacBook-Pro

I dette tilfælde kørte Tim forespørgslen fra sin MacBook Pro, og navnet på hans computer er Tims-MacBook-Pro.

Du kan sikkert forestille dig, hvor praktisk dette kunne være, hvis du ville være i stand til at se på en række og se, hvem der indsatte den række og fra hvilken arbejdsstation.

Ikke til sikkerhedsformål

Hvor praktisk denne funktion end er, advarer Microsoft mod at bruge den til sikkerhedsformål. Begrundelsen bag dette er, at HOST_NAME() er leveret af klienten, hvilket muligvis kan give unøjagtige data.

For eksempel kunne en hacker få adgang ved at forfalske værtsnavnet, og det ville naturligvis give en falsk registrering af den arbejdsstation, der blev brugt på tidspunktet for angrebet.

Optagelse af værtsnavnet i en database

Her er et simpelt eksempel på oprettelse af en tabel, der registrerer værtsnavnet som en standardværdi i en kolonne.

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 dette tilfælde brugte jeg DEFAULT for at angive, at værtsnavnet er standardværdien for rækken. Dette sparer applikationen fra at skulle indsætte denne værdi (men det forhindrer heller ikke applikationen i at tilsidesætte den).

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! |
 +----------+---------------------------+-----------------------+ 

Inkluder brugeren

Hvis du vil optage arbejdsstationen, vil du sandsynligvis også inkludere den loggede bruger. Du kan bruge SUSER_NAME() for det.

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

Resultat:

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

  1. Sådan konverteres en normal forespørgsel til en krydstabuleringsforespørgsel i Access

  2. 2 måder at konvertere et tal til oktal i MySQL

  3. Postgresql :Hvordan vælger jeg top n procent(%) poster fra hver gruppe/kategori

  4. Oracle CASE kortslutning virker ikke i gruppe af