Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Trả lại Tên máy trạm hiện tại được kết nối với SQL Server (T-SQL)

Đôi khi, bạn có thể gặp phải trường hợp cần lấy tên của máy trạm hiện tại được kết nối với SQL Server.

Ví dụ:có thể bạn có một thủ tục được lưu trữ để chèn dữ liệu và bạn muốn ghi lại tên của máy trạm đã chèn dữ liệu.

Trong những trường hợp như vậy, bạn có thể sử dụng HOST_NAME() chức năng.

Điều này không bị nhầm lẫn với việc lấy tên máy chủ.

Ví dụ

Dưới đây là ví dụ về việc chạy truy vấn đặc biệt để chọn tên máy tính hiện tại.

SELECT HOST_NAME();

Kết quả:

Tims-MacBook-Pro

Trong trường hợp này, Tim đã chạy truy vấn từ MacBook Pro của mình và tên máy tính của anh ấy là Tims-MacBook-Pro.

Bạn có thể tưởng tượng điều này có thể tiện dụng như thế nào nếu bạn muốn có thể nhìn vào một hàng và xem ai đã chèn hàng đó và từ máy trạm nào.

Không dành cho Mục đích Bảo mật

Chức năng này rất tiện dụng, Microsoft cảnh báo không nên sử dụng nó cho các mục đích bảo mật. Lý do đằng sau điều này là, HOST_NAME() do khách hàng cung cấp, điều này có thể cung cấp dữ liệu không chính xác.

Ví dụ:một tin tặc có thể giành được quyền truy cập bằng cách giả mạo tên máy chủ và điều đó rõ ràng sẽ cung cấp hồ sơ sai về máy trạm đang được sử dụng tại thời điểm tấn công.

Ghi lại Tên máy chủ trong Cơ sở dữ liệu

Dưới đây là một ví dụ đơn giản về việc tạo một bảng ghi lại tên máy chủ lưu trữ dưới dạng giá trị mặc định trong một cột.

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;

Kết quả:

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

Trong trường hợp này, tôi đã sử dụng DEFAULT để chỉ định rằng tên máy chủ là giá trị mặc định cho hàng. Điều này giúp ứng dụng không phải chèn giá trị này (nhưng cũng không ngăn ứng dụng ghi đè giá trị đó).

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

Kết quả:

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

Bao gồm người dùng

Nếu bạn định ghi lại máy trạm, thì bạn có thể cũng muốn bao gồm người dùng đã đăng nhập. Bạn có thể sử dụng SUSER_NAME() cho điều đó.

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

Kết quả:

+---------------------+--------------+
 | 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. Ví dụ về SIN () trong SQL Server

  2. Sắp xếp ngẫu nhiên máy chủ SQL

  3. SQL Server Change Recovery Model

  4. CHỌN VÀO một biến bảng trong T-SQL

  5. Tìm giá trị tối đa và hiển thị giá trị tương ứng từ trường khác nhau trong máy chủ SQL