উবুন্টু 16.04 এ সাধারণ ব্যবহারকারীর অ্যাকাউন্ট থেকে mysql ব্যবহারকারীর রুট হিসাবে লগইন করতে পারবেন না


203

আমি শুধু উবুন্টু ইনস্টল করা প্যাকেজ সহ 16,04 LTS php, mariadbএবং nginx। আমি দৌড়ে গিয়ে mysql_secure_installationমূল পাসওয়ার্ডটি পরিবর্তন করেছি ।

এখন যখন আমি mysqlউবুন্টুকে সাধারণ ব্যবহারকারীর অ্যাকাউন্ট হিসাবে লগ ইন করার সময় রুট অ্যাকাউন্টটি ব্যবহার করতে লগইন করার চেষ্টা করি তখন অ্যাক্সেস অস্বীকার হয়ে যায়।

আমি যখন লগইন করে ব্যবহার করি sudo mysql, তখন মাইএসকিএল এমনকি আমাকে পাসওয়ার্ডও জিজ্ঞাসা করে না। আমি যদি চালনা করে mysql_secure_installtionদেখি যে পুরানো সেটিংস কখনই স্থায়ীভাবে সেট হয় নি।

আমি কি ভুল করছি?

উত্তর:


359

আমি সম্প্রতি আমার উবুন্টুকে 15.04 এ 16.04 এ আপগ্রেড করেছি এবং এটি আমার পক্ষে কাজ করেছে:

  1. প্রথমে sudo mysql এ সংযুক্ত হন

    sudo mysql -u root
    
  2. আপনার ডিবিতে উপস্থিত অ্যাকাউন্টগুলি পরীক্ষা করুন

    SELECT User,Host FROM mysql.user;
    +------------------+-----------+
    | User             | Host      |
    +------------------+-----------+
    | admin            | localhost |
    | debian-sys-maint | localhost |
    | magento_user     | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    
  3. বর্তমান রুট @ লোকালহোস্ট অ্যাকাউন্ট মুছুন

    mysql> DROP USER 'root'@'localhost';
    Query OK, 0 rows affected (0,00 sec)
    
  4. আপনার ব্যবহারকারীকে পুনরুদ্ধার করুন

    mysql> CREATE USER 'root'@'%' IDENTIFIED BY '';
    Query OK, 0 rows affected (0,00 sec)
    
  5. আপনার ব্যবহারকারীকে অনুমতি দিন (সুবিধাগুলি বজায় রাখতে ভুলবেন না)

    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    Query OK, 0 rows affected (0,00 sec)
    
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0,01 sec)
    
  6. মাইএসকিউএল থেকে প্রস্থান করুন এবং sudo ছাড়াই পুনরায় সংযোগ করার চেষ্টা করুন।

আমি আশা করি এটি কাউকে সহায়তা করবে :)


16
এটিই আমার জন্য কাজ করেছিল, আপনি 16.04-তে মাইএসকিএল-সার্ভার ইনস্টল করার সময় কেউ রুট ব্যবহারকারীদের সাথে ঠিক কী ঘটেছে তা কি জানেন?
রুগি

32
এটি ধরে রাখুন, এর %অর্থ এই নয় যে আপনি কোথাও থেকে দূরে সংযোগ করতে পারবেন?
স্টিভি জি

9
আপনি সারিটি এতে পরিবর্তন করতে পারবেন: ব্যবহারকারীর 'রুট' @ 'লোকালহোস্ট' পরিচয়যুক্ত '' দ্বারা তৈরি করুন;
ভ্লাদনেভ

11
সুরক্ষা-সংশ্লিষ্টদের কাছে: অনিরাপদ রুট @ লোকালহোস্ট মাইএসকিএল সংযোগের প্যাটার্ন স্থানীয় উন্নয়নের একটি রুটি-মাখন প্রধান, তবে অন্য কোথাও প্রদর্শিত হবে না।
চার্নি কায়ে

5
নতুন নতুন ব্যবহারকারীর জন্য অনুদানের বিবরণটি মূলত "অনুদানের সাথে" দেয় না সুতরাং রুট এটি চালানো ছাড়া মঞ্জুরি দিতে পারে না: dba.stackexchange.com/a/62046/115679 অনুদান বিবৃতিটি পরিবর্তন করুনgrant all privileges on *.* to 'root'@'localhost' with grant option;
লরেন

132

আপনি যদি 5.7 ইনস্টল করেন এবং rootব্যবহারকারীকে কোনও পাসওয়ার্ড না সরবরাহ করেন তবে এটি auth_socketপ্লাগইন ব্যবহার করবে । এই প্লাগইনটির কোনও যত্ন নেই এবং পাসওয়ার্ডের প্রয়োজন নেই। এটি কেবল ব্যবহারকারীরা ইউনিক্স সকেট ব্যবহার করে সংযোগ করছে কিনা তা যাচাই করে এবং তার পরে ব্যবহারকারীর নামটির তুলনা করে।

মাইএসকিউএল ৫.7 এ ব্যবহারকারীর পাসওয়ার্ড পরিবর্তন থেকে "প্লাগইন: অ্যাথ_সকেট" দিয়ে নেওয়া হয়েছে

সুতরাং pluginফিরে পরিবর্তন করতে যাতে mysql_native_password:

  1. সুডোর সাথে লগইন করুন:

    sudo mysql -u root
    
  2. pluginসিঙ্গল কমান্ড দিয়ে পাসওয়ার্ডটি সেট করুন এবং একটি পাসওয়ার্ড সেট করুন:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';
    

অবশ্যই আপনি খালি পাসওয়ার্ড সেট করতে উপরের কমান্ডটি ব্যবহার করতে পারেন।

কেবল রেকর্ডের জন্য, (এবং MariaDB < 10.2ব্যবহারকারীরা) pluginপাসওয়ার্ড না দিয়ে কেবল পরিবর্তন করার আরও একটি উপায় রয়েছে (এটিকে খালি রেখে):

update mysql.user set plugin = 'mysql_native_password' where User='root';
// to change the password too (credits goes to Pothi Kalimuthu)
// UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root';
FLUSH PRIVILEGES;

2
ধন্যবাদ, কোনও কারণে এইটি আপ-
গিগ

4
এছাড়াও, আমি এই উত্তরটি আরও পছন্দ করি - এটি অনেক কম ধ্বংসাত্মক ;-)
বেনজকজি

3
মারিয়াডিবি <10.2 এর জন্য, পাসওয়ার্ডের সাথে প্লাগইন পরিবর্তন করতে এখানে ক্যোয়ারী রয়েছে: UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root'; FLUSH PRIVILEGES;উত্স: stackoverflow.com/a/41537019/1004587
পোথি কলিমুথু

5
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত
জিও সি

3
আমি আশা করি আমি এই দুইবার ভোট দিতে পারে।
জেমস স্মিথ

21

সংক্ষেপে, মারিয়াডিবিতে

UPDATE mysql.user SET plugin = 'mysql_native_password', 
      Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

যেখানে আপনি চান পাসওয়ার্ড এবং বাকী সমস্ত শব্দ দিয়ে NEWPASSWORD প্রতিস্থাপন করুন।

এখানে সমস্যাটি হ'ল মারিয়াডিবি বা মাইএসকিউএল ইনস্টল / আপডেট করা থাকলে (বিশেষত যদি কোনও পাসওয়ার্ড ছাড়াই রুট সেট করা থাকে) তবে ব্যবহারকারীদের টেবিলে পাসওয়ার্ডটি আসলে খালি (বা উপেক্ষা করা) থাকে এবং লগ-ইন করা সিস্টেম ব্যবহারকারীর উপর নির্ভর করে একটি মাইএসকিউএল ব্যবহারকারীকে। সিস্টেম রুটে স্যুইচ করে আপনি নীচে এটি পরীক্ষা করতে পারেন, এবং তারপরে টাইপ করুন:

mysql -uroot -p

তারপরে কোনও পাসওয়ার্ড বা ভুল পাসওয়ার্ড প্রবেশ করান । আপনি সম্ভবত ঢুকতে হবে। (এমনকি আপনি যা ইউনিক্স রুট থেকে লগ ইন করতে সক্ষম হতে পারে কেবল # mysqlযেমন পাসওয়ার্ড অপ্রাসঙ্গিক এবং ব্যবহারকারী সংজ্ঞায়িত করা হয়)।

তাহলে কি হচ্ছে? ঠিক আছে, আপনি যদি রুট হিসাবে লগ ইন করেন এবং নিম্নলিখিতগুলি করেন:

select User,host,plugin from mysql.user; 
+----------------+-----------+-----------------------+
| User           | host      | plugin                |
+----------------+-----------+-----------------------+
| root           | localhost | auth_socket           |
+----------------+-----------+-----------------------+

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

সুতরাং সমাধানটি ব্যবহারকারীর আপডেট auth_socket/unix_socketএবং সঠিকভাবে কোনও পাসওয়ার্ড সেট না করা।

মারিয়াডিবিতে (<10.2, নীচে মন্তব্যগুলি দেখুন) যা 2017 এর হিসাবে উবুন্টু সংস্করণ 16 এ রয়েছে এটি যথেষ্ট হওয়া উচিত। নিউপ্যাসওয়ার্ড আপনার পাসওয়ার্ড। mysql_native_passwordআপনি ভার্ব্যাটিম টাইপ করুন।

UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

(এটি সম্ভব যে প্লাগইনটি খালি সেট করা কার্যকর হবে Y ওয়াইএমএমভি I আমি এটি চেষ্টা করি নি So তাই এটি বিকল্প।

UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

অন্যথায়:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';

তারপর

FLUSH PRIVILEGES;

রেকর্ডের জন্য, ব্যবহারকারীকে মুছে ফেলা এবং এটি '%' দিয়ে পুনরুদ্ধার করার সমাধানটি আমাকে পুরোপুরি ডাটাবেস থেকে লক করে ফেলেছে এবং আপনি যদি grantবিবৃতিটি ঠিক সঠিকভাবে না পান তবে অন্যান্য সমস্যার কারণ হতে পারে - আপনার কাছে ইতিমধ্যে থাকা রুটটি সহজভাবে আপডেট করা সহজ।

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


2
এটি নিখুঁতভাবে কাজ করতে পাওয়া গেছে। যদিও আমাকে রুট পাসওয়ার্ড দিয়ে mysql_secure_installationএকই প্রভাব ফেলল না কেন আমাকে বিস্মিত করে । এটি নতুন পাসওয়ার্ডটি কোথায় সঞ্চয় করে?
Mausy5043

আপনি কি নিজের উত্তরটি সম্পাদনা করতে এবং প্রতিটি কমান্ডের সাথে যেতে যেতে আরও বলতে পারেন? কোনটি প্রযোজ্য তা আমি পরিষ্কার করছি না। এটি কি দুটি UPDATEগুলি যা মারিয়াডিবি <10.2 এবং ALTERঅন্যান্য সংস্করণে প্রযোজ্য ? এবং দ্বিতীয়টি UPDATEকি প্রথমটির বিকল্প, বা আমাদের উভয় টাইপ করা দরকার? অবশেষে, 'মাইকিকিএল_নেটিভ_প্যাসওয়ার্ড' ভারব্যাটিম টাইপ করার মতো কিছু, না কি আমরা মাইএসকিউএল-এর জন্য আমাদের উদ্দিষ্ট রুট পাসওয়ার্ড দিয়ে এটি প্রতিস্থাপন করব?
মাইকেল শ্যাপার

1
@ মিশেলশেপার এটি কিছুক্ষণ আগে এসেছে তাই আমি খুব বেশি সম্পাদনা করতে চাই না, তবে আমি যা মনে করি তা এখানে। (1) প্রথম আপডেটটি কেবলমাত্র করুন (<10.2 কোনও প্রয়োজন হতে পারে না)। (২) হ্যাঁ, 'মাইএসকিএল_নেটিভ_পাসওয়ার্ড' ভারব্যাটিম টাইপ করুন। মূলত, আপনি যা করছেন তা মারিয়াদবকে বলছে: "ইউনিক্স প্রাইভেলিজ ব্যবহার করবেন না, ডাটাবেস প্রাইভেলিজ ব্যবহার করুন"। mysql_native_passwordযে বিকল্প।
গ্যাজার

অভিশাপ আমি ভুল বানান 'অধিকার'!
গ্যাজার

1
দেখে মনে হচ্ছে আপনি সম্পাদনার সময়সীমাটি মাত্র 1½ মিনিটও মিস করেছেন! আমি মাঝে মাঝে খুব হতাশ হয়ে পড়েছি। যাইহোক, ধন্যবাদ!
মাইকেল শ্যাপার

8

যদি আপনি বেস সংগ্রহস্থল থেকে মাইএসকিউএল / মারিয়াডিবি ইনস্টল করেন তবে ব্যবহারকারীরা ইউনিক্স লগইনগুলি থেকে মাইএসকিউএল রুট ব্যবহারকারী হিসাবে মাইএসকিউএলে লগইন করতে পারবেন না (যদি তারা সুডোর অ্যাক্সেস থাকে তবে প্রযোজ্য নয় )

  1. মাইএসকিউএল রুট শেলটিতে লগইন করুন:

    $ sudo mysql -u root -p
    
  2. প্রশ্নের নীচে কার্যকর করুন:

    use mysql;
    update user set plugin='mysql_native_password' where user='root';
    flush privileges; 
    quit;
    
  3. একটি নতুন শেল খুলুন, তারপরে:

    $ mysql -u root -p
    

উৎস


যখন আমি এটি করেছি, আমি আর রুট হিসাবে মাইএসকিএল sudo করতে পারি না। আমাকে প্রথমে su করতে হবে, এবং তারপরে রুট হিসাবে mysql এ লগইন করতে পারি। সুতরাং আমি এটিকে আবার অ্যাথ_সকেটে পরিবর্তন করেছি।
অবধি

একক আদেশ:mysql -u root -p -e "use mysql;update user set plugin='mysql_native_password' where user='root';flush privileges;"
ক্রিস স্ট্রাইসাইস্কি

আপনি যদি নিজের মাইএসকিউএল উদাহরণটিতে অ্যাক্সেস হারাতে চান তবে এই উত্তরটি সহজ উপায়।
ডানিলা ভারশিনিন

2

নতুন mysql অ্যাকাউন্ট তৈরি করার চেষ্টা করুন, আমার জন্য এটি কাজ করেছে (mysql 5.7.12):

  1. সুডো হিসাবে লগইন করুন:

    sudo mysql -uroot
    
  2. নতুন ব্যবহারকারী তৈরি করুন এবং তাকে বিশেষাধিকার দিন (কোনও পাসওয়ার্ড নেই):

    CREATE USER 'admin'@'localhost' IDENTIFIED BY '';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
    
  3. নতুন ব্যবহারকারী হিসাবে লগইন করুন:

    mysql -uadmin
    

2

আমাকে দুটি কাজ করতে হয়েছিল (@ টডর এবং @ লোরেমশিপামের জন্য ধন্যবাদ):

update mysql.user set plugin = 'mysql_native_password' where User='root';
grant all privileges on *.* to 'root'@'localhost';

এবং তারপর:

FLUSH PRIVILEGES;

আমি ব্যবহারকারীকে বাদ দেওয়ার পরামর্শ দেব না root


1

প্রথমে এই কোডটি চেষ্টা করে দেখুন,

echo "CREATE USER 'root'@'localhost' IDENTIFIED BY 'root';" > your_init_file.sql
echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;" >> your_init_file.sql 
echo "FLUSH PRIVILEGES;" >> your_init_file.sql

এবং তারপর,

killall mysqld
mysqld_safe --init-file=$PWD/your_init_file.sql

তারপরে টিপুন Ctrl+Zএবং টাইপ করুন: bgঅগ্রভাগ থেকে পটভূমিতে প্রক্রিয়াটি চালাতে, তারপরে আপনার অ্যাক্সেস যাচাই করে:

mysql -u root -proot
mysql> show grants;

1

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

পাসওয়ার্ড সেট করার একমাত্র উপায় হ'ল দেশীয় প্রমাণীকরণে স্যুইচ করা:

$ sudo mysql

mysql> ব্যবহারকারীর 'রুট' @ 'লোকালহোস্ট' মাইএসকিএল_নেটিভ_প্যাসওয়ার্ড দিয়ে 'পরীক্ষার' মাধ্যমে সনাক্ত;


0

আমি মারিয়াডিবি ব্যবহারের জন্য তৈরি কিছু প্রভিশন স্ক্রিপ্ট মানিয়ে নিয়েছি এবং এই সঠিক সমস্যাটিতে চলেছি। এখানে একসাথে প্রচুর তথ্য পাইক করা একটি গ্যাজারের উত্তরটি ইস্যুতে সত্যই জিরো করেছে; এগুলি সমস্ত auth_socket/ unix_socketসেটিংয়ে ফোটে।

সুতরাং মারিয়াডিবি 5.5 (উবুন্টু 14.04 এর অধীনে) এবং মারিয়াডিবি 10 (উবুন্টু 16.04 এর অধীনে) ব্যবহার করার সময়, মাইএসকিউএল এ লগইন করুন এবং এই আদেশটি চালিয়ে এখনই জিনিসগুলি সাফ করলেন:

UPDATE mysql.user SET plugin='' WHERE User='root';
FLUSH PRIVILEGES;

লোরেমশিপসামের এই পোস্ট হিসাবে সর্বাধিক ভোট দেওয়া উত্তর সহ অন্যান্য উত্তরগুলি - ব্যবহারকারীকে বাদ দেওয়ার পরামর্শ দিয়ে এবং তারপরে পুনরায় পুনঃসারণের মাধ্যমে খারাপ অভ্যাসগুলি উত্সাহিত করে। আমার কাছে, এটি একটি দুর্দান্ত মৌলিক সমাধান। pluginমানটি বাতিল করা , সুবিধাগুলি বঞ্চিত করা এবং জীবনের সাথে চালিয়ে যাওয়ার জন্য সবচেয়ে সহজ / সহজ সমাধান os


-1

আমার একই সমস্যা ছিল এবং নিম্নলিখিতগুলি এটির স্থির করে:

mysql_upgrade --force

দুঃখের বিষয় এটি কার্যকর হয়নি। আমি উবুন্টু পুনরায় ইনস্টল করছি।
কোডস্কোপ

1
আমি সবেমাত্র উবুন্টু 16.04 এর নতুন ইনস্টল এবং মারিয়াদ-সার্ভার ইনস্টল করেছি। ইনস্টল করার পরে আমি mysql_secure_installation এবং পাসওয়ার্ড সেট করেছিলাম password মাইএসকিএল_সিকিউর_ইনস্টলেশনের বাকি পদক্ষেপগুলি পেরিয়ে যাওয়ার পরে, আমি আবার এটি চালিয়েছি এবং দেখে মনে হচ্ছে এটি পরিবর্তনগুলি সংরক্ষণ করছে না। আমি এখনও আমার সাধারণ ব্যবহারকারীর অ্যাকাউন্ট থেকে লগইন করতে পারি না। এটি একটি বাগ হতে পারে?
কোডকপ

এটি কখনই সাহায্য করবে না। মারিয়াডিবি বাইনারিটির প্রকৃত ইনস্টলটির সাথে ইস্যুটির কোনও সম্পর্ক নেই বরং ব্যবহারকারীর সেটিংসের rootসাথে সেট করা হচ্ছে pluginযা মানক নয়। একমাত্র প্রান্তের ক্ষেত্রে যেখানে ডিবিটির একটি আপগ্রেড এই জাতীয় ক্ষেত্রে সহায়তা করতে পারে যদি mysql_upgradeপ্রক্রিয়াটি নিজেই pluginসেটিংটির জন্য অ্যাকাউন্ট করে যা আমি সন্দেহ করি।
জ্যাকগল্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.