MySQL ব্যবহারকারী পাসওয়ার্ড পরিবর্তন: ALTER USER কমান্ড (MySQL 5.7 / 8.0) + রুট পুনরুদ্ধার

目次

1. [Quick Answer] MySQL ব্যবহারকারী পাসওয়ার্ড পরিবর্তন কমান্ড তালিকা (সর্বোত্তম সমাধান)

MySQL-এ ব্যবহারকারীর পাসওয়ার্ড পরিবর্তনের মৌলিক কমান্ড হল ALTER USER। এই পদ্ধতি MySQL 5.7 এবং পরের সংস্করণে সুপারিশ করা হয়, এবং MySQL 8.0-এও একইভাবে ব্যবহার করা হয়।

1.1 মৌলিক সিনট্যাক্স (সবচেয়ে বেশি ব্যবহৃত)

ALTER USER 'username'@'localhost' IDENTIFIED BY 'newpassword';
  • username : আপডেট করার লক্ষ্য ব্যবহারকারীর নাম
  • localhost : ক্লায়েন্ট হোস্ট (একটি MySQL অ্যাকাউন্ট “ব্যবহারকারীর নাম + হোস্ট” দ্বারা সনাক্ত হয়)
  • newpassword : নতুন পাসওয়ার্ড

এক্সিকিউট করার পর, পরিবর্তন তৎক্ষণাৎ কার্যকর হয়। অধিকাংশ ক্ষেত্রে, FLUSH PRIVILEGES; প্রয়োজন হয় না (ALTER USER স্বয়ংক্রিয়ভাবে প্রিভিলেজ টেবিল আপডেট করে)。

সাধারণ ভুলগুলো

  • একই ব্যবহারকারীর নাম থাকলেও, @'localhost' এবং @'%' ভিন্ন অ্যাকাউন্ট হিসেবে বিবেচিত হয়
  • পাসওয়ার্ডের চিহ্নগুলো একক উদ্ধৃতি চিহ্নের মধ্যে থাকতে হবে

1.2 রিমোট অ্যাক্সেস ব্যবহারকারী পরিবর্তন (%)

ALTER USER 'username'@'%' IDENTIFIED BY 'newpassword';

% মানে “যেকোনো হোস্ট।” এটি ক্লাউড পরিবেশে বা বাহ্যিক থেকে সংযোগের অনুমতি থাকা ব্যবহারকারীদের জন্য সাধারণত ব্যবহৃত হয়।

নোট

  • SELECT User, Host FROM mysql.user; দিয়ে আগে থেকে চেক করা নিরাপদ
  • ভুল হোস্টের জন্য পাসওয়ার্ড পরিবর্তন করলে লগইন করা সম্ভব হবে না

1.3 প্রমাণীকরণ প্লাগইন নির্দিষ্ট করে পাসওয়ার্ড পরিবর্তন (8.0-এ গুরুত্বপূর্ণ)

MySQL 8.0-এ, ডিফল্ট প্রমাণীকরণ প্লাগইন হল caching_sha2_password। পুরনো ক্লায়েন্ট দিয়ে সংযোগ না হলে, স্পষ্টভাবে প্লাগইন নির্ধারণ করুন।

ALTER USER 'username'@'localhost'
IDENTIFIED WITH mysql_native_password
BY 'newpassword';
  • mysql_native_password : পুরনো পদ্ধতি (সামঞ্জস্যতা অগ্রাধিকার দেয়)
  • caching_sha2_password : MySQL 8.0 স্ট্যান্ডার্ড (সুপারিশকৃত)

সাধারণ ভুলগুলো

  • পুরনো PHP বা ক্লায়েন্টগুলো MySQL 8.0 ডিফল্ট প্লাগইন সমর্থন নাও করতে পারে
  • প্রমাণীকরণ প্লাগইন চেক না করে “আমি লগইন করতে পারছি না” সিদ্ধান্ত নেওয়া

1.4 যদি আপনি প্রিভিলেজ ত্রুটি পান

Error example:

ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_USER privilege(s)

এই ক্ষেত্রে, বর্তমানে লগইন করা ব্যবহারকারীর পরিবর্তন করার অনুমতি নেই।

Check:

SHOW GRANTS FOR CURRENT_USER();

রুট ব্যবহারকারী বা পর্যাপ্ত প্রিভিলেজযুক্ত ব্যবহারকারী হিসেবে কমান্ডটি চালান।

1.5 পরিবর্তনের পরে কীভাবে যাচাই করবেন

SELECT User, Host, plugin FROM mysql.user WHERE User='username';
  • plugin কলামের মাধ্যমে প্রমাণীকরণ প্লাগইন চেক করুন
  • সবচেয়ে নির্ভরযোগ্য যাচাই হল প্রকৃতপক্ষে লগইন করে সংযোগ নিশ্চিত করা

1.6 বিদ্যমান সেশনগুলো কী হয়

After changing a password:

  • নতুন সংযোগগুলোকে নতুন পাসওয়ার্ড ব্যবহার করতে হবে
  • পরিবেশের উপর নির্ভর করে বিদ্যমান সেশনগুলো তৎক্ষণাৎ বন্ধ হতে পারে
  • প্রোডাকশনে, ব্যবসায়িক সময়ের বাইরে পরিবর্তন করা সুপারিশ করা হয়

2. MySQL ব্যবহারকারী ও হোস্টের মৌলিক বিষয় (সাধারণ “আটকে যাওয়া” সমস্যাগুলি প্রতিরোধ করুন)

MySQL-এ, একটি ব্যবহারকারী শুধুমাত্র “ব্যবহারকারীর নাম” দিয়ে সনাক্ত হয় না। বরং, এটি “ব্যবহারকারীর নাম + ক্লায়েন্ট হোস্ট (Host)” এর সমন্বয়ে সনাক্ত হয়। যদি আপনি এটি না বুঝেন, তবে ক্লাসিক সমস্যার মুখোমুখি হতে পারেন: “আমি পাসওয়ার্ড পরিবর্তন করেছি কিন্তু এখনও লগইন করতে পারছি না।”

2.1 একটি ব্যবহারকারী হল “user@host” জোড়া

উদাহরণ:

  • 'appuser'@'localhost'
  • 'appuser'@'%'
  • 'appuser'@'192.168.1.%'

এগুলো সবই ভিন্ন অ্যাকাউন্ট হিসেবে বিবেচিত হয়। তাই আপনি যদি localhost এর পাসওয়ার্ড পরিবর্তন করেন, তবু % অ্যাকাউন্টে কোনো প্রভাব পড়বে না।

Check command:

SELECT User, Host FROM mysql.user ORDER BY User, Host;

সাধারণ ভুলগুলো

  • একই ব্যবহারকারীর নামের সাথে একাধিক অ্যাকাউন্ট আছে তা না বুঝা
  • আপনি localhost এর পাসওয়ার্ড পরিবর্তন করেছেন, কিন্তু প্রকৃতপক্ষে TCP (127.0.0.1) দিয়ে লগইন করছেন

2.2 localhost এবং 127.0.0.1 ভিন্নভাবে বিবেচিত হয়

In MySQL:

  • localhost → UNIX সকেট সংযোগ (স্থানীয় অভ্যন্তরীণ সংযোগ)
  • 127.0.0.1 → TCP/IP সংযোগ

পরিবেশের উপর নির্ভর করে, ভিন্ন অ্যাকাউন্ট মিলে যেতে পারে।

Check:

mysql -u username -p -h 127.0.0.1

যদি উপরেরটি দিয়ে লগ ইন করতে না পারেন, তাহলে @'127.0.0.1' অ্যাকাউন্টটি সম্ভবত বিদ্যমান নেই।

2.3 বর্তমান প্রমাণিত ব্যবহারকারী পরীক্ষা করুন

“আপনি কোন অ্যাকাউন্ট হিসেবে প্রমাণিত হয়েছেন” তা বুঝা গুরুত্বপূর্ণ।

SELECT CURRENT_USER();

এটি প্রকৃতপক্ষে প্রমাণিত “user@host” প্রদর্শন করে।

SELECT USER(); সংযোগ অনুরোধের তথ্য দেখায়, তাই এটি মিলতে পারে না।

2.4 সুবিধা পরীক্ষা করুন (SHOW GRANTS)

যদি আপনি পাসওয়ার্ড পরিবর্তন করতে না পারেন, তাহলে অপর্যাপ্ত সুবিধা কারণ হতে পারে।

SHOW GRANTS FOR 'username'@'host';

বা বর্তমান লগ-ইন করা ব্যবহারকারীর জন্য:

SHOW GRANTS FOR CURRENT_USER();

ন্যূনতম প্রয়োজনীয় সুবিধা

  • ALTER USER
  • অথবা SYSTEM_USER (MySQL 8.0 এবং পরবর্তী)

2.5 সাধারণ ব্যর্থতার ধরণ

  1. আপনি ভুল হোস্টের জন্য পাসওয়ার্ড পরিবর্তন করেছেন
  2. প্রমাণীকরণ প্লাগইন ভিন্ন (8.0-এ খুব সাধারণ)
  3. লক্ষ্য অ্যাকাউন্টটি প্রথমতই বিদ্যমান নেই

ব্যবহারকারী বিদ্যমান কিনা তা পরীক্ষা করুন:

SELECT User, Host FROM mysql.user WHERE User='username';

এই মডেলটি বুঝলে, আপনি পাসওয়ার্ড-পরিবর্তন সম্পর্কিত অধিকাংশ সমস্যা এড়াতে পারবেন।

3. প্রস্তাবিত পদ্ধতি: ALTER USER দিয়ে নিরাপদে পরিবর্তন করুন (MySQL 8.0 / 5.7-এর জন্য কাজ করে)

MySQL 5.7 এবং পরবর্তীতে, ALTER USER দিয়ে পাসওয়ার্ড পরিবর্তন করা মানক এবং প্রস্তাবিত পদ্ধতি
UPDATE mysql.user-এর মতো সরাসরি আপডেটগুলি সংস্করণের উপর নির্ভর করে ভিন্নভাবে আচরণ করতে পারে এবং ভবিষ্যতের সামঞ্জস্যতার ঝুঁকি বহন করে, তাই তাদের এড়ানো সবচেয়ে ভালো।

3.1 পূর্ব-পরীক্ষা (পরিবর্তনের আগে সর্বদা নিশ্চিত করুন)

পাসওয়ার্ড পরিবর্তনের আগে, এই তিনটি আইটেম নিশ্চিত করুন।

① লক্ষ্য ব্যবহারকারী এবং হোস্ট নিশ্চিত করুন

SELECT User, Host FROM mysql.user WHERE User='username';
  • একই ব্যবহারকারীর নামে একাধিক অ্যাকাউন্ট বিদ্যমান কিনা তা পরীক্ষা করুন
  • localhost এবং % বিভ্রান্ত করবেন না

② বর্তমান প্রমাণীকরণ প্লাগইন নিশ্চিত করুন (8.0-এ গুরুত্বপূর্ণ)

SELECT User, Host, plugin
FROM mysql.user
WHERE User='username';
  • caching_sha2_password (MySQL 8.0 মানক)
  • mysql_native_password (পুরনো প্লাগইন)

কিছু সংযোগ ব্যর্থতা প্রমাণীকরণ প্লাগইনের কারণে ঘটে।

③ বর্তমান প্রমাণিত ব্যবহারকারী নিশ্চিত করুন

SELECT CURRENT_USER();

সুবিধা ত্রুটি এড়াতে, কমান্ডগুলি রুট হিসেবে বা উপযুক্ত সুবিধাসম্পন্ন ব্যবহারকারী হিসেবে চালান।

3.2 ALTER USER চালান (মানক ফর্ম)

ALTER USER 'username'@'localhost'
IDENTIFIED BY 'NewStrongPassword123!';

পরিবর্তনটি তাৎক্ষণিকভাবে কার্যকর হয়।
অধিকাংশ ক্ষেত্রে, FLUSH PRIVILEGES; প্রয়োজন হয় না।

নোট

  • যদি পাসওয়ার্ড নীতি ( validate_password ) লঙ্ঘিত হয়, তাহলে ERROR 1819 ঘটতে পারে
  • যদি পাসওয়ার্ডে বিশেষ অক্ষর থাকে, তাহলে সর্বদা একক উদ্ধৃতিতে এটি ঘিরে রাখুন

3.3 প্রমাণীকরণ প্লাগইন নির্দিষ্ট করে পরিবর্তন করুন (শুধুমাত্র প্রয়োজন হলে)

যদি আপনি MySQL 8.0 পরিবেশে পুরনো ক্লায়েন্ট ব্যবহার করেন:

ALTER USER 'username'@'localhost'
IDENTIFIED WITH mysql_native_password
BY 'NewStrongPassword123!';

যেসব ক্ষেত্রে আপনার এটি পরিবর্তন করা উচিত:

  • পুরনো PHP / পুরনো MySQL ক্লায়েন্ট দিয়ে সংযোগ করতে পারছেন না
  • caching_sha2_password সমর্থন না করা পরিবেশ

যেসব ক্ষেত্রে আপনার এটি পরিবর্তন করা উচিত নয়:

  • যদি আধুনিক পরিবেশে ইতিমধ্যে সমস্যা ছাড়াই সংযোগ করতে পারেন (মানক প্লাগইনটি নিরাপদتر)

3.4 পরিবর্তন-পরবর্তী যাচাই

① প্রমাণীকরণ প্লাগইন যাচাই করুন

SELECT User, Host, plugin
FROM mysql.user
WHERE User='username';

② প্রকৃতপক্ষে লগ ইন করে যাচাই করুন

mysql -u username -p

সর্বদা পরীক্ষা করুন যে আপনি লগ ইন করতে পারছেন।

3.5 বিদ্যমান সেশনের উপর প্রভাব

পাসওয়ার্ড পরিবর্তনের পর:

  • নতুন সংযোগ → নতুন পাসওয়ার্ড ব্যবহার করতে হবে
  • বিদ্যমান সংযোগ → পরিবেশের উপর নির্ভর করে থাকতে পারে
  • প্রোডাকশন → অ্যাপ্লিকেশন সংযোগ পুনরায় শুরু করা প্রয়োজন হতে পারে

সাধারণ ভুল

  • অ্যাপ্লিকেশনের সংযোগ শংকেতাবলী আপডেট না করা
  • কনফিগারেশন ফাইলে পুরনো পাসওয়ার্ড এখনও থেকে যাওয়া

3.6 প্রোডাকশনের জন্য নিরাপদ অপারেশনাল টিপস

  • ব্যবসায়িক সময়ের বাইরে পরিবর্তন করুন
  • অ্যাপ্লিকেশন কনফিগারেশন ফাইলগুলি আগে থেকে পরীক্ষা করুন
  • আপনার SSH সেশন বিচ্ছিন্ন না করে কাজটি সম্পন্ন করুন
  • রুট পরিবর্তন করার সময়, একটি পুনরুদ্ধার পদ্ধতি প্রস্তুত রাখুন

৪. MySQL 8.0 এবং 5.7 এর পার্থক্য

MySQL পাসওয়ার্ড পরিবর্তনের সময় সবচেয়ে বড় সমস্যার কারণ হল MySQL 8.0 এবং 5.7 এর প্রমাণীকরণ পদ্ধতির পার্থক্য
বিশেষ করে, “আমি পরিবর্তন করেছি কিন্তু লগইন করতে পারছি না” এমন অনেক ক্ষেত্রে প্রমাণীকরণ প্লাগইনের পার্থক্যই মূল কারণ।

Diagram showing the difference between MySQL 5.7 mysql_native_password and MySQL 8.0 caching_sha2_password authentication methods

MySQL 5.7 এবং MySQL 8.0 এর প্রমাণীকরণ পার্থক্য

৪.১ ডিফল্ট প্রমাণীকরণ প্লাগইন পার্থক্য

VersionDefault authentication plugin
MySQL 5.7mysql_native_password
MySQL 8.0caching_sha2_password

MySQL 8.0-এ, caching_sha2_password শক্তিশালী নিরাপত্তার জন্য মানদণ্ড হয়ে উঠেছে।
তবে, পুরনো ক্লায়েন্ট (পুরনো PHP সংস্করণ, পুরনো MySQL কানেক্টর ইত্যাদি) এটি সমর্থন নাও করতে পারে।

কীভাবে পরীক্ষা করবেন:

SELECT User, Host, plugin
FROM mysql.user
WHERE User='username';

সাধারণ সমস্যাগুলি

  • পুরনো ক্লায়েন্টগুলি MySQL 8.0-এ তৈরি ব্যবহারকারীদের সাথে সংযোগ করতে পারে না
  • ত্রুটি ঘটলেও, মূল কারণটি প্রমাণীকরণ প্লাগইন তা আপনি বুঝতে পারেন না

৪.২ সামঞ্জস্যতার জন্য প্রমাণীকরণ প্লাগইন কীভাবে পরিবর্তন করবেন

শুধুমাত্র যখন আপনাকে পুরনো পরিবেশ থেকে সংযোগ করতে হয়, তখন নিচের মতো পরিবর্তন করুন:

ALTER USER 'username'@'localhost'
IDENTIFIED WITH mysql_native_password
BY 'NewStrongPassword123!';

পরিবর্তন করার পরে, সর্বদা একটি সংযোগ পরীক্ষা চালান।

নোটসমূহ

  • নিরাপত্তা দৃষ্টিকোণ থেকে, caching_sha2_password বেশি নিরাপদ
  • অপ্রয়োজনীয়ভাবে লিগেসি প্লাগইনে পরিবর্তন করবেন না
  • সম্ভব হলে, ক্লায়েন্ট সাইড আপডেট করা উত্তম

৪.৩ সরাসরি UPDATE সুপারিশ করা হয় না

MySQL 5.7 এবং তার পূর্বের সংস্করণে, নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করা হতো:

UPDATE mysql.user
SET authentication_string=PASSWORD('newpassword')
WHERE User='username';
FLUSH PRIVILEGES;

তবে, এই পদ্ধতিটি:

  • সংস্করণ-নির্ভরতা বেশি
  • 8.0-এ স্পেসিফিকেশন পরিবর্তনের অধীন
  • ভবিষ্যতে অবসরে যাওয়ার সম্ভাবনা রয়েছে

সাধারণ নিয়ম: ALTER USER ব্যবহার করুন

৪.৪ validate_password প্লাগইনের আচরণ পার্থক্য

MySQL 5.7 এবং 8.0-এ, পাসওয়ার্ড নীতি (শক্তি যাচাই) ফিচারগুলি ডিফল্টভাবে উপলব্ধ।

Check:

SHOW VARIABLES LIKE 'validate_password%';

If you violate the policy, you may get:

ERROR 1819 (HY000)

অনেক 8.0 পরিবেশ কঠোর নিরাপত্তা মান প্রয়োগ করে, তাই 5.7 থেকে আপগ্রেড করার পরে আপনি দেখতে পারেন পাসওয়ার্ড পরিবর্তনগুলি শক্তিশালী নীতি প্রয়োজনীয়তার কারণে আর পাস না হতে পারে।

৪.৫ আপনার সংস্করণ কীভাবে পরীক্ষা করবেন

যদি আপনি নিশ্চিত না হন কোন সংস্করণটি চালাচ্ছেন:

SELECT VERSION();

যদি আপনি সংস্করণ নিশ্চিত না করে ফিক্স প্রয়োগ করেন, তবে ভুল পদ্ধতি ব্যবহার করতে পারেন।

৫. ভুলে যাওয়া রুট পাসওয়ার্ড পুনরুদ্ধার (নিরাপত্তা-কেন্দ্রিক পদ্ধতি)

যদি আপনি MySQL root ব্যবহারকারী (অ্যাডমিন) পাসওয়ার্ড ভুলে যান, সাধারণভাবে লগইন করতে পারবেন না। এই ক্ষেত্রে আপনাকে অস্থায়ীভাবে গ্রান্ট টেবিলগুলি নিষ্ক্রিয় করে পাসওয়ার্ড রিসেট করতে হবে। তবে, এই পদ্ধতিতে নিরাপত্তা ঝুঁকি থাকে, তাই ধাপগুলি সতর্কতার সাথে অনুসরণ করুন।

৫.১ সত্যিই রুট পাসওয়ার্ড প্রয়োজন কিনা নিশ্চিত করুন

প্রথমে নিম্নলিখিতগুলি পরীক্ষা করুন:

  • আপনার OS-স্তরের sudo অধিকার আছে কিনা
  • auth_socket প্রমাণীকরণ সক্রিয় আছে কিনা (Ubuntu-ভিত্তিক সিস্টেমে সাধারণ)

Example check:

SELECT User, Host, plugin
FROM mysql.user
WHERE User='root';

যদি plugin হয় auth_socket, তবে আপনি OS রুট ব্যবহারকারী হিসেবে লগইন করতে পারেন।

sudo mysql

যদি এটি কাজ করে, তবে আপনাকে শুধু পাসওয়ার্ড রিসেট করতে হবে।

৫.২ পুনরুদ্ধার প্রবাহ (সাধারণ পদ্ধতি)

① MySQL সার্ভার বন্ধ করুন

sudo systemctl stop mysql

② গ্রান্ট টেবিল নিষ্ক্রিয় অবস্থায় চালু করুন

sudo mysqld_safe --skip-grant-tables &

--skip-grant-tables প্রমাণীকরণ নিষ্ক্রিয় করে।
এই অবস্থায়, যে কেউ সংযোগ করতে পারে, তাই দ্রুত পদ্ধতিটি সম্পন্ন করুন।

③ MySQL-এ সংযোগ করুন

mysql -u root

আপনি পাসওয়ার্ড ছাড়া সংযোগ করতে পারেন।

④ রুট পাসওয়ার্ড রিসেট করুন (প্রস্তাবিত পদ্ধতি)

ALTER USER 'root'@'localhost'
IDENTIFIED BY 'NewStrongPassword123!';

গুরুত্বপূর্ণ

  • UPDATE mysql.user সরাসরি ব্যবহার করবেন না
  • ALTER USER ব্যবহার করুন (সংস্করণ সামঞ্জস্যের জন্য)

⑤ গ্রান্ট টেবিলগুলি পুনরায় সক্রিয় করুন

FLUSH PRIVILEGES;

⑥ স্বাভাবিক মোডে MySQL পুনরায় চালু করুন

sudo systemctl restart mysql

তারপর স্বাভাবিক লগইন যাচাই করুন:

mysql -u root -p

5.3 সাধারণ ভুল

  • --skip-grant-tables সক্রিয় রেখে দেওয়া (গুরুতর নিরাপত্তা ঝুঁকি)
  • অনিচ্ছাকৃতভাবে রুট হোস্ট পরিবর্তন করা
  • প্রমাণীকরণ প্লাগইন ভুলভাবে পরিবর্তন করা এবং নিজেকে লক করা

5.4 প্রোডাকশন পরিবেশের জন্য নোট

  • সর্বদা পাবলিক সার্ভারে রক্ষণাবেক্ষণ উইন্ডোর সময় এটি সম্পাদন করুন
  • কাজ করার সময় আপনার SSH সেশন সক্রিয় রাখুন
  • সম্ভব হলে আগে থেকেই একটি ব্যাকআপ তৈরি করুন

রুট পাসওয়ার্ড পুনরুদ্ধার নিরাপদে করা যায় যদি সতর্কতার সাথে সম্পন্ন করা হয়।

6. সাধারণ ত্রুটি এবং সমাধান (ত্রুটি বার্তা দ্বারা ট্র্যাফিক ক্যাপচার করুন)

MySQL পাসওয়ার্ড পরিবর্তনের সময় বেশ কিছু সাধারণ ত্রুটি ঘটে।
নিচে, আমরা সাধারণ কারণ এবং সমাধানগুলি প্রায়ই অনুসন্ধান করা ত্রুটি কোড অনুযায়ী সংগঠিত করেছি।

6.1 ERROR 1819 (পাসওয়ার্ড নীতি প্রয়োজনীয়তা পূরণ করে না)

ত্রুটি উদাহরণ:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

কারণ

validate_password প্লাগইন দ্বারা আরোপিত শক্তি যাচাই পাসওয়ার্ডে ব্যর্থ হয়েছে।

বর্তমান নীতি পরীক্ষা করুন

SHOW VARIABLES LIKE 'validate_password%';

গুরুত্বপূর্ণ সেটিংস:

  • validate_password.length
  • validate_password.policy
  • validate_password.mixed_case_count
  • validate_password.number_count
  • validate_password.special_char_count

সমাধান ① (প্রস্তাবিত): আরও শক্তিশালী পাসওয়ার্ড ব্যবহার করুন

  • কমপক্ষে 12 অক্ষর
  • বড়হাতের অক্ষর, ছোটহাতের অক্ষর, সংখ্যা এবং চিহ্ন অন্তর্ভুক্ত করুন
  • অভিধান শব্দ ব্যবহার না করুন

সমাধান ② (অস্থায়ীভাবে নীতি শিথিল করুন)

SET GLOBAL validate_password.policy = LOW;

আপনার কাজ সম্পন্ন করার পরে, মূল সেটিংটি পুনরুদ্ধার করা সুপারিশ করা হয়।

সাধারণ ভুল

  • প্রোডাকশনে নীতি শিথিল রেখে দেওয়া
  • এই সেটিং পরিবর্তনের জন্য SUPER অধিকার প্রয়োজন তা উপেক্ষা করা

6.2 ERROR 1227 (অপর্যাপ্ত অধিকার)

ত্রুটি উদাহরণ:

ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_USER privilege(s)

কারণ

বর্তমান ব্যবহারকারীর কাছে ALTER USER অথবা SYSTEM_USER অধিকার নেই।

অধিকার পরীক্ষা করুন

SHOW GRANTS FOR CURRENT_USER();

সমাধান

রুট হিসেবে অথবা পর্যাপ্ত অধিকারযুক্ত ব্যবহারকারী হিসেবে কমান্ডটি চালান।

প্রয়োজন হলে:

GRANT ALTER USER ON *.* TO 'username'@'host';
FLUSH PRIVILEGES;

নোট

  • MySQL 8.0-এ, SYSTEM_USER অধিকারও প্রয়োজন হতে পারে
  • প্রোডাকশনে সর্বনিম্ন অধিকার নীতি অনুসরণ করুন

6.3 পাসওয়ার্ড পরিবর্তনের পরে লগইন করা যাচ্ছে না

প্রধান কারণগুলি

  1. ভুল হোস্ট
  2. প্রমাণীকরণ প্লাগইন মেলেনি
  3. ক্লায়েন্টের অসামঞ্জস্যতা
  4. অ্যাপ্লিকেশন কনফিগারেশন আপডেট করা হয়নি

① হোস্ট পরীক্ষা করুন

SELECT User, Host FROM mysql.user WHERE User='username';

② প্রমাণীকরণ প্লাগইন পরীক্ষা করুন

SELECT plugin FROM mysql.user WHERE User='username';

③ প্রমাণীকরণ প্লাগইন পরিবর্তন করুন (প্রয়োজন হলে)

ALTER USER 'username'@'localhost'
IDENTIFIED WITH mysql_native_password
BY 'NewStrongPassword123!';

④ অ্যাপ্লিকেশন কনফিগারেশন পরীক্ষা করুন

  • .env
  • config.php
  • কানেকশন স্ট্রিং (DSN)

সাধারণ ভুল

  • MySQL পরিবর্তন করা হয়েছে কিন্তু অ্যাপ্লিকেশন আপডেট করা হয়নি
  • Docker পরিবেশে কন্টেইনার পুনরায় চালু করা হয়নি

6.4 পরিবর্তনের পরে পুরানো পাসওয়ার্ড দিয়ে এখনও লগইন করা সম্ভব

সাধারণত, ALTER USER দিয়ে করা পরিবর্তনগুলি তৎক্ষণাৎ কার্যকর হয়।

সম্ভাব্য কারণগুলি:

  • আপনি প্রকৃতপক্ষে অন্য হোস্ট অ্যাকাউন্ট পরিবর্তন করেছেন
  • সংযোগটি অন্য সার্ভার (রিপ্লিকা) দিকে নির্দেশিত
  • সেশন ক্যাশিং

পরীক্ষা করুন:

SELECT CURRENT_USER();

সংযুক্ত সার্ভার এবং প্রমাণীকৃত ব্যবহারকারী উভয়ই সঠিকভাবে নিশ্চিত করা অত্যন্ত গুরুত্বপূর্ণ।

7. নিরাপত্তা অপারেশন: পাসওয়ার্ড নীতি এবং সেরা অনুশীলন

Changing a password is not a one-time task.
একটি পাসওয়ার্ড পরিবর্তন করা একবারের কাজ নয়।
In real-world operations, you maintain security by combining strength enforcement, privilege design, and operational rules.
বাস্তব জগতের অপারেশনে, আপনি শক্তি প্রয়োগ, বিশেষাধিকার নকশা এবং অপারেশনাল নিয়ম একত্রিত করে নিরাপত্তা বজায় রাখেন।

7.1 validate_password প্লাগইন ব্যবহার করা

MySQL পাসওয়ার্ডের শক্তি প্রয়োগের জন্য অন্তর্নির্মিত কার্যকারিতা প্রদান করে।

বর্তমান সেটিংস পরীক্ষা করুন

SHOW VARIABLES LIKE 'validate_password%';

প্রধান কনফিগারেশন প্যারামিটার

  • validate_password.length (ন্যূনতম দৈর্ঘ্য)
  • validate_password.policy (LOW / MEDIUM / STRONG)
  • validate_password.mixed_case_count
  • validate_password.number_count
  • validate_password.special_char_count

উদাহরণ কনফিগারেশন (ন্যূনতম 12 অক্ষর, MEDIUM নীতি)

SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.policy = MEDIUM;

নোট

  • GLOBAL পরিবর্তনগুলি পুনরায় চালু করার পরে রিসেট হতে পারে
  • সেটিংস স্থায়ী করতে, কনফিগারেশন ফাইলে ( my.cnf / my.ini ) কনফিগার করুন

7.2 শক্তিশালী পাসওয়ার্ডের ন্যূনতম প্রয়োজনীয়তা

প্র্যাকটিসে সুপারিশকৃত মানদণ্ড:

  • ন্যূনতম 12 অক্ষর
  • বড়হাতের অক্ষর, ছোটহাতের অক্ষর, সংখ্যা এবং চিহ্ন অন্তর্ভুক্ত করুন
  • অভিধান শব্দ এড়িয়ে চলুন
  • অন্যান্য সেবায় পুনরায় ব্যবহার করবেন না

উদাহরণ:

X9v!pQ4z#Lm2

এড়িয়ে চলার উদাহরণ

password123
mysql2025
companyname!

7.3 পর্যায়ক্রমিক পরিবর্তনের চেয়ে বেশি গুরুত্বপূর্ণ

“প্রতি ছয় মাসে পরিবর্তন” করার চেয়ে বেশি গুরুত্বপূর্ণ হল সম্ভাব্য ক্রেডেনশিয়াল লিকেজ অনুমানের অধীনে নকশা করা।

① পৃথক অ্যাপ্লিকেশন ব্যবহারকারী

  • অ্যাপ্লিকেশনে root ব্যবহার করবেন না
  • সর্বনিম্ন-অধিকার ব্যবহারকারী তৈরি করুন

উদাহরণ:

GRANT SELECT, INSERT, UPDATE ON dbname.* TO 'appuser'@'localhost';

② অধিকার কমিয়ে দিন (সর্বনিম্ন অধিকার নীতি)

সম্ভাব্য ক্ষতি সীমিত করতে শুধুমাত্র প্রয়োজনীয় অপারেশনগুলি অনুমোদন করুন।

③ অডিটিং এবং লগ ব্যবহার করুন

উদাহরণ লগ চেক:

tail -f /var/log/mysql/mysql.log

MySQL Enterprise এছাড়াও অডিট প্লাগইন সমর্থন করে।

7.4 প্রোডাকশন পরিবেশের জন্য অপারেশনাল টিপস

  • প্রোডাকশন পরিবর্তন করার আগে স্টেজিং-এ পরীক্ষা করুন
  • পরিবর্তনের ইতিহাস ট্র্যাক করুন (Git বা ডকুমেন্টেশন)
  • পরিবর্তনের পরে সর্বদা সংযোগ টেস্ট চালান
  • কাজ করার সময় আপনার SSH সেশন সক্রিয় রাখুন

7.5 আপনি কখনোই করা উচিত নয় এমন বিষয়গুলি

  • অ্যাপ্লিকেশনে root অ্যাকাউন্ট ব্যবহার করুন
  • সোর্স কোডে পাসওয়ার্ড হার্ড-কোড করুন
  • validate_password নিষ্ক্রিয় করুন এবং এভাবেই রাখুন
  • --skip-grant-tables দিয়ে সার্ভার চালু রাখুন

পাসওয়ার্ড ব্যবস্থাপনা একবারের কাজ নয়, বরং ধারাবাহিক অপারেশনাল নকশার অংশ।

8. প্রায়শই জিজ্ঞাসিত প্রশ্ন (FAQ)

8.1 প্রশ্ন. পাসওয়ার্ড পরিবর্তনের পরে সক্রিয় সেশনগুলিতে কী হয়?

উত্তর. মূলত, নতুন সংযোগগুলিতে নতুন পাসওয়ার্ড প্রয়োজন।
বিদ্যমান সেশনগুলির ক্ষেত্রে, পরিবেশ ও কনফিগারেশনের উপর নির্ভর করে সেগুলি তৎক্ষণাৎ বন্ধ হতে পারে অথবা সক্রিয় থাকতে পারে।

প্র্যাকটিসে:

  • প্রোডাকশনে ব্যবসায়িক সময়ের বাইরে পরিবর্তন করুন
  • সংযোগগুলি রিফ্রেশ করতে অ্যাপ্লিকেশন পুনরায় চালু করুন

এটি সুপারিশ করা হয়।

8.2 প্রশ্ন. আমি পাসওয়ার্ড পরিবর্তন করেছি কিন্তু এখনও লগইন করতে পারছি না

সর্বাধিক সাধারণ তিনটি কারণ হল:

  1. ভুল হোস্ট ( localhost বনাম % ইত্যাদি)
  2. প্রমাণীকরণ প্লাগইন মismatch (8.0-এ খুব সাধারণ)
  3. অ্যাপ্লিকেশন কনফিগারেশন আপডেট করা হয়নি

নিম্নের মাধ্যমে পরীক্ষা করুন:

SELECT User, Host, plugin
FROM mysql.user
WHERE User='username';

plugin কলামের প্রতি বিশেষ মনোযোগ দিন।

8.3 প্রশ্ন. আমি কি শুধুমাত্র নির্দিষ্ট ব্যবহারকারীকে পাসওয়ার্ড পরিবর্তন করার অনুমতি দিতে পারি?

হ্যাঁ।

GRANT ALTER USER ON *.* TO 'username'@'host';
FLUSH PRIVILEGES;

MySQL 8.0-এ, SYSTEM_USER অধিকারও প্রয়োজন হতে পারে।

SHOW GRANTS FOR 'username'@'host';

অধিকার যাচাই করতে এটি ব্যবহার করুন।

8.4 প্রশ্ন. MariaDB-তে পদ্ধতিটি একই কি?

মূলত, ALTER USER উপলব্ধ, তবে:

  • প্রমাণীকরণ প্লাগইন
  • পাসওয়ার্ড নীতি আচরণ
  • সংস্করণ-নির্দিষ্ট পার্থক্য

এগুলি পরিবেশের উপর নির্ভর করে ভিন্ন হতে পারে।

নিম্নের মাধ্যমে পরীক্ষা করুন:

SELECT VERSION();

MySQL Community Edition ডিফল্টভাবে অন্তর্নির্মিত পাসওয়ার্ড ইতিহাস ট্র্যাকিং প্রদান করে না.

8.5 Q. আমি কি পাসওয়ার্ড পরিবর্তনের ইতিহাস পরীক্ষা করতে পারি?

সম্ভাব্য পদ্ধতিগুলি:

  • অডিট লগিং সক্রিয় করুন
  • বাহ্যিক লগ ম্যানেজমেন্ট ব্যবহার করুন
  • অপারেশনাল ডকুমেন্টেশনে ইতিহাস ট্র্যাক করুন

উদাহরণ:

tail -f /var/log/mysql/mysql.log

8.6 Q. আমি কি –skip-grant-tables ব্যবহার করে নন-রুট ব্যবহারকারীদের পুনরুদ্ধার করতে পারি?

হ্যাঁ, তবে এটি একটি অত্যন্ত বিপজ্জনক অবস্থা তৈরি করে।
প্রক্রিয়া সম্পন্ন করার পর সঙ্গে সঙ্গে স্বাভাবিক মোডে ফিরে যান।

9. সারাংশ

MySQL পাসওয়ার্ড পরিবর্তন করা সহজ মনে হতে পারে, তবে user@host মডেল, প্রমাণীকরণ প্লাগইন এবং অধিকার নকশা না বুঝে এটি সহজেই সমস্যার দিকে নিয়ে যেতে পারে।

এই প্রবন্ধের মূল বিষয়গুলো হল:

9.1 স্ট্যান্ডার্ড পদ্ধতি হিসেবে ALTER USER ব্যবহার করুন

ALTER USER 'username'@'localhost'
IDENTIFIED BY 'NewStrongPassword123!';
  • MySQL 5.7 এবং পরের সংস্করণে স্ট্যান্ডার্ড পদ্ধতি
  • সরাসরি UPDATE mysql.user করা সুপারিশ করা হয় না
  • সাধারণত FLUSH PRIVILEGES প্রয়োজন হয় না

9.2 ব্যবহারকারীরা “user@host” হিসেবে পরিচালিত হয়

  • localhost এবং % ভিন্ন অ্যাকাউন্ট
  • একই ব্যবহারকারীর নামের একাধিক অ্যাকাউন্ট থাকতে পারে
  • SELECT User, Host FROM mysql.user; ব্যবহার করে পরীক্ষা করুন

9.3 8.0-এ প্রমাণীকরণ প্লাগইনগুলোর দিকে মনোযোগ দিন

  • 8.0 ডিফল্ট: caching_sha2_password
  • লিগেসি সামঞ্জস্যতা: mysql_native_password
  • যদি সংযোগ করতে না পারেন, plugin কলামটি পরীক্ষা করুন
    SELECT plugin FROM mysql.user WHERE User='username';
    

9.4 রুট পাসওয়ার্ড পুনরুদ্ধার করার সময় সতর্ক থাকুন

  • --skip-grant-tables শুধুমাত্র অস্থায়ী ব্যবস্থা
  • শেষ করার পর সর্বদা স্বাভাবিক মোডে ফিরে যান
  • প্রোডাকশনে রক্ষণাবেক্ষণ সময়ে এটি সম্পাদন করুন

9.5 অধিকাংশ ত্রুটির স্পষ্ট কারণ থাকে

  • ERROR 1819 → পাসওয়ার্ড নীতি লঙ্ঘন
  • ERROR 1227 → অপর্যাপ্ত অধিকার
  • লগইন করা যায় না → হোস্ট মিসম্যাচ বা প্রমাণীকরণ প্লাগইন মিসম্যাচ

9.6 বাস্তবে, সর্বনিম্ন অধিকার এবং অপারেশনাল নকশা সবচেয়ে গুরুত্বপূর্ণ

  • অ্যাপ্লিকেশনে রুট ব্যবহার করবেন না
  • নিবেদিত ব্যবহারকারী তৈরি করুন
  • শক্তিশালী পাসওয়ার্ড নীতি প্রয়োগ করুন
  • পরিবর্তনের পর সর্বদা সংযোগ পরীক্ষা করুন

MySQL পাসওয়ার্ড ম্যানেজমেন্ট শুধুমাত্র মান পরিবর্তন নয়—এটি নিরাপদ ডাটাবেস অপারেশনের ভিত্তি। আপনার পরিবেশের জন্য উপযুক্ত পদ্ধতি নির্বাচন করুন এবং সতর্কতার সাথে কার্যকর করুন।