Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kembalikan Nama Workstation Saat Ini yang Terhubung ke SQL Server (T-SQL)

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           |
 +---------------------+--------------+ 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Skrip semua data dari database SQL Server

  2. Gabungkan Dua Partisi Menjadi Satu di SQL Server (T-SQL)

  3. Memahami SQL Server LOCKS pada kueri SELECT

  4. Bagaimana mengatasi tidak dapat mengganti kesalahan penyandian saat memasukkan XML ke SQL Server

  5. Statistik IO File Kinerja SQL Server