sql >> Database >  >> RDS >> Sqlserver

Retourneer de huidige werkstationnaam die is verbonden met SQL Server (T-SQL)

Af en toe bevindt u zich misschien in de situatie waarin u de naam moet krijgen van het huidige werkstation dat is verbonden met SQL Server.

Misschien hebt u bijvoorbeeld een opgeslagen procedure die gegevens invoegt en wilt u de naam opnemen van het werkstation dat de gegevens heeft ingevoegd.

In dergelijke gevallen kunt u de HOST_NAME() . gebruiken functie.

Dit moet niet worden verward met het verkrijgen van de servernaam.

Voorbeeld

Hier is een voorbeeld van het uitvoeren van een ad-hocquery om de naam van de huidige computer te selecteren.

SELECT HOST_NAME();

Resultaat:

Tims-MacBook-Pro

In dit geval voerde Tim de zoekopdracht uit vanaf zijn MacBook Pro en de naam van zijn computer is Tims-MacBook-Pro.

Je kunt je vast wel voorstellen hoe handig dit kan zijn als je naar een rij wilt kunnen kijken en zien wie die rij heeft ingevoegd en vanaf welk werkstation.

Niet voor beveiligingsdoeleinden

Hoe handig deze functie ook is, Microsoft waarschuwt ervoor deze niet te gebruiken voor beveiligingsdoeleinden. De redenering hierachter is dat, HOST_NAME() wordt aangeleverd door de klant, wat mogelijk onnauwkeurige gegevens kan opleveren.

Een hacker zou bijvoorbeeld toegang kunnen krijgen door de hostnaam te vervalsen en dat zou uiteraard een vals record opleveren van het werkstation dat op het moment van de aanval werd gebruikt.

De hostnaam opnemen in een database

Hier is een eenvoudig voorbeeld van het maken van een tabel waarin de hostnaam als standaardwaarde in een kolom wordt vastgelegd.

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;

Resultaat:

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

In dit geval gebruikte ik DEFAULT om op te geven dat de hostnaam de standaardwaarde voor de rij is. Hierdoor hoeft de applicatie deze waarde niet in te voeren (maar het verhindert ook niet dat de applicatie deze waarde overschrijft).

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

Resultaat:

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

De gebruiker opnemen

Als u het werkstation gaat opnemen, wilt u waarschijnlijk ook de ingelogde gebruiker opnemen. Je kunt SUSER_NAME() . gebruiken daarvoor.

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

Resultaat:

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

  1. Alleen-lezen Oracle Home

  2. Lijst met NLS-parameters in Oracle Database

  3. MySQL PHP-incompatibiliteit

  4. ODBC-gegevens gebruiken in RapidMiner