Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में लॉगऑन ट्रिगर

लॉगऑन ट्रिगर, जैसा कि नाम से पता चलता है, एक ट्रिगर है जो SQL सर्वर में लॉगऑन इवेंट के जवाब में सक्रिय होता है।

सरल शब्दों में, जब भी कोई डेटाबेस सर्वर से नया कनेक्शन स्थापित करने का प्रयास करता है तो लॉगऑन ट्रिगर सक्रिय हो जाता है। उपयोगकर्ता प्रमाणीकरण के बाद ट्रिगर सक्रिय हो जाता है और लॉगिन चरण पूरा हो जाता है लेकिन उपयोगकर्ता सत्र वास्तव में शुरू होने से पहले।

लॉगऑन ट्रिगर के लाभ

लॉगऑन ट्रिगर के कई फायदे हैं:

  • लॉगिन गतिविधि ट्रैक करना
    लॉगऑन ट्रिगर का उपयोग डेटाबेस सर्वर पर होने वाली लॉगिन गतिविधि पर नज़र रखने के लिए किया जा सकता है। उदाहरण के लिए, इसका उपयोग उन सभी उपयोगकर्ताओं की सूची को बनाए रखने के लिए किया जा सकता है जिन्होंने निर्दिष्ट समय अवधि के भीतर डेटाबेस सर्वर में लॉग इन किया था।
  • कुल कनेक्शनों की संख्या सीमित करना
    अत्यधिक डेटाबेस लॉगिन डेटाबेस के प्रदर्शन को प्रभावित कर सकते हैं, खासकर जब बड़ी संख्या में उपयोगकर्ता डेटाबेस तक पहुंच रहे हों। ऐसे मामलों में इन लॉगऑन ट्रिगर्स का उपयोग पहले से मौजूद कुल लॉगिन की संख्या की जांच करने के लिए किया जा सकता है, इससे पहले कि अधिक अनुमति दी जाए।
  • प्रति कनेक्शन सत्रों की संख्या सीमित करना
    प्रति कनेक्शन सत्रों की संख्या को सीमित करने के लिए लॉगऑन ट्रिगर का उपयोग किया जा सकता है। जब भी कोई उपयोगकर्ता एक नया सत्र स्थापित करने का प्रयास करता है, तो एक लॉगऑन ट्रिगर उन सत्रों की संख्या की जांच कर सकता है जो उस लॉगिन के लिए पहले से सक्रिय हैं और यदि वे एक सीमा से अधिक हो गए हैं तो किसी भी नए सत्र को प्रतिबंधित कर सकते हैं।

इससे पहले कि हम शुरू करें, सुनिश्चित करें कि आपने पूरी तरह से बैकअप लिया है।

सक्रिय उपयोगकर्ता कनेक्शंस एक्सेस करना

निम्न स्क्रिप्ट डेटाबेस में सभी सक्रिय उपयोगकर्ता कनेक्शन लौटाती है।

SELECT * FROM sys.dm_exec_sessions

sys.dm_exec_sessions एक सिस्टम दृश्य है जो सभी सक्रिय उपयोगकर्ता कनेक्शन देता है। उपरोक्त क्वेरी का आउटपुट इस तरह दिखता है:

आउटपुट में सभी सक्रिय कनेक्शनों के बारे में विस्तृत जानकारी है। हम उनमें से दो कॉलम में रुचि रखते हैं:is_user_process और original_login_name.
पहला हमें बताता है कि कनेक्शन उपयोगकर्ता प्रक्रिया द्वारा किया गया है या नहीं, और पूर्व में उस कनेक्शन के नाम के बारे में जानकारी है जिसने लॉगिन किया है।

निम्नलिखित क्वेरी निष्पादित करें:

SELECT is_user_process, original_login_name, *
FROM sys.dm_exec_sessions ORDER BY login_time DESC

उपरोक्त क्वेरी is_user_process और original_login_name को पहले और दूसरे कॉलम के रूप में sys.dm_exec_sessions व्यू से बाकी सभी कॉलम के साथ लौटाती है। यह लॉगिन समय के अवरोही क्रम से परिणामों को क्रमबद्ध करता है। इसलिए, सबसे हाल के कनेक्शन सबसे ऊपर दिखाई देते हैं।

आउटपुट में, उन पंक्तियों तक स्क्रॉल करें जहां is_user_process कॉलम में 1 है।

मेरे मामले में, मेरे पास दो ऐसी पंक्तियाँ हैं जैसा कि नीचे दिए गए आउटपुट में दिखाया गया है:

मूल_लॉगिन_नाम कॉलम में, आप उस कनेक्शन का नाम देख सकते हैं जिसने लॉगिन किया था (इस मामले में मेरे पीसी का नाम)। Program_name कॉलम में, आप कनेक्शन का प्रकार देख सकते हैं। उपरोक्त मामले में, session_id 51 के साथ कनेक्शन SQL सर्वर ऑब्जेक्ट एक्सप्लोरर के साथ कनेक्शन है। session_id 52 के साथ कनेक्शन एकमात्र क्वेरी विंडो के लिए कनेक्शन है जिसमें स्क्रिप्ट चलाई जा रही है। यदि आपके पास दो क्वेरी विंडो खुली हैं, तो आपको यहां कुल तीन उपयोगकर्ता कनेक्शन दिखाई देंगे, इत्यादि।

उपयोगकर्ता प्रक्रियाओं द्वारा किए गए कनेक्शनों की कुल संख्या की गणना करने के लिए, निम्न क्वेरी निष्पादित करें:

SELECT COUNT(*) FROM sys.dm_exec_sessions 
WHERE is_user_process = 1

उपरोक्त क्वेरी दो लौटाती है क्योंकि मेरे सर्वर पर केवल दो user_process कनेक्शन हैं।

लॉगिन की संख्या सीमित करने के लिए लॉगऑन ट्रिगर

आइए एक साधारण लॉगऑन ट्रिगर बनाएं जो एक कनेक्शन द्वारा किए जा सकने वाले लॉगिन की कुल संख्या को 3 तक सीमित करता है। यदि कनेक्शन चौथी बार डेटाबेस सर्वर में लॉग इन करने का प्रयास करता है, तो लॉगऑन ट्रिगर लॉगिन प्रक्रिया को वापस ले लेता है।

इस ट्रिगर की स्क्रिप्ट इस प्रकार है:

CREATE TRIGGER tr_CheckLogin
ON ALL SERVER
FOR LOGON
AS
BEGIN
	DECLARE @login NVARCHAR(100)
	SET @login = ORIGINAL_LOGIN()

	IF
	(SELECT COUNT(*) FROM sys.dm_exec_sessions 
	WHERE is_user_process = 1
	AND original_login_name = @login) > 3
	BEGIN
	Print 'More than three connections not allowed - Connection by ' + @login + ' Failed'
	ROLLBACK
	END

END

ऊपर की स्क्रिप्ट में हम tr_CheckLogin नाम का एक ट्रिगर बनाते हैं। ट्रिगर स्कोप सर्वर पर सेट है।

आप ऑब्जेक्ट एक्सप्लोरर -> सर्वर ऑब्जेक्ट्स -> ट्रिगर्स पर जाकर ट्रिगर विवरण देख सकते हैं, जैसा कि नीचे दिए गए चित्र में दिखाया गया है:

जब भी लॉगऑन इवेंट होता है तो ट्रिगर सक्रिय हो जाता है यानी कनेक्शन सर्वर में लॉग इन करने का प्रयास करता है। ट्रिगर की बॉडी को ध्यान से देखें।

ORIGINAL_LOGIN फ़ंक्शन उपयोगकर्ता प्रक्रिया का नाम देता है, या कनेक्शन सर्वर में लॉगिन करने का प्रयास कर रहा है। इसके बाद, समान नाम वाले कनेक्शनों की कुल संख्या को sys.dm_exec_session दृश्य का उपयोग करके गिना जाता है। यदि कनेक्शनों की संख्या 3 से अधिक है, तो लॉगिन वापस ले लिया जाता है और उपयोगकर्ता को एक स्टेटमेंट मुद्रित किया जाता है जिसमें लिखा होता है:"तीन से अधिक कनेक्शन की अनुमति नहीं है - 'कनेक्शन_नाम' से कनेक्शन विफल"।

इसे सत्यापित करने के लिए, SQL सर्वर प्रबंधन स्टूडियो में एक नई क्वेरी विंडो खोलें

नोट:पहले, दो कनेक्शन खुले थे, एक SQL सर्वर प्रबंधन स्टूडियो के लिए और दूसरा क्वेरी विंडो के लिए।

जब आप एक नई क्वेरी विंडो खोलने का प्रयास करते हैं, तो tr_CheckLogin ट्रिगर सक्रिय हो जाएगा लेकिन चूंकि इस समय लॉगिन की कुल संख्या तीन होगी, इसलिए ट्रिगर लॉगिन को वापस नहीं करेगा।

यह सत्यापित करने के लिए कि user_process द्वारा कनेक्शन की कुल संख्या, निम्न क्वेरी निष्पादित करें:

SELECT COUNT(*) FROM sys.dm_exec_sessions 
WHERE is_user_process = 1

अब, कुल 3 उपयोगकर्ता कनेक्शन हैं जैसा कि आउटपुट में दिखाया गया है:

अब फिर से SQL सर्वर प्रबंधन स्टूडियो में एक नई क्वेरी विंडो खोलकर एक नया कनेक्शन बनाने का प्रयास करें।

आपको निम्न त्रुटि दिखाई देगी:

त्रुटि कहती है कि ट्रिगर निष्पादन के कारण "DESKTOP-GLQ5VRA\Mani" (मेरे पीसी का नाम) के लिए लॉगिन विफल हो गया। मूल रूप से, हमने जो ट्रिगर बनाया है, वह कनेक्शन की अनुमति नहीं देता है। रुकना! लेकिन त्रुटि संदेश कहाँ है जो हमने छापा है? हम इसे यहाँ उपरोक्त संदेश बॉक्स में नहीं देख सकते हैं। कस्टम त्रुटि संदेश जो हमने ट्रिगर में लिखा था उसे त्रुटि लॉग में देखा जा सकता है।

त्रुटि लॉग देखने के लिए, निम्न स्क्रिप्ट निष्पादित करें:

EXECUTE sp_readerrorlog

त्रुटि लॉग को तब तक नीचे स्क्रॉल करें जब तक आपको वह कस्टम संदेश न मिल जाए जो आपने लॉगऑन ट्रिगर के लिए लिखा था। निम्न स्क्रीनशॉट मेरे डेटाबेस सर्वर का त्रुटि लॉग दिखाता है। कस्टम संदेश त्रुटि लॉग में देखा जा सकता है:

आगे पढ़ना:

  • YouTube:SQL सर्वर लॉगऑन ट्रिगर
  • Microsoft.com:लॉगऑन ट्रिगर
  • एसक्यूएल अध्ययन:एक भगोड़ा लॉगऑन ट्रिगर से बचना

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक बाधा जो केवल दो तालिकाओं में से एक को आधार तालिका को संदर्भित करने की अनुमति देती है

  2. SQL सर्वर में एक लिंक्ड सर्वर लॉगिन जोड़ें (T-SQL उदाहरण)

  3. एमएस एसक्यूएल सर्वर क्रॉस टेबल बाधा

  4. बैकअप के बिना SQL डेटाबेस को सुधारने और पुनर्स्थापित करने के लिए त्वरित सुझाव

  5. SQL सर्वर में चेंज डेटा कैप्चर का उपयोग करके इंक्रीमेंटल लोड को लागू करना