Ocasionalmente, você pode se encontrar na situação em que precisa obter o nome da estação de trabalho atual conectada ao SQL Server.
Por exemplo, talvez você tenha um procedimento armazenado que insira dados e queira registrar o nome da estação de trabalho que inseriu os dados.
Nesses casos, você pode usar o
HOST_NAME()
função. Isso não deve ser confundido com obter o nome do servidor.
Exemplo
Aqui está um exemplo de execução de uma consulta ad-hoc para selecionar o nome do computador atual.
SELECT HOST_NAME();
Resultado:
Tims-MacBook-Pro
Nesse caso, Tim executou a consulta em seu MacBook Pro e o nome de seu computador é Tims-MacBook-Pro.
Você provavelmente pode imaginar o quão útil isso poderia ser se você quisesse poder olhar para uma linha e ver quem inseriu essa linha e de qual estação de trabalho.
Não para fins de segurança
Por mais útil que seja essa função, a Microsoft adverte contra o uso para fins de segurança. O raciocínio por trás disso é que,
HOST_NAME()
é fornecido pelo cliente, o que poderia fornecer dados imprecisos. Por exemplo, um hacker poderia obter acesso falsificando o nome do host e isso obviamente forneceria um registro falso da estação de trabalho que estava sendo usada no momento do ataque.
Gravando o nome do host em um banco de dados
Aqui está um exemplo simples de criação de uma tabela que registra o nome do host como um valor padrão em uma coluna.
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;
Resultado:
+----------+------------------------+---------------------+ | BookID | BookName | Workstation | |----------+------------------------+---------------------| | 1 | How to Spoof Hostnames | Tims-MacBook-Pro | +----------+------------------------+---------------------+
Neste caso eu usei
DEFAULT
para especificar que o nome do host é o valor padrão para a linha. Isso evita que o aplicativo precise inserir esse valor (mas também não impede que o aplicativo o substitua). INSERT INTO Books (BookName, Workstation)
VALUES ('How to Override Hostnames', 'Bobs-Windows-Machine!');
SELECT * FROM Books;
Resultado:
+----------+---------------------------+-----------------------+ | BookID | BookName | Workstation | |----------+---------------------------+-----------------------| | 1 | How to Spoof Hostnames | Tims-MacBook-Pro | | 2 | How to Override Hostnames | Bobs-Windows-Machine! | +----------+---------------------------+-----------------------+
Incluir o usuário
Se você for gravar a estação de trabalho, provavelmente também desejará incluir o usuário conectado. Você pode usar
SUSER_NAME()
por isso. SELECT
HOST_NAME() AS HOST_NAME,
SUSER_NAME() AS SUSER_NAME;
Resultado:
+---------------------+--------------+ | HOST_NAME | SUSER_NAME | |---------------------+--------------| | Tims-MacBook-Pro. | sa | +---------------------+--------------+