Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Върнете името на текущата работна станция, която е свързана към SQL Server (T-SQL)

Понякога може да се окажете в ситуация, в която трябва да получите името на текущата работна станция, която е свързана към SQL Server.

Например, може би имате съхранена процедура, която вмъква данни, и искате да запишете името на работната станция, която е вмъкнала данните.

В такива случаи можете да използвате HOST_NAME() функция.

Това не трябва да се бърка с получаването на името на сървъра.

Пример

Ето пример за изпълнение на ad hoc заявка за избор на името на текущия компютър.

SELECT HOST_NAME();

Резултат:

Tims-MacBook-Pro

В този случай Тим изпълни заявката от своя MacBook Pro, а името на компютъра му е Tims-MacBook-Pro.

Вероятно можете да си представите колко удобно би било това, ако искате да можете да разгледате ред и да видите кой е вмъкнал този ред и от коя работна станция.

Не за целите на сигурността

Колкото и удобна да е тази функция, Microsoft предупреждава да не я използвате за целите на сигурността. Причината за това е, че HOST_NAME() се предоставя от клиента, което е възможно да предостави неточни данни.

Например хакер може да получи достъп, като подправи името на хоста и това очевидно би осигурило фалшив запис на работната станция, използвана по време на атаката.

Записване на името на хоста в база данни

Ето прост пример за създаване на таблица, която записва името на хоста като стойност по подразбиране в колона.

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;

Резултат:

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

В този случай използвах DEFAULT за да укажете, че името на хоста е стойността по подразбиране за реда. Това спестява на приложението необходимост да вмъква тази стойност (но също така не пречи на приложението да я отмени).

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

Резултат:

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

Включете потребителя

Ако ще запишете работната станция, вероятно ще искате да включите и влезлия потребител. Можете да използвате SUSER_NAME() за това.

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

Резултат:

+---------------------+--------------+
 | 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. Неуспешна JDBC връзка, грешка:TCP/IP връзката с хост неуспешна

  2. 4 функции за форматиране на число до 2 десетични знака в SQL Server

  3. Възстановяване на достъпа до екземпляра на SQL Server без рестартиране

  4. Как да добавите ограничение на външния ключ към съществуваща таблица в SQL Server - SQL Server / TSQL Урок, част 68

  5. 13 най-добри практики за сигурност на SQL Server