Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zwróć nazwę bieżącej stacji roboczej, która jest połączona z programem SQL Server (T-SQL)

Czasami możesz znaleźć się w sytuacji, w której musisz uzyskać nazwę bieżącej stacji roboczej, która jest połączona z SQL Server.

Na przykład, być może masz procedurę składowaną, która wstawia dane i chcesz zarejestrować nazwę stacji roboczej, która wstawiała dane.

W takich przypadkach możesz użyć HOST_NAME() funkcja.

Nie należy tego mylić z pobraniem nazwy serwera.

Przykład

Oto przykład uruchomienia zapytania ad hoc w celu wybrania nazwy bieżącego komputera.

SELECT HOST_NAME();

Wynik:

Tims-MacBook-Pro

W tym przypadku Tim uruchomił zapytanie ze swojego MacBooka Pro, a nazwa jego komputera to Tims-MacBook-Pro.

Prawdopodobnie możesz sobie wyobrazić, jakie to może być przydatne, gdybyś chciał móc spojrzeć na wiersz i zobaczyć, kto go wstawił iz której stacji roboczej.

Nie do celów bezpieczeństwa

Chociaż ta funkcja jest przydatna, firma Microsoft ostrzega przed używaniem jej do celów bezpieczeństwa. Powodem tego jest to, że HOST_NAME() jest dostarczany przez klienta, co może ewentualnie dostarczyć niedokładne dane.

Na przykład haker mógłby uzyskać dostęp, podszywając się pod nazwę hosta, co oczywiście dostarczyłoby fałszywego zapisu stacji roboczej używanej w czasie ataku.

Zapisywanie nazwy hosta w bazie danych

Oto prosty przykład tworzenia tabeli, która rejestruje nazwę hosta jako domyślną wartość w kolumnie.

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;

Wynik:

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

W tym przypadku użyłem DEFAULT aby określić, że nazwa hosta jest wartością domyślną dla wiersza. Oszczędza to aplikacji przed koniecznością wstawiania tej wartości (ale również nie zapobiega jej nadpisaniu przez aplikację).

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

Wynik:

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

Dołącz użytkownika

Jeśli zamierzasz nagrywać stację roboczą, prawdopodobnie chcesz również dołączyć zalogowanego użytkownika. Możesz użyć SUSER_NAME() za to.

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

Wynik:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwertuj „datetime” na „smalldatetime” w SQL Server (przykłady T-SQL)

  2. Jak podzielić wartości z jednej kolumny na wartości z wielu kolumn?

  3. Co to jest system zarządzania bazą danych i relacyjnymi bazami danych (RDBMS)

  4. Jak przekazać wartość do parametru procedury składowanej w składniku źródłowym OLE DB?

  5. Jak zdobyć skrypt danych SQL Server?