2009-03-13 5 views
10

मेरा काम कंपनी के एक MSSQL सर्वर है 2005 मैं वर्तमान लॉग उपयोगकर्ता और एक चेतावनी संदेश भेजने के लिए किसी भी तरह से यह जानने के बारे में दो प्रश्न हैं:एसक्यूएल सर्वर तक पहुँच करने के लिए उपयोगकर्ता नाम और मशीन नाम पता लगाने के लिए कैसे

पहला सवाल यह है कि यदि वर्तमान लॉगिन उपयोगकर्ता नाम और मशीन नाम खोजने के लिए कोई टी-एसक्यूएल या एसपी उपलब्ध है। यदि उपयोगकर्ता एसक्यूएल सर्वर से दूरस्थ रूप से एक्सेस करने के लिए SQL सर्वर sa नाम का उपयोग कर रहा है, तो क्या उस उपयोगकर्ता के विंडोज़ नाम (विंडोज़ पर लॉग इन करने का नाम) पता लगाने का कोई तरीका है?

मेरा अगला प्रश्न यह है कि यदि मैं उपयोगकर्ता नाम या आईडी प्राप्त कर सकता हूं, तो क्या कोई चेतावनी संदेश भेजने का कोई तरीका है जैसे कि "वर्तमान में SQL सर्वर साफ़ है या बैकअप है, कृपया इस समय लॉग इन न करें" । मुझे लगता है कि यह मुश्किल हो सकता है। मुझे उपयोगकर्ता को ईमेल भेजना पड़ सकता है।

SQL सर्वर केवल कंपनी में पहुंच योग्य है। एसक्यूएल सर्वर में उपयोगकर्ताओं की सूची लॉग इन उपयोगकर्ताओं के रूप में है: विंडोज उपयोगकर्ता, एसक्यूएल उपयोगकर्ता और एस।

उत्तर

30
SELECT SUSER_SNAME(), HOST_NAME() 

यदि कनेक्शन "sa" (या कोई अन्य SQL लॉगिन) है तो आपको डोमेन/विंडोज उपयोगकर्ता नाम नहीं मिल रहा है। SQL सर्वर केवल यह जानता है कि यह "sa" या SQL लॉगिन है।

HOST_NAME विश्वसनीय भी नहीं हो सकता है, इसे कनेक्शन स्ट्रिंग ("एप्लिकेशन नाम") में सेट किया जा सकता है। या यह उदाहरण के लिए "माइक्रोसॉफ्ट ऑफिस" एक्सेस, एक्सेल आदि

आप sys.dm_exec_connections में client_net_address के माध्यम से पीछे और आईपी के लिए मैक पते से मेल और उन पर लॉग ऑन है यह पता लगाने सकता है ...

4

एक के लिए डिफ़ॉल्ट रूप से के लिए अस्पष्ट हो सकता है आसान तरीका दोनों मेजबान और उपयोगकर्ता पता लगाने के लिए

EXEC sp_who2; 

जहां कुछ अन्य जानकारी है कि पता करने के लिए अच्छा हो सकता है, जैसे कि उपयोगकर्ता सक्रिय है और इतने पर मिलता है ... यह मुद्दों का समाधान नहीं होता है कि जीबीएन की घोषणा की।

3

पहले आपके सभी सुझावों के लिए धन्यवाद। मैंने सभी तरीकों की कोशिश की और मुझे लगता है कि जोकिम बैकमैन की विधि मेरी ज़रूरत को पूरा करती है। मुझे जो पता चलता है उसका सारांश यहां दिया गया है।

  • sys.syslogins की क्वेरी केवल लॉगिन जानकारी सूचीबद्ध करती है। Accdate वर्तमान लॉगिन उपयोगकर्ता timestamp नहीं देता है। मैंने अपने एसक्यूएल में किसी अन्य एप्लिकेशन से लॉगिन करने का प्रयास किया और यह क्वेरी लॉगिन सूचीबद्ध नहीं करती है।
  • SELECT SUSER_SNAME(), HOST_NAME() केवल SQL सर्वर पर एक उपयोगकर्ता को सूचीबद्ध करें। उदाहरण के लिए, मैं अपने नाम के रूप में SQL सर्वर में लॉग इन करता हूं। इस क्वेरी का परिणाम केवल मेरा नाम और मशीन नाम सूचीबद्ध करता है। यह क्वेरी SQL सर्वर पर मौजूदा उपयोगकर्ताओं को सूचीबद्ध नहीं करती है।
  • exec sp_who2 मुझे आवश्यक जानकारी सूचीबद्ध करता है। इसमें वर्तमान उपयोगकर्ता नाम मशीन का नाम, सक्रिय स्थिति, डीबी नाम उपयोगकर्ता की पहुंच, और कमांड का उपयोग किया गया है।

एसपी में उपयोग की जाने वाली जानकारी प्राप्त करने के लिए, मुझे ईमेल जैसे अन्य तालिकाओं के साथ जानकारी फ़िल्टर और जुड़ना होगा। यहां मेरे द्वारा उपयोग किए जाने वाले कोड हैं:

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 
संबंधित मुद्दे