मौजूदा उपयोगकर्ताओं पर पासवर्ड नीति का सत्यापन


11

मैं हाल ही में एक ऐसे वातावरण में आया हूँ जहाँ बहुत सारे डेटाबेस लॉगिन में enforce_password_policyसक्षम ध्वज नहीं है ।
एक आगामी ऑडिट इन लॉगिन पासवर्ड के सत्यापन की आवश्यकता है।

मैंने लॉगिन की सूची प्राप्त करने के लिए निम्नलिखित क्वेरी का उपयोग किया और झंडे चालू या बंद हैं।

select 
    @@SERVERNAME as servername, 
    name, 
    IS_SRVROLEMEMBER('sysadmin', name) as SYSADMIN,
    type_desc,
    create_date,
    is_policy_checked,
    is_disabled,
    password_hash,
    PWDCOMPARE(name, password_hash) as UsernameAsPassword
FROM sys.sql_logins

हालाँकि, यह मुझे नहीं बताता है कि पासवर्ड वास्तव में पासवर्ड नीति का पालन करते हैं, क्योंकि झंडा केवल उपयोगकर्ता बनाते समय ही प्रासंगिक होता है।

क्या पासवर्ड नीति के अनुपालन के लिए मौजूदा उपयोगकर्ताओं का परीक्षण करने का एक ज्ञात तरीका है ?
मेरे पास पुराने पासवर्ड की कोई पहुंच नहीं है, और मैं एक ऐसी विधि पसंद करूंगा जिसमें उनकी आवश्यकता न हो।


1
क्या सम्मेलन? SQL सर्वर दिन? BICC? त्वरित खोज की, ऐसा लगता है कि कोई मूल कार्य नहीं है जो आपको तुरंत परिणाम देगा। तीसरे पक्ष के उपकरण का उपयोग करना संभव हो सकता है।
टिजिन वायनैन्ट्स

SQL सर्वर दिन। मैंने कुछ त्वरित खोज भी की है, और कुछ उपकरणों के अलावा जो सिर्फ शब्दकोश हमलों का उपयोग करते हैं, PWDCOMPARE()मैं वास्तव में बहुत अधिक नहीं मिला हूं, भले ही प्रयास के लिए धन्यवाद!
प्रतिक्रिया

आप अगले लॉगिन पर नीति को मान्य कर सकते हैं और उन सभी उपयोगकर्ताओं के लिए रीसेट कर सकते हैं जो ऑडिट से पहले लॉग इन नहीं करते हैं। सभी पासवर्ड रीसेट करने की तुलना में कम उपयोगकर्ता झुंझलाहट।
कोडइन्चोस

@CodesInChaos लॉगिन ईवेंट के दौरान आप पॉलिसी को कैसे मान्य करते हैं?
हारून बर्ट्रेंड

1
मैंने इस मुद्दे के बारे में ब्लॉग किया है - और मैं आप सभी को वोट करने और कनेक्ट आइटम पर टिप्पणी करने के लिए प्रोत्साहित करता हूं ।
हारून बर्ट्रेंड

जवाबों:


15

यह आपके उपयोगकर्ताओं के बीच लोकप्रिय नहीं हो सकता है, लेकिन मेरा मानना ​​है कि एकमात्र तरीका जिसे आप निश्चित रूप से जान सकते हैं कि प्रत्येक SQL लॉगिन के लिए पासवर्ड परिवर्तन के लिए बाध्य किया जाए CHECK_POLICY = ON। यह ALTER LOGINखाली पासवर्ड के साथ आदेशों का एक सेट उत्पन्न करेगा , आप क्वेरी को उन सभी को एक सामान्य पासवर्ड दे सकते हैं या मैन्युअल रूप से प्रत्येक व्यक्ति को व्यक्तिगत पासवर्ड के साथ अपडेट कर सकते हैं - बस सुनिश्चित करें कि वे आपकी नीति को पूरा करते हैं। बेशक आपको यह सुनिश्चित करने की आवश्यकता है कि पासवर्ड नीति आपकी अपेक्षा के अनुसार जटिल है, और यह सक्षम है (नियंत्रण कक्ष> प्रशासनिक उपकरण> स्थानीय सुरक्षा नीति> खाता नीतियाँ> पासवर्ड नीति> पासवर्ड जटिलता आवश्यकताओं को पूरा करना चाहिए)।

SELECT N'ALTER LOGIN ' + QUOTENAME(name) 
  + N' WITH PASSWORD = N'''' MUST_CHANGE, CHECK_POLICY = ON;' 
  FROM sys.sql_logins 
  --WHERE is_policy_checked = 0;

स्टीव जोन्स ने इस बारे में कुछ समय पहले लिखा था । ध्यान दें कि - नीचे मैंने जो कुछ भी खोला है, उसके कारण - आप इस बात पर भरोसा नहीं कर सकते is_policy_checked = 1कि पासवर्ड वास्तव में आपकी वर्तमान नीति से मिलता है, क्योंकि लॉगिन एक हैशेड पासवर्ड के साथ बनाया जा सकता था (जिस स्थिति में सादा पाठ पासवर्ड नहीं हो सकता है जाँच की गई) या जबकि स्थानीय जटिलता नीति को अक्षम कर दिया गया था (जो अभी भी होता है is_policy_checked = 1)।

एक अन्य दृष्टिकोण जो मैंने सोचा था कि उनके वर्तमान और साथ हर लॉगिन की एक प्रति बनाने की कोशिश करने के लिए काम करेगा , और असफल होने वाले हर एक नोट को नोट करना होगा। हालांकि, यह काम नहीं कर सकता है - यहां तक ​​कि , यह पहले से ही हैशेड पासवर्ड का कोई सत्यापन नहीं करता है। मैं पोस्टरिटी के लिए कोड शामिल करूंगा - लेकिन, डिजाइन से, पॉलिसी को आसानी से जांचा नहीं जा सकता है।password_hashCHECK_POLICY = ONCHECK_POLICY = ON

SELECT N'BEGIN TRY
  CREATE LOGIN ' + QUOTENAME(N'copy_of_' + name) 
    + N' WITH PASSWORD = ' 
    + CONVERT(NVARCHAR(255), password_hash, 1)
    + ' HASHED, CHECK_POLICY = ON;
  DROP LOGIN ' + QUOTENAME(N'copy_of_' + name) + ';
END TRY
BEGIN CATCH
  IF ERROR_NUMBER() = 15118
    PRINT N''' + REPLACE(name, '''', '''''') 
      + N' was not complex enough.'';
END CATCH'
FROM sys.sql_logins;

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

अद्यतन : मैंने इस व्यवहार के खिलाफ एक बग दर्ज किया।


एक और जटिलता यह है कि मुझे वास्तव में यकीन है कि पिछले व्यवस्थापक ने पासवर्ड याद रखने के लिए आसान में डालने के बाद इस नीति की जाँच की थी। select @@SERVERNAME as servername, name FROM sys.sql_logins where PWDCOMPARE(name, password_hash) = 1 AND is_policy_checked = 1;कई सकारात्मक परिणाम दिए। तो मुझे सभी लॉगइन के लिए ऐसा करना होगा , न कि उन लोगों के साथ जो is_policy_checkedबंद हो गए।
14

@Reaces संभवतः। या विंडोज में आपकी पासवर्ड पॉलिसी कमजोर या अक्षम हो सकती है, इसलिए पॉलिसी को लागू करने की कोशिश करने से मदद नहीं मिलती है।
हारून बर्ट्रेंड

मैंने बस दूसरे सर्वर पर एक ही उपयोगकर्ता बनाने की कोशिश की, और एक पासवर्ड सत्यापन विफल हो गया। इसलिए मुझे लगता है कि जटिलता की जांच कार्य करता है। मुझे हालांकि उपयोगकर्ताओं की प्रतियां फिर से बनाने का विचार पसंद है! मैं एक स्क्रिप्ट बनाने के लिए काम करूँगा जो कि बस करता है! संपादित करें: वास्तव में मैं सिर्फ भारी उठाने के लिए sp_help_revlogin का उपयोग कर सकता था ।
प्रतिक्रिया

"यह पहले से मौजूद पासवर्ड का कोई सत्यापन नहीं करता है" यह कैसे होगा? यदि आप केवल हैश जानते हैं और सादा पासवर्ड नहीं, तो आप पासवर्ड की जटिलता की जाँच नहीं कर सकते। आप पासवर्ड का अनुमान लगा सकते हैं, लेकिन यह एक सभ्य पासवर्ड हैश के लिए बहुत महंगा होगा क्योंकि पासवर्ड हैश के पूरे बिंदु पर सादे पासवर्ड की वसूली को रोक रहा है।
कोडइन्चोस

@CodesInChaos मुझे पता है, मेरी बात है कि ... मैं ने कहा, "नहीं है" लेकिन यह भी लिखा जा सकता था "सकता संभवतः नहीं" ...
हारून बर्ट्रेंड

4

कोई रास्ता नहीं है कि आप इस 100% सटीक होने जा रहे हैं। यद्यपि आप PWDCOMPAREकमजोर पासवर्ड की सूची के खिलाफ जांच करने के लिए उपयोग कर सकते हैं (आप कमजोर पासवर्ड की सूची में जोड़ सकते हैं और तुलना कर सकते हैं)।

मैंने एक समान स्क्रिप्ट लिखी है जो तुलना करती है और आपको परिणाम देती है। मैंने इसे गीथूब पर पोस्ट किया है ।

संपादित करें:

अब आपके पास एक सीएसवी में कमजोर पासवर्ड की एक सूची हो सकती है और फिर स्विच के Test-DbaLoginPasswordसाथ dbatools का उपयोग कर सकते हैं -Dictionary(कमजोर पासवर्ड के लिए परीक्षण में शामिल करने के लिए पासवर्ड की एक सूची निर्दिष्ट करता है।)


अगर मुझे कभी किसी विशेष उपयोगकर्ता के पासवर्ड का ऑडिट करना हो तो मैं आपकी स्क्रिप्ट का उपयोग करना चाहूंगा। हालाँकि यह नहीं पता कि ऑडिटर क्या करने जा रहा है, बल्कि मैं यह सुनिश्चित करना चाहता हूं कि सब कुछ नीतिगत हो और नीतियों को बनाने वालों पर निर्भर हो। हालांकि धन्यवाद! +1
प्रतिक्रिया

0

प्रति SQL लॉगिन पासवर्ड नीति केवल या उसके लिए एक ध्वज है। यदि पासवर्ड नीति ध्वज की जाँच की जाती है, तो ऑपरेटिंग सिस्टम से विंडोज पासवर्ड नीति लागू की जाती है।

CHECK_POLICY और CHECK_EXPIRATION सेट होने पर क्या होता है, इसके विवरण के लिए क्रिएट लॉग प्रलेखन की जाँच करें।

आप प्रति SQL उपयोगकर्ता की सेटिंग्स कॉलम देख कर देख सकते हैं is_policy_checked और is_expiration_checked में sys.sql_logins

नीचे जैसा कुछ है:

SELECT name,
create_date,
modify_date,
LOGINPROPERTY(name, 'DaysUntilExpiration') DaysUntilExpiration,
LOGINPROPERTY(name, 'PasswordLastSetTime') PasswordLastSetTime,
LOGINPROPERTY(name, 'IsExpired') IsExpired,
LOGINPROPERTY(name, 'IsMustChange') IsMustChange
From sys.sql_logins ;

SQL सर्वर प्रमाणीकरण लॉगिन के लिए:

select * from sys.server_principals where type in ('U','G') - आपको लॉगिन और समूह दिखाएंगे जो Windows प्रमाणीकरण के माध्यम से एक SQL सर्वर तक पहुंच सकते हैं।


मेरे प्रश्न को थोड़ा अपडेट किया, क्योंकि मैं पहले से ही एक समान क्वेरी का उपयोग कर रहा था। मेरा मुख्य मुद्दा यह है कि मुझे अपने बॉस को यह आश्वस्त करने की आवश्यकता है कि पासवर्ड नीति के अनुरूप हैं, हालाँकि उन पासवर्डों को नहीं जानना जिन्हें मैं नहीं जानता कि मैं कैसे कर सकता था।
प्रतिक्रिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.