মাইএসকিউএল ত্রুটি: ব্যবহারকারীর জন্য 'অ' @ 'লোকালহোস্ট' (পাসওয়ার্ড ব্যবহার করে: YES)


22

আমি অ্যাকাউন্টটি তৈরি করে রুট অ্যাকাউন্টটি ব্যবহার করি 'a'@'%'। হোস্টের প্যারামিটারটি নির্দিষ্ট করার সময় আমি মাইএসকিউএল সার্ভারের সাথে সংযোগ করতে অ্যাকাউন্টটি ব্যবহার করতে পারি না। আমি -hপ্যারামিটার ছাড়া সফলভাবে সংযোগ করতে পারি । নীচে প্রতিলিপি দেখুন। আমি আশা করি কেউ এটি ব্যাখ্যা করতে আমাকে সহায়তা করতে পারে। ধন্যবাদ।

mysql> grant all on *.* to 'a'@'%' identified by a;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a' at line 1
mysql> grant all on *.* to 'a'@'%' identified by 'a';
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for 'a'@'%';
+-----------------------------------------------------------------------------------------------------------+
| Grants for a@%                                                                                            |
+-----------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'a'@'%' IDENTIFIED BY PASSWORD '*667F407DE7C6AD07358FA38DAED7828A72014B4E' |
+-----------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> exit
Bye

[root@localhost ~]# mysql -h localhost -u a -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'a'@'localhost' (using password: YES)
[root@localhost ~]# mysql -h 127.0.0.1 -u a -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'a'@'localhost' (using password: YES)
[root@localhost ~]# mysql -u a -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'a'@'localhost' (using password: YES)
[root@localhost ~]# mysql -u a
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 20
Server version: 5.5.17 MySQL Community Server (GPL)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
mysql> status
--------------
mysql  Ver 14.14 Distrib 5.5.17, for Linux (x86_64) using readline 5.1

Connection id:      20
Current database:   
Current user:       a@localhost
SSL:            Not in use
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server version:     5.5.17 MySQL Community Server (GPL)
Protocol version:   10
Connection:     Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:        /var/lib/mysql/mysql.sock
Uptime:         15 days 15 hours 20 min 18 sec

Threads: 1  Questions: 40  Slow queries: 0  Opens: 41  Flush tables: 1  Open tables: 4  Queries per second avg: 0.000
--------------

mysql> 

সম্পাদনা:

হ্যাঁ, মাইএসকিউএল 3306 পোর্টে শুনছে।

[root@localhost ~]# nmap localhost

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2012-01-18 07:35 CST
Interesting ports on localhost.localdomain (127.0.0.1):
Not shown: 1674 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
111/tcp  open  rpcbind
631/tcp  open  ipp
840/tcp  open  unknown
3306/tcp open  mysql

Nmap finished: 1 IP address (1 host up) scanned in 0.064 seconds
[root@localhost ~]# 

1
আমি মাইএসকিএল-তে বিশেষজ্ঞ নই, তবে এই সমস্যাটি কয়েকবার দেখেছি, কারণটি কী ছিল তা আমি জানি না, সমাধানটি স্পষ্টতই হোস্টের সংজ্ঞা ছাড়াও ছিল 'a'@'%'। সুতরাং, প্রথম রেকর্ডটি ছিল 'a'@'%', এবং দ্বিতীয়টি 'a'@'localhost'
com

আপনি কি দয়া করে লোয়ার মাইএসকিএল সংস্করণ দিয়ে একই জিনিস পরীক্ষা করতে পারবেন ..?
আবদুল মানাফ

সংযোগ করতে সিপ্যানেল লগইন বিশদ ব্যবহার করুন।
আবু ফাহিম

আমার ক্ষেত্রে আমার তিনটি বেনামে অ্যাকাউন্ট ডিফল্টরূপে তৈরি হয়েছিল, সেগুলি মুছে ফেললে এই সমস্যার সমাধান হবে
জোয়াকান এল। রোবাল

উত্তর:


26

মাইএসকিউএল সফল প্রমাণীকরণ কীভাবে সম্পাদন করে তা যাচাই করার জন্য এখানে একটি দ্রুত এবং নোংরা পদ্ধতি।

দয়া করে এই কোয়েরিটি চালান:

SELECT USER(),CURRENT_USER();

ব্যবহারকারী () কীভাবে আপনি মাইএসকিডএলে প্রমাণীকরণের চেষ্টা করেছিলেন তা জানিয়েছে

CURRENT_USER () আপনাকে কীভাবে mysqld দ্বারা প্রমাণীকরণের অনুমতি দেওয়া হয়েছিল তা জানায়

কখনও কখনও, USER()এবং CURRENT_USER()পৃথক হয়। এটি কারণ মাইএসকিএল প্রমাণীকরণ একটি স্পেসফিক প্রোটোকল অনুসরণ করে।

মতে মাইএসকিউএল 5.0 সার্টিফিকেশন স্টাডি গাইড

এখানে চিত্র বর্ণনা লিখুন

পৃষ্ঠাগুলি 486,487 মাইএসকিএল এর প্রমাণীকরণের অ্যালগরিদমের উপর নিম্নলিখিতটি বর্ণনা করে:

ক্লায়েন্ট অ্যাক্সেস নিয়ন্ত্রণের দুটি স্তর রয়েছে:

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

দ্বিতীয় পর্যায়ে (এটি কেবল তখনই ঘটে যখন কোনও ক্লায়েন্ট ইতিমধ্যে সফলভাবে সংযুক্ত হয়েছে) ক্লায়েন্টের এটি কার্যকর করার যথেষ্ট সুযোগ রয়েছে কিনা তা দেখার জন্য সার্ভার ক্লায়েন্টের কাছ থেকে প্রাপ্ত প্রতিটি ক্যোয়ারী চেক করে।

সার্ভারটি ক্লায়েন্টকে সংযুক্ত করে এবং ক্লায়েন্ট সরবরাহ করে এমন হোস্টের উপর ভিত্তি করে গ্রান্ট টেবিলগুলিতে প্রবেশের বিরুদ্ধে ক্লায়েন্টের সাথে মেলে। তবে একের বেশি রেকর্ডের পক্ষে এটি মিলানো সম্ভব:

অনুদান সারণীতে হোস্ট মানগুলি নির্দিষ্ট করা যেতে পারে কারণ নিদর্শনগুলিতে ওয়াইল্ডকার্ড মান রয়েছে। একটি অনুদান টেবিল থেকে এন্ট্রি থাকে myhost.example.com, %.example.com, %.com, এবং %, তাদের সব একটি ক্লায়েন্ট যারা থেকে সংযোগ মেলে myhost.example.com

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

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

হোস্ট কলামে যেমন আক্ষরিক মান localhost, 127.0.0.1এবং myhost.example.comসাজানোর মান যেমন এগিয়ে %.example.com তাদের মধ্যে প্যাটার্ন অক্ষর আছে। প্যাটার্ন মানগুলি কত নির্দিষ্ট তা অনুসারে বাছাই করা হয়। উদাহরণস্বরূপ, এর %.example.comচেয়ে বেশি নির্দিষ্ট %.com, যা এর চেয়ে বেশি নির্দিষ্ট %

ব্যবহারকারীর কলামে, ফাঁকা ব্যবহারকারীর নাম ছাড়াই খালি খালি ব্যবহারকারীর নাম এটি হল, অজ্ঞাতনামা ব্যবহারকারীরা বেনামে ব্যবহারকারীদের আগে বাছাই করে।

সার্ভারটি শুরু হওয়ার সাথে সাথে এই বাছাইটি সম্পাদন করে। এটি মঞ্জুরিতে অনুদানের টেবিলগুলি পড়ে, এগুলি বাছাই করে এবং অ্যাক্সেস নিয়ন্ত্রণের জন্য মেমরির অনুলিপিগুলি ব্যবহার করে।

এই বর্ণনাটি থেকে, আপনাকে mysql.user টেবিলগুলির ক্রম সম্পর্কে উদ্বিগ্ন হওয়ার দরকার নেই কারণ অনুদান টেবিলগুলির একটি মেমরি অনুলিপি রয়েছে যা পূর্বে উল্লিখিত হিসাবে সাজানো হয়েছে।

আপনি কীভাবে লগ ইন করেছেন সে সম্পর্কিত, কেবলমাত্র mysql -u aকাজ করেছিল। ফিরে যান এবং আবার লগইন করুন এবং এই আদেশগুলি চালান

SELECT USER(),CURRENT_USER();
SELECT user,host,password FROM mysql.user;

নিশ্চিত করো যে

  • প্রত্যেক ব্যবহারকারীর একটি পাসওয়ার্ড রয়েছে।
  • কোনও অনামী ব্যবহারকারী নেই (যখন ব্যবহারকারী ফাঁকা থাকে)

এটি কেবল অনুমান, তবে mysql -u aলোকালহোস্টের মাধ্যমে সংযোগ স্থাপনের বিষয়ে আমার সন্দেহ আছে কারণ যখন সংযোগ প্রোটোকলটি নির্দিষ্ট না করা হয়, তখন সকেট ফাইলের মাধ্যমে ডিফল্টটি সংযোগ করা হয়। mysql.userবেনামে লোকালহোস্ট সংযোগের অনুমতি দেয় এমন একটি এন্ট্রি থাকতে পারে ।

এই কোয়েরিটি চালান:

SELECT user,host,password FROM mysql.user WHERE user='' AND host='localhost';

আপনি যদি কোনও পাসওয়ার্ড ছাড়াই একটি সারি ফিরে পান তবে এটি কেন mysq -u aকাজ করে তা পুরোপুরি ব্যাখ্যা করে।

আপডেট 2012-01-19 11:12 ইডিটি

ক্রেগ ইফ্রেইন একটি আকর্ষণীয় প্রশ্ন তুলেছেন: যদি mysql.user টেবিলটিতে দুটি অভিন্ন ব্যবহারকারী নাম উপস্থিত থাকে, একটি পাসওয়ার্ড সহ একটি এবং একটি ছাড়া, এর অর্থ কি এই যে মাইএসকিউএল কোনও পাসওয়ার্ড ব্যবহার না করার সময় প্রমাণীকরণকে অস্বীকার করে?

এই প্রশ্নটি মাইএসকিউএল ব্যবহারকারী প্রমাণীকরণ সম্পর্কে একটি দুর্দান্ত মাথা আপ।

দয়া করে নোট করুন যে mysql.user- র প্রাথমিক কীটি হোস্ট, ব্যবহারকারী। অন্য কোনও সূচক নেই। এটি ব্যবহারকারীর একাধিক ঘটনার অনুমতি দেয়। প্রতিটি ঘটনার একটি আলাদা পাসওয়ার্ড বা কোনও পাসওয়ার্ড থাকতে পারে। এটি ব্যবহারকারীর 'dbuser' স্থানীয়ভাবে (dbuser @ লোকালহোস্ট) কোনও পাসওয়ার্ড ব্যবহার করে এবং একই ব্যবহারকারীর প্রদত্ত নেটব্লক (dbuser@'10.1.2.20 ') এর মধ্যে অন্য পাসওয়ার্ড থেকে' পাস 1 'এর মতো পাসওয়ার্ড এবং সেই ব্যবহারকারীকে লগইন করতে দেয় 'পাস 2' এর মতো রিমোট পাসওয়ার্ড সহ যে কোনও স্থান থেকে (dbuser @ '%') রিমোট করুন।

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

এই কারণেই মাইএসকিউএল 5.0 শংসাপত্রের স্টাডি গাইড এর বুলেটপয়েন্টগুলিতে পৃষ্ঠা 498 অনুচ্ছেদে 6 তে বলেছেন যে কীভাবে প্রমাণীকরণ প্রক্রিয়াটি পরিষ্কার করা যায়:

ইউনিক্সে, মাইএসকিউএলটি একটি মাইএসকিউএল_সিকিউর_ইনস্টলেশন স্ক্রিপ্ট নিয়ে আসে যা আপনার ইনস্টলেশনতে সুরক্ষা সম্পর্কিত বেশ কয়েকটি সহায়ক কাজ করতে পারে। স্ক্রিপ্টের নিম্নলিখিত ক্ষমতা রয়েছে:

  • মূল অ্যাকাউন্টগুলির জন্য একটি পাসওয়ার্ড সেট করুন
  • যে কোনও দূরবর্তী অ্যাক্সেসযোগ্য মূল অ্যাকাউন্টগুলি সরান।
  • বেনামে ব্যবহারকারীর অ্যাকাউন্টগুলি সরান। এটি সুরক্ষার উন্নতি করে কারণ এটি মাইএসকিউএল সার্ভারের সাথে প্রত্যন্ত হোস্ট থেকে রুট হিসাবে সংযুক্ত হওয়ার সম্ভাবনা রোধ করে। ফলাফলগুলি হ'ল যে কেও মূল হিসাবে সংযোগ করতে চায় সে অবশ্যই প্রথমে সার্ভার হোস্টে লগ ইন করতে সক্ষম হবে, যা আক্রমণ বিরুদ্ধে অতিরিক্ত বাধা সরবরাহ করে।
  • পরীক্ষার ডাটাবেসটি সরান (যদি আপনি বেনামে থাকা অ্যাকাউন্টগুলি সরিয়ে দেন তবে আপনি যে পরীক্ষামূলক ডাটাবেসে তাদের অ্যাক্সেস রয়েছে তা সরাতেও পারেন)।

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

2
রোল্যান্ডো, যদি mysql.user টেবিলে দুটি অভিন্ন ব্যবহারকারী নাম উপস্থিত থাকে, একটি পাসওয়ার্ড সহ একটি এবং একটি ছাড়া, এর অর্থ এই যে মাইএসকিউএল কোনও পাসওয়ার্ড ব্যবহার না করার সময় প্রমাণীকরণ অস্বীকার করে?
ক্রেগ ইফ্রেইন

@ ক্রেইগ - আপনার প্রশ্নটি খুব লক্ষণীয়। আমি এটিকে আমার উত্তরে স্থানান্তর করব এবং সেখানে এটি সম্বোধন করব।
রোল্যান্ডোমাইএসকিউএলডিবিএ

বিস্তারিত উত্তরের জন্য আপনাকে ধন্যবাদ, আমার ক্ষেত্রে আমি বেনাম ব্যবহারকারীদের কোনওভাবে কনফিগার করেছি।
SoWeLie

@ রোল্যান্ডোমাইএসকিউএলডিবিএ, শংসাপত্র অধ্যয়ন গাইডের সমস্ত তথ্য ইতোমধ্যে মাইএসকিউএল অনলাইন ম্যানুয়ালটিতে পাওয়া যাবে?
পেসারিয়ার

5

'%' হোস্ট ওয়াইল্ডকার্ড 'লোকালহোস্ট' এর সাথে মেলে না। ডিফল্টরূপে মাইএসকিএল ক্লায়েন্ট টিসিপি (সাধারণত /var/lib/mysql/mysql.sock এর মতো কিছু জায়গা) না দিয়ে সকেটের মাধ্যমে সংযোগ স্থাপনের চেষ্টা করবে।

আপনি হয় নিজের অনুদানকে 'a' @ 'লোকালহোস্ট' এ পরিবর্তন করতে পারেন, বা ক্লায়েন্টকে টিসিপি স্ট্যাকের মাধ্যমে চালিত করতে বাধ্য করতে পারেন:

mysql -u a -p --protocol=TCP

আমি চেষ্টা করেছি, কিন্তু এখনও ভাগ্য নেই।
একজন শিক্ষার্থী

my.cnfএই প্যারামিটারটির আর প্রয়োজন না হওয়ার জন্য এই বিকল্পটি কীভাবে কনফিগার করবেন ?
shgnInc

1
আপনি না। আপনি যদি কোনও -h হোস্টনাম নির্দিষ্ট না করেন তবে এটি "লোকালহোস্ট" ধরে নেয় যার অর্থ এটি সকেট খুঁজছে, টিসিপি পোর্ট নয় ডাব্লু / ও প্রোটোকল পতাকা হিসাবে। আপনি যদি সমস্ত যুক্তি টাইপ করে ক্লান্ত হয়ে থাকেন তবে আপনি শেল এলিয়াস সেটআপ করতে পারেন।
atxdba

2

আপনি কি মাইএসকিউএলটি আসলে 3306 এ শুনছেন তা নিশ্চিত করার জন্য পরীক্ষা করে দেখেছেন? একটি নেটস্প্যাট চালাও -tlpn এবং ফলাফল সরবরাহ করুন। যদি আপনি 3306 না দেখেন তবে সম্ভবত এটি না।

ইন my.cnf আপনি যাচাই করা উচিত যে --skip-নেটওয়ার্কিং আউট মন্তব্য করা হয়

[mysqld]
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
language        = /usr/share/mysql/English
bind-address    = 65.55.55.2
# skip-networking

আমি প্রশ্নে জিজ্ঞাসা করা একই কাজ। এবং আপনার উত্তরে আপনি যা বলেছিলেন তা করেছিলেন কিন্তু এখনও একই সমস্যা রয়েছে।
আবদুল মানাফ

আপনি কি নিম্নলিখিত পরীক্ষার ফলাফলগুলি প্রদান করতে পারেন: ব্যবহারকারী, মাইএসকিএল.ইউজার থেকে হোস্ট নির্বাচন করুন;
ক্রেগ ইফ্রেইন

হ্যাঁ, মাইএসকিউএল 3306 পোর্টে শুনছে my আমার সম্পাদনা দেখুন।
মাত্র একজন শিক্ষার্থী

আপনি mysql -u ব্যবহারকারীর -p -h 127.0.0.1 চেষ্টা করতেও পারেন want যদি এটি কাজ করে তবে আমি এর মাইএসকিএলকে বিশ্বাস করি যা লোকালহোস্ট সমাধান করতে জানে না। লোকালহোস্টের জন্য একটি এন্ট্রি যা আপনার / ইত্যাদি / হোস্ট ফাইলগুলিতে 127.0.0.1 এ নির্দেশ করে resolve
ক্রেগ ইফ্রেইন

আপনি কি ফ্ল্যাশ সুবিধাগুলি চালিয়েছেন?
ক্রেগ ইফ্রেইন

1

যেমন @atxdba বর্ণিত হয়েছে, রিমোট থেকে মাইএসকিএল ডিমন সংযোগ করতে যা সকেটের মাধ্যমে সংযুক্ত হয় না তাই আপনাকে টিসিপি দিয়ে দূরবর্তী থেকে সংযোগ করতে হবে।

এই জন্য, আপনি --protocol=TCPপ্রতিটি সংযোগ প্রতি নির্দিষ্ট করা উচিত । যদিও, আপনি my.cnfএটি সার্ভারে সেট করতে পারেন :

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