পিএইচপি মাইসকিলি_কনেক্ট: প্রমাণীকরণের পদ্ধতিটি ক্লায়েন্টের কাছে অজানা [ক্যাচিং_শ্যা_পাসওয়ার্ড]


95

আমি mysqli_connectএকটি মাইএসকিউএল ডাটাবেসে লগইন করার জন্য পিএইচপি ব্যবহার করছি (সমস্ত লোকালহোস্টে)

<?php
//DEFINE ('DB_USER', 'user2');
//DEFINE ('DB_PASSWORD', 'pass2');
DEFINE ('DB_USER', 'user1');
DEFINE ('DB_PASSWORD', 'pass1');
DEFINE ('DB_HOST', '127.0.0.1');
DEFINE ('DB_NAME', 'dbname');

$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

if(!$dbc){
    die('error connecting to database');    
}
?>

এটি mysql.user টেবিল: mysql.user টেবিল

মাইএসকিউএল সার্ভার ইন ফাইল:

[mysqld]
# The default authentication plugin to be used when connecting to the server
default_authentication_plugin=caching_sha2_password
#default_authentication_plugin=mysql_native_password

সঙ্গে caching_sha2_passwordমাইএসকিউএল সার্ভার স্টার ফাইল, এটা সব সময়ে USER1 বা USER2 দিয়ে লগইন করা সম্ভব নয়;

ত্রুটি: মাইসকিলি_কনেক্ট (): সার্ভারটি ক্লায়েন্ট [ক্যাশেড_শাস__পাওয়ার্ড] এর অজানা প্রমাণীকরণ পদ্ধতির অনুরোধ করেছে ...

সঙ্গে mysql_native_passwordমাইএসকিউএল সার্ভার স্টার ফাইল, এটা USER1 দিয়ে লগ ইন করতে সম্ভব, কিন্তু USER2, একই ত্রুটি সহ;


আমি কিভাবে caching_sha2_passwordMySQL সার্ভার ব্যবহার করে লগইন করতে পারি ?


পিডিও কি এটিকে সমর্থন করে? আমি অন্যান্য রিপোর্ট দেখেছি mysqli
tadman

@ By দ্বারা পোস্ট করা উত্তরকে স্বীকৃত উত্তর হিসাবে চিহ্নিত করা উচিত।
এফআইএল

উত্তর:


53

পিএইচপি 7.4 হিসাবে, এটি আর কোনও সমস্যা নয়। caching_sha2প্রমাণীকরণ পদ্ধতির জন্য সমর্থন mysqlnd এ যুক্ত করা হয়েছে।


বর্তমানে, পিএইচপি mysqli এক্সটেনশান নতুন ক্যাচিং_শ 2 প্রমাণীকরণ বৈশিষ্ট্য সমর্থন করে না। তারা একটি আপডেট প্রকাশ না হওয়া পর্যন্ত আপনাকে অপেক্ষা করতে হবে।

মাইএসকিউএল বিকাশকারীদের সম্পর্কিত সম্পর্কিত পোস্টগুলি দেখুন: https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/

তারা PDO উল্লেখ করেনি, সম্ভবত আপনার PDO এর সাথে সংযোগ স্থাপনের চেষ্টা করা উচিত।



@ মাভাভিটি আপনি কি জানেন যে এই উত্তরটি এখনও কার্যকর আছে? অর্থাৎ। এটি নতুন পিএইচপি সংস্করণগুলির সাথে এখনও পুরানো হয়নি?
জেনার

উপর ভিত্তি করে @gen এই বাগ , এটা মত দেখাচ্ছে 7.4.2 হিসাবে কাজ করছে
Machavity

4
Php7.4 এ আপগ্রেড করা সমস্যার সমাধান করে। এবং আমি মনে করি যে mysql_native_passwordকিছু উত্তর দ্বারা প্রস্তাবিত হিসাবে প্রমাণীকরণ পদ্ধতি পরিবর্তন করার চেয়ে সেরা পদ্ধতির এটি ।
আলট্রাসাদ

আমি ডকার ব্যবহার করি (একটি পাত্রে অ্যাপাচি + পিএইচপি এবং অন্যান্য ধারকটিতে মাইএসকিএল) এবং এটি আমার সমস্যার সমাধান করে। ধন্যবাদ!
জোয়ান গালমসের রিয়ারা

227

আমি এসকিউএল কমান্ড দ্বারা এটি সমাধান:

ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';

যা https://dev.mysql.com/doc/refman/8.0/en/alter-user.html দ্বারা রেফারেন্স করা হয়েছে

আপনি যদি নতুন ব্যবহারকারী তৈরি করে থাকেন

 CREATE USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

যা https://dev.mysql.com/doc/refman/8.0/en/create-user.html দ্বারা রেফারেন্স করা হয়েছে

এটা আমার জন্য কাজ করে


4
ভাল উত্তর. Gotcha হয় এখানে আপনি সার্ভার সেটিংস উপর নির্ভর করে, এই প্রত্যেক সময় আপনি একটি নতুন ব্যবহারকারী যোগ করতে হবে পারে
Machavity

4
আপনাকে অনেক ধন্যবাদ আমি নতুন পাসওয়ার্ড হ্যাশগুলি পুরানোগুলিতে রূপান্তর করার জন্য একটি উপায় খুঁজছিলাম (যেমন ব্যবহারকারী 2 ফর্ম্যাটটিকে প্রশ্নে ইউজার 1 ফর্ম্যাটে রূপান্তরিত করে) এবং আপনার উত্তরটি ঠিক কাজটি করেছে
অ্যাকাউন্টেন্ট

10
এবং তাই পিএইচপি -7.2.9 / 11 মাইএসকিউএল -8.012 এর সাথে দুর্দান্ত খেলতে পেতে 4 দিনের লড়াইয়ের অবসান ঘটিয়েছে। পিএইচপি টিমের কেউ কি টারবলের ইনস্টলটিতে এটি নোট করার জন্য বিশ্বাসী হতে পারেন? এটি পরের বা দু'বছরে হাজার হাজার ব্যক্তির ঘন্টা সাশ্রয় করবে।
মাউন্টেনম্যান

4
@ মাউন্টেনম্যান আমার জীবন বাঁচিয়েছিলেন
চেজ

8
এই কাজের সমাধানের জন্য উত্তরটি গ্রহণ করা উচিত
যোহানেস এআই

27
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';

পরে উদ্ধৃতি (') সরান ALTER USERএবং পরে উদ্ধৃতি (') রাখুনmysql_native_password BY

এটা আমার জন্যও কাজ করছে।



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

22

আপনি যদি উইন্ডোজে থাকেন এবং এটি ব্যবহার caching_sha2_passwordকরা মোটেই সম্ভব না হয় তবে আপনি নিম্নলিখিতগুলি করতে পারেন:

  1. মাইএসকিউএল ইনস্টলার পুনরায় চালু করুন
  2. মাইএসকিউএল সার্ভারের (পরের আইটেম) পাশে "পুনরায় কনফিগার করুন" নির্বাচন করুন
  3. আপনি "প্রমাণীকরণের পদ্ধতি" না পাওয়া পর্যন্ত "পরবর্তী" ক্লিক করুন
  4. "উত্তরাধিকার প্রমাণীকরণ পদ্ধতি ব্যবহার (মাইএসকিউএল 5.X সামঞ্জস্য পুনরুদ্ধার করুন)" "প্রমাণীকরণের জন্য শক্তিশালী পাসওয়ার্ড এনক্রিপশন ব্যবহার করুন (সুপারিশ করুন)" পরিবর্তন করুন
  5. "পরবর্তী" ক্লিক করুন
  6. অ্যাকাউন্ট এবং ভূমিকাতে আপনার রুট অ্যাকাউন্টের পাসওয়ার্ড লিখুন এবং "চেক" ক্লিক করুন
  7. "পরবর্তী" ক্লিক করুন
  8. আপনি "কনফিগারেশন প্রয়োগ করুন" না পাওয়া পর্যন্ত "পরবর্তী" এ ক্লিক করতে থাকুন
  9. "এক্সিকিউট" ক্লিক করুন

ইনস্টলারটি আপনার জন্য প্রয়োজনীয় সমস্ত কনফিগারেশন পরিবর্তন করবে।


লোকটি এই উত্তরটি উজ্জীবিত করার এক বছর পরে আমার ডিবি হ্যাক হয়েছিল ...
কোড ট্রি

11

এটি আমার জন্য কাজ করছে (পিএইচপি 5.6 + পিডিও / মাইএসকিউএল সার্ভার 8.0 / উইন্ডোজ 7 64 বিট)

ফাইলটি সম্পাদনা করুন C:\ProgramData\MySQL\MySQL Server 8.0\my.ini:

default_authentication_plugin=mysql_native_password

উইন্ডোজ এবং মাইএসকিউএল শেলের মধ্যে মাইএসকিউএল পরিষেবা পুনরায় সেট করুন ...

ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';

এটি কাজ করে, আপনাকে ধন্যবাদ ... আমাদের অবশ্যই এটি 2 টি জিনিস কনফিগার করতে হবে:
মাইএসকিএল কনফার্ট

9

অনেক লোকের মতো আমারও একই সমস্যা ছিল। যদিও ব্যবহারকারী mysql_native_password ব্যবহার করার জন্য সেট করা আছে এবং আমি কমান্ড লাইন থেকে সংযোগ করতে পারি, কেবলমাত্র mysqli () সংযোগ করার জন্য আমি যুক্ত করতে পারি

ডিফল্ট-প্রমাণীকরণ-প্লাগইন = mysql_native_password

উবুন্টু 19.10, /etc/mysql/mysql.conf.d/mysqld.cnf- এর আমার সেটআপের [mysqld] বিভাগে


4
এছাড়াও, মনে রাখবেন যদি ব্যবহারকারী পরিবর্তনের আগে তৈরি হয় তবে এটি কার্যকর হবে না। সুতরাং, আপনার প্রথমে কনফিগারেশনে ডিফল্ট-প্রমাণীকরণ সেট করা উচিত এবং কাজ করার জন্য ব্যবহারকারী তৈরি করা উচিত!
ওলেগ পপভ

4

আমি ALTER USER 'root' @ 'localhost' identified with mysql_native_password BY 'root123';কমান্ড লাইনে নিম্নলিখিত কমান্ডটি চালিয়েছি এবং শেষ পর্যন্ত স্থানীয় পরিষেবাগুলিতে মাইএসকিউএল পুনরায় চালু করেছি।


'root' @ 'localhost'পরিবর্তে এখানে কোনও স্থান পড়তে হবে নাALTER USER 'root'@'localhost' identified with mysql_native_password BY 'root123';
d1jhoni1b

4

এখন আপনি পিএইচপি 7.4 এ আপগ্রেড করতে পারেন এবং মাইএসকিউএল caching_sha2_passwordডিফল্টরূপে চলে যাবে, সুতরাং ডিফল্ট মাইএসকিউএল ইনস্টলেশন mysqli_connectকোনও কনফিগারেশন প্রয়োজন নেই সাথে কাজ করবে ।


4
বেশ না। এটি 7.4.0 এবং 7.4.1 এ বগি। 7.4.2 এ স্থির
মাচাভিটি

3

আপনি যদি ম্যাকে থাকেন তবে এটি ঠিক করার উপায় এখানে। এটি প্রচুর বিচার এবং ত্রুটির পরে। আশা করি এটি অন্যকে সহায়তা করে ..

ডিবাগিং:

$mysql --verbose --help | grep my.cnf

$ which mysql
/usr/local/bin/mysql

রেজোলিউশন: ন্যানো / ওএসআর / লোকাল /etc/my.cnf

যোগ করুন: ডিফল্ট-প্রমাণীকরণ-প্লাগইন = mysql_native_password

-------
# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
default-authentication-plugin=mysql_native_password
------

পরিশেষে চালান: ব্রিউ পরিষেবাগুলি মাইএসকিএল পুনরায় চালু হয়


এটি দরকার ... ধন্যবাদ!
nykc

1

আমি এটি উবুন্টু 18.04 এ চেষ্টা করেছিলাম এবং একমাত্র সমাধান যা আমার পক্ষে কাজ করেছে:

ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';

-4

আমি মনে করি ক্যাচিং_শ্যা_পাসওয়ার্ড এনক্রিপশন ছাড়াই মাইএসকিএল সার্ভারটি কনফিগার করা কার্যকর নয়, আমাদের নেটওয়ার্কের মাধ্যমে নিরাপদ তথ্য প্রকাশ, প্রেরণ বা প্রাপ্ত করার উপায় খুঁজে বের করতে হবে। আপনি নীচের কোডটিতে দেখতে পেলাম আমি ভেরিয়েবল $ db_name ব্যবহার করি না, এবং আমি স্ট্যান্ডার কনফিগারেশন পাসওয়ার্ড সহ মাইএসকিএল সার্ভারে একটি ব্যবহারকারী ব্যবহার করছি। কেবলমাত্র একটি স্ট্যান্ডার ব্যবহারকারীর পাসওয়ার্ড তৈরি করুন এবং সমস্ত ব্যক্তিগতকরণ কনফিগার করুন। এটি কাজ করে, তবে আমি কীভাবে আলাদা করে বললাম।

<?php
$db_name="db";
$mysql_username="root";
$mysql_password="****";
$server_name="localhost";
$conn=mysqli_connect($server_name,$mysql_username,$mysql_password);

if ($conn) {
    echo "connetion success";
}
else{
    echo mysqli_error($conn);
}

?>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.