2009-03-13 5 views
10

Moja firma praca ma serwera MSSQL 2005. Mam dwa pytania o ustaleniu aktualnego użytkownika dziennika i jakikolwiek sposób wysłać komunikat ostrzegawczy:Jak sprawdzić nazwę użytkownika i nazwę komputera z dostępem do serwera SQL

Pierwsze pytanie dotyczy tego, czy dostępny jest dowolny T-SQL lub SP, aby znaleźć aktualną nazwę użytkownika i nazwę komputera. Jeśli użytkownik używa nazwy SQL serwera SA do zdalnego dostępu do serwera SQL, czy istnieje sposób na sprawdzenie nazwy tego użytkownika w systemie Windows (nazwa logowania do okien)?

Moje następne pytanie jest takie, że jeśli mogę uzyskać nazwę użytkownika lub identyfikator, czy jest jakikolwiek sposób, aby wysłać komunikat ostrzegawczy, taki jak "obecnie serwer SQL jest czyszczony lub tworzenie kopii zapasowych, proszę nie logować się w tym czasie" . Myślę, że może to być trudne. Być może będę musiał wysłać wiadomość e-mail do użytkownika.

Serwer SQL jest dostępny tylko w firmie. Serwer SQL ma listę użytkowników jako użytkowników logujących się: użytkowników systemu Windows, użytkowników SQL i sa.

Odpowiedz

30
SELECT SUSER_SNAME(), HOST_NAME() 

Jeśli połączenie jest "sa" (lub jakikolwiek inny login SQL), wówczas nie można znaleźć nazwy użytkownika domeny/okna. SQL Server wie tylko, że to "sa" lub logowanie SQL.

HOST_NAME może również nie być wiarygodny, można go ustawić w ciągu połączenia ("Nazwa aplikacji"). Albo może to być niejasne przykład „Microsoft Office” na domyślnie dla Access, Excel itp

Można wycofać poprzez client_net_address w sys.dm_exec_connections i dopasować MAC adres IP i dowiedzieć się, kto jest zalogowany ...

4

An łatwy sposób dowiedzieć się zarówno hosta i użytkownik jest

EXEC sp_who2; 

gdzie masz jakieś inne informacje, które mogą być dobre, aby wiedzieć, jak wtedy, gdy użytkownik jest aktywny i tak dalej ... to nie rozwiąże problemów, które ogłosił gbn.

3

Dzięki za wszystkie sugestie jako pierwsze. Próbowałem wszystkich metod i myślę, że metoda Joakima Backmana spełnia moje potrzeby. Oto podsumowanie tego, co odkryłem.

  • Zapytanie o listę sys.sys tylko wyświetla informacje logowania. Akredytacja nie daje aktualnego znacznika czasu logowania użytkownika. Próbowałem zalogować się z innej aplikacji do mojego SQL, a to zapytanie nie zawiera loginu.
  • SELECT SUSER_SNAME(), HOST_NAME() wyświetla tylko jednego użytkownika na serwerze SQL. Na przykład loguję się jako moja nazwa do serwera SQL. Wynik tego zapytania zawiera tylko moje imię i nazwisko oraz nazwę komputera. To zapytanie nie wyświetla aktualnych użytkowników na serwerze SQL.
  • exec sp_who2 zawiera informacje, których potrzebuję. Wyświetla nazwę komputera, nazwę bieżącego użytkownika, status aktywny, nazwę użytkownika bazy danych i używane polecenie.

Aby uzyskać informacje, których używam w SP, muszę filtrować i łączyć informacje z innymi tabelami, takimi jak e-maile. Oto kody, których używam:

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