Kadang-kadang Anda mungkin menemukan diri Anda dalam situasi di mana Anda perlu mendapatkan nama workstation saat ini yang terhubung ke SQL Server.
Misalnya, mungkin Anda memiliki prosedur tersimpan yang menyisipkan data, dan Anda ingin mencatat nama stasiun kerja yang menyisipkan data.
Dalam kasus seperti itu, Anda dapat menggunakan HOST_NAME()
fungsi.
Ini tidak menjadi bingung dengan mendapatkan nama server.
Contoh
Berikut ini contoh menjalankan kueri ad-hoc untuk memilih nama komputer saat ini.
SELECT HOST_NAME();
Hasil:
Tims-MacBook-Pro
Dalam hal ini, Tim menjalankan kueri dari MacBook Pro-nya, dan nama komputernya adalah Tims-MacBook-Pro.
Anda mungkin dapat membayangkan betapa bergunanya ini jika Anda ingin dapat melihat baris dan melihat siapa yang memasukkan baris itu dan dari stasiun kerja mana.
Bukan untuk Tujuan Keamanan
Meskipun fungsi ini berguna, Microsoft memperingatkan agar tidak menggunakannya untuk tujuan keamanan. Alasan di balik ini adalah, HOST_NAME()
disediakan oleh klien, yang mungkin dapat memberikan data yang tidak akurat.
Misalnya, seorang peretas dapat memperoleh akses dengan memalsukan nama host dan itu jelas akan memberikan catatan palsu tentang stasiun kerja yang digunakan pada saat serangan.
Merekam Hostname di Database
Berikut adalah contoh sederhana untuk membuat tabel yang mencatat nama host sebagai nilai default dalam kolom.
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;
Hasil:
+----------+------------------------+---------------------+ | BookID | BookName | Workstation | |----------+------------------------+---------------------| | 1 | How to Spoof Hostnames | Tims-MacBook-Pro | +----------+------------------------+---------------------+
Dalam hal ini saya menggunakan DEFAULT
untuk menentukan bahwa nama host adalah nilai default untuk baris. Ini menyelamatkan aplikasi dari keharusan memasukkan nilai ini (tetapi juga tidak mencegah aplikasi menimpanya).
INSERT INTO Books (BookName, Workstation)
VALUES ('How to Override Hostnames', 'Bobs-Windows-Machine!');
SELECT * FROM Books;
Hasil:
+----------+---------------------------+-----------------------+ | BookID | BookName | Workstation | |----------+---------------------------+-----------------------| | 1 | How to Spoof Hostnames | Tims-MacBook-Pro | | 2 | How to Override Hostnames | Bobs-Windows-Machine! | +----------+---------------------------+-----------------------+
Sertakan Pengguna
Jika Anda akan merekam workstation, Anda mungkin juga ingin menyertakan pengguna yang masuk. Anda dapat menggunakan SUSER_NAME()
untuk itu.
SELECT
HOST_NAME() AS HOST_NAME,
SUSER_NAME() AS SUSER_NAME;
Hasil:
+---------------------+--------------+ | HOST_NAME | SUSER_NAME | |---------------------+--------------| | Tims-MacBook-Pro. | sa | +---------------------+--------------+