場合によっては、SQLServerに接続されている現在のワークステーションの名前を取得する必要がある状況に陥ることがあります。
たとえば、データを挿入するストアドプロシージャがあり、データを挿入したワークステーションの名前を記録したい場合があります。
このような場合は、HOST_NAME()
を使用できます。 機能。
これは、サーバー名の取得と混同しないでください。
例
アドホッククエリを実行して現在のコンピュータの名前を選択する例を次に示します。
SELECT HOST_NAME();
結果:
Tims-MacBook-Pro
この場合、Timは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 | +---------------------+--------------+