sql >> Databáze >  >> RDS >> Sqlserver

Vraťte aktuální název pracovní stanice, která je připojena k serveru SQL (T-SQL)

Občas se můžete dostat do situace, kdy potřebujete získat název aktuální pracovní stanice, která je připojena k SQL Serveru.

Možná máte například uloženou proceduru, která vkládá data, a chcete zaznamenat název pracovní stanice, která data vložila.

V takových případech můžete použít HOST_NAME() funkce.

Toto nelze zaměňovat se získáním názvu serveru.

Příklad

Zde je příklad spuštění ad-hoc dotazu pro výběr názvu aktuálního počítače.

SELECT HOST_NAME();

Výsledek:

Tims-MacBook-Pro

V tomto případě Tim spustil dotaz ze svého MacBooku Pro a název jeho počítače je Tims-MacBook-Pro.

Pravděpodobně si dokážete představit, jak užitečné by to mohlo být, kdybyste se chtěli podívat na řádek a zjistit, kdo tento řádek vložil a z jaké pracovní stanice.

Není pro bezpečnostní účely

Přestože je tato funkce užitečná, společnost Microsoft varuje před jejím použitím z bezpečnostních důvodů. Důvodem je, že HOST_NAME() poskytuje klient, což by případně mohlo poskytnout nepřesné údaje.

Hacker by například mohl získat přístup podvržením názvu hostitele, což by zjevně poskytlo falešný záznam o pracovní stanici používané v době útoku.

Záznam názvu hostitele do databáze

Zde je jednoduchý příklad vytvoření tabulky, která zaznamená název hostitele jako výchozí hodnotu ve sloupci.

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;

Výsledek:

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

V tomto případě jsem použil DEFAULT k určení, že název hostitele je výchozí hodnotou pro řádek. Tím se zabrání tomu, aby aplikace musela vkládat tuto hodnotu (ale také to aplikaci nezabrání v jejím přepsání).

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

Výsledek:

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

Zahrnout uživatele

Pokud budete nahrávat pracovní stanici, pravděpodobně budete chtít zahrnout i přihlášeného uživatele. Můžete použít SUSER_NAME() za to.

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

Výsledek:

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

  1. Jak QUOTE() funguje v MariaDB

  2. Jak najít n-tou pozici v MySQL?

  3. 27 skriptů Oracle dba pro Oracle Database pro správu a monitorování

  4. ID posledního vložení mysqli