বিদ্যমান ব্যবহারকারীদের পাসওয়ার্ড নীতি যাচাই করা


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
কি সম্মেলন? এসকিউএল সার্ভারের দিন? বিআইসিসি? একটি দ্রুত অনুসন্ধান করেছেন, দেখে মনে হচ্ছে এমন কোনও দেশীয় ফাংশন নেই যা দ্রুত আপনাকে ফলাফল দেবে। তৃতীয় পক্ষের সরঞ্জাম ব্যবহার করা সম্ভব হতে পারে।
স্টিজন ওয়াইনেন্টস

এসকিউএল সার্ভারের দিন। আমি কিছু তাত্ক্ষণিক অনুসন্ধানও করেছি, এবং এমন কিছু সরঞ্জাম ছাড়াও যে অভিধানের আক্রমণগুলি ব্যবহার করে PWDCOMPARE()আমি সত্যিই খুব বেশি কিছু পাইনি, নির্বিশেষে প্রচেষ্টার জন্য আপনাকে ধন্যবাদ!
পৌঁছেছে

আপনি পরবর্তী লগইনে নীতিটি যাচাই করতে পারেন এবং নিরীক্ষার আগে লগ ইন না করে এমন সমস্ত ব্যবহারকারীদের জন্য পুনরায় সেট করতে বাধ্য করতে পারেন। সমস্ত পাসওয়ার্ড পুনরায় সেট করার সাথে তুলনায় কম ব্যবহারকারীর বিরক্তি।
কোডসইনচাওস

@ কোডসইনচাউস লগইন ইভেন্টের সময় আপনি কীভাবে নীতিটি বৈধ করবেন?
অ্যারন বারট্র্যান্ড

1
আমি এই সমস্যাটি সম্পর্কে ব্লগ করেছি - এবং আমি আপনাদের সবাইকে ভোট দিয়ে সংযোগ আইটেমটিতে মন্তব্য করতে উত্সাহিত করেছি ।
অ্যারন বারট্র্যান্ড

উত্তর:


15

এটি আপনার ব্যবহারকারীর মধ্যে জনপ্রিয় নাও হতে পারে তবে আমি বিশ্বাস করি যে আপনি কেবলমাত্র নিশ্চিতভাবে জানতে পারেন যে প্রতিটি এসকিউএল লগইন করে একটি পাসওয়ার্ড পরিবর্তন করার জন্য বাধ্য করা 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;

ব্যক্তিগতভাবে, আমি মনে করি এটি একটি বাগ। যদি সিনট্যাক্সটি আমাকে একটি হ্যাশ পাসওয়ার্ড ব্যবহার করে লগইন তৈরি করতে দেয় এবং আমি দৃp়ভাবে বলতে পারি যে সেই পাসওয়ার্ডটি আমার জটিলতা নীতিটি পূরণ করতে পারে, তবে এটি একটি ত্রুটি বা সতর্কতা উত্থাপন করে যে নীতিটি বাস্তবে চেক করা হয়নি।

আপডেট : আমি এই আচরণের বিরুদ্ধে একটি বাগ দায়ের করেছি।


আরেকটি জটিলতা হ'ল আমি সত্যিই যথেষ্ট নিশ্চিত যে পূর্ববর্তী প্রশাসক পাসওয়ার্ডগুলি মনে রাখা সহজ করার পরে এই নীতিটি কেবল পরীক্ষা করেছিলেন। select @@SERVERNAME as servername, name FROM sys.sql_logins where PWDCOMPARE(name, password_hash) = 1 AND is_policy_checked = 1;বেশ কয়েকটি ইতিবাচক ফলাফল দিয়েছে। সুতরাং আমাকে সমস্ত লগইনগুলির জন্য এটি করতে হবে , কেবল is_policy_checkedবন্ধ হওয়াগুলি নয় ।
পৌঁছেছে

@ সম্ভাব্যভাবে পৌঁছেছে। অথবা উইন্ডোজ আপনার পাসওয়ার্ড নীতি দুর্বল বা অক্ষম হতে পারে, তাই নীতিটি প্রয়োগ করার চেষ্টা করা সাহায্য করে না।
অ্যারন বারট্র্যান্ড

আমি কেবল দ্বিতীয় সার্ভারে একই ব্যবহারকারী তৈরি করার চেষ্টা করেছি এবং পাসওয়ার্ডের বৈধতা ব্যর্থ হয়েছে। সুতরাং আমি জটিলতা চেক কাজ অনুমান। আমি ব্যবহারকারীদের অনুলিপি পুনরায় তৈরি করার ধারণাটি পছন্দ করি! আমি একটি স্ক্রিপ্ট তৈরি করতে কাজ করব যা কেবল এটিই করে! সম্পাদনা: আসলে আমি ভারী উত্তোলন করতে কেবল sp_help_revlogin ব্যবহার করতে পারি।
পৌঁছেছে

"এটি ইতিমধ্যে হ্যাশ করা পাসওয়ার্ডের কোনও বৈধতা সম্পাদন করে না" এটি কীভাবে করবে? আপনি যদি কেবল হ্যাশটি জানেন এবং না সরল পাসওয়ার্ড, আপনি পাসওয়ার্ডের জটিলতাটি পরীক্ষা করতে পারবেন না। আপনি পাসওয়ার্ডটি অনুমান করতে পারেন, তবে এটি একটি শালীন পাসওয়ার্ড হ্যাশের জন্য খুব ব্যয়বহুল হবে কারণ একটি পাসওয়ার্ড হ্যাশের পুরো বিন্দু সরলখরার পাসওয়ার্ড পুনরুদ্ধারকে আটকাচ্ছে।
কোডসইনচাউস

@ কোডস চ্যাওস আমি জানি, এটি আমার বক্তব্য ... আমি বলেছিলাম "না" তবে এটি "সম্ভবত সম্ভব" নাও লিখতে পারত ...
অ্যারন বারট্রান্ড

4

আপনি এটি 100% নির্ভুল পেতে যাচ্ছেন এমন কোনও উপায় নেই। যদিও আপনি PWDCOMPAREদুর্বল পাসওয়ার্ডগুলির তালিকার বিরুদ্ধে পরীক্ষা করতে ব্যবহার করতে পারেন (আপনি দুর্বল পাসওয়ার্ডের তালিকায় যুক্ত করতে পারেন এবং তুলনা করতে পারেন)।

আমি একটি অনুরূপ স্ক্রিপ্ট লিখেছি যা তুলনা করে এবং আপনাকে ফলাফল দেয়। আমি এটি গিথুবে পোস্ট করেছি ।

সম্পাদনা করুন:

এখন আপনার কোনও সিএসভিতে দুর্বল পাসওয়ার্ডের একটি তালিকা থাকতে পারে এবং তারপরে স্যুইচ Test-DbaLoginPasswordসহ ডাবটুলগুলি ব্যবহার করতে -Dictionaryপারেন (দুর্বল পাসওয়ার্ডগুলির পরীক্ষার জন্য পাসওয়ার্ডগুলির একটি তালিকা নির্দিষ্ট করে))


আমি যদি কখনও কোনও নির্দিষ্ট ব্যবহারকারীর পাসওয়ার্ডের জন্য নিজেকে নিরীক্ষণ করতে হয় তবে আমি আপনার স্ক্রিপ্টটি ব্যবহার করতে চাই। তবে নিরীক্ষক কী করতে চলেছে তা না জেনে আমি বরং নিশ্চিত হয়েছি যে সবকিছুই নীতিমালা মেনে চলে এবং নীতি তৈরির ক্ষেত্রে নির্ভর করে ly ধন্যবাদ যদিও! +1
পৌঁছেছে

0

এসকিউএল লগইন প্রতি পাসওয়ার্ড নীতি শুধুমাত্র চালু বা বন্ধ জন্য একটি পতাকা। যদি পাসওয়ার্ড নীতি পতাকাটি পরীক্ষা করা হয় তবে অপারেটিং সিস্টেম থেকে উইন্ডোজ পাসওয়ার্ড নীতি প্রয়োগ করা হয়।

CHECK_POLICY এবং CHECK_EXPIRATION সেট হয়ে গেলে কী হয় তার বিশদগুলির জন্য CREATE LOGIN ডকুমেন্টেশন চেক করুন।

আপনি এসকিউএল ব্যবহারকারী প্রতি সেটিংস দেখতে পাচ্ছেন_পলিসি_চেক করা হয়েছে এবং s_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 ;

এসকিউএল সার্ভার প্রমাণীকরণ লগিনগুলির জন্য:

select * from sys.server_principals where type in ('U','G') - আপনাকে লগইন এবং গোষ্ঠীগুলি দেখাবে যা উইন্ডোজ প্রমাণীকরণের মাধ্যমে কোনও এসকিউএল সার্ভার অ্যাক্সেস করতে পারে।


আমি ইতিমধ্যে একই জাতীয় কোয়েরি ব্যবহার করছিলাম বলে আমার প্রশ্নটি কিছুটা আপডেট করেছে using আমার মূল সমস্যাটি হ'ল আমাকে আমার বসকে আশ্বস্ত করা দরকার যে পাসওয়ার্ডগুলি নীতিমালা মেনে চলে, তবে পাসওয়ার্ডগুলি না জেনে আমি কীভাবে পারি।
পৌঁছায়
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.