2009-03-13 53 views
10

công ty Công việc của tôi có một máy chủ MSSQL 2005. Tôi có hai câu hỏi về việc tìm ra người sử dụng đăng nhập hiện tại và cách nào để gửi đi một thông điệp cảnh báo:Làm thế nào để tìm ra tên người dùng và tên máy tính để truy cập vào máy chủ SQL

Câu hỏi đầu tiên là nếu có bất kỳ T-SQL hoặc SP nào để tìm ra tên người dùng đăng nhập hiện tại và tên máy. Nếu người dùng đang sử dụng tên máy chủ SQL để truy cập từ xa vào máy chủ SQL, có cách nào để tìm ra tên cửa sổ của người dùng (tên để đăng nhập vào các cửa sổ) không?

Câu hỏi tiếp theo của tôi là nếu tôi có thể lấy tên người dùng hoặc id, có cách nào để gửi một thông báo cảnh báo như "máy chủ SQL hiện đang được dọn dẹp hoặc sao lưu, vui lòng không đăng nhập tại thời điểm này" . Tôi đoán nó có thể khó khăn. Tôi có thể phải gửi email cho người dùng.

Máy chủ SQL chỉ có thể truy cập được trong công ty. Máy chủ SQL có danh sách người dùng là người dùng đăng nhập: người dùng windows, người dùng SQL và sa.

Trả lời

30
SELECT SUSER_SNAME(), HOST_NAME() 

Nếu kết nối là "sa" (hoặc bất kỳ thông tin đăng nhập SQL nào khác) thì bạn không thể tìm thấy tên người dùng/tên miền. SQL Server chỉ biết đó là "sa" hoặc đăng nhập SQL đó.

HOST_NAME có thể không đáng tin cậy, có thể được đặt trong chuỗi kết nối ("Tên ứng dụng"). Hoặc nó có thể là mơ hồ như "Microsoft Office" để theo mặc định cho Access, Excel vv

Bạn có thể quay lại qua client_net_address trong sys.dm_exec_connections và phù hợp với địa chỉ MAC để IP và tìm ra ai đang đăng nhập ...

4

Một cách dễ dàng để tìm hiểu cả hai máy chủ và người dùng là

EXEC sp_who2; 

nơi bạn nhận được một số thông tin khác có thể được tốt phải biết, như nếu người dùng đang hoạt động và vân vân ... Nó không giải quyết được vấn đề mà gbn công bố.

3

Cảm ơn tất cả các đề xuất của bạn trước tiên. Tôi đã thử tất cả các phương pháp và tôi nghĩ phương pháp của Joakim Backman đáp ứng nhu cầu của tôi. Dưới đây là tóm tắt những gì tôi tìm ra.

  • Truy vấn thông tin đăng nhập danh sách chỉ sys.syslogins. Accdate không cung cấp dấu thời gian người dùng đăng nhập hiện tại. Tôi đã cố đăng nhập từ một ứng dụng khác đến SQL của tôi và truy vấn này không liệt kê thông tin đăng nhập.
  • CHỌN SUSER_SNAME(), HOST_NAME() chỉ liệt kê một người dùng trên máy chủ SQL. Ví dụ, tôi đăng nhập như tên của tôi đến máy chủ SQL. Kết quả của truy vấn này chỉ liệt kê tên và tên máy của tôi. Truy vấn này không liệt kê người dùng hiện tại trên máy chủ SQL.
  • exec sp_who2 liệt kê thông tin tôi cần. Nó liệt kê tên máy người dùng hiện tại, trạng thái hoạt động, quyền truy cập của người dùng tên db và lệnh được sử dụng.

Để nhận thông tin tôi sử dụng trong SP, tôi phải lọc và tham gia thông tin với các bảng khác, chẳng hạn như email. Dưới đây là các mã tôi sử dụng:

DECLARE @retTable TABLE (
SPID int not null 
, Status varchar (255) not null 
, Login varchar (255) not null 
, HostName varchar (255) not null 
, BlkBy varchar(10) not null 
, DBName varchar (255) null 
, Command varchar (255) not null 
, CPUTime int not null 
, DiskIO int not null 
, LastBatch varchar (255) not null 
, ProgramName varchar (255) null 
, SPID2 int not null 
, REQUESTID INT 
) 

INSERT INTO @retTable EXEC sp_who2 

SELECT Status, Login, HostName, DBName, Command, CPUTime, ProgramName -- * 
    FROM @retTable 
    --WHERE Login not like 'sa%' -- if not interested in sa 
    ORDER BY Login, HostName 
Các vấn đề liên quan