උබුන්ටු 16.04 හි සාමාන්‍ය පරිශීලක ගිණුමෙන් mysql පරිශීලක root ලෙස ප්‍රවේශ විය නොහැක


233

මම දැන් පැකේජ සමඟ උබුන්ටු 16.04 LTS ස්ථාපනය කර php, mariadbසහ nginx. මම දුව ගොස් mysql_secure_installationමූල මුරපදය වෙනස් කළෙමි .

දැන් මම mysqlඋබුන්ටු සාමාන්‍ය පරිශීලක ගිණුමක් ලෙස ලොග් වී සිටියදී root ගිණුම භාවිතා කිරීමට ප්‍රවේශ වීමට උත්සාහ කරන විට මට ප්‍රවේශය ප්‍රතික්ෂේප වේ.

මම භාවිතයෙන් පුරනය වන විට sudo mysql, mysql මගෙන් මුරපදය ඉල්ලන්නේද නැත. මම ධාවනය mysql_secure_installtionකළහොත් පැරණි සැකසුම් ස්ථිරවම සකසා නැති බව මට පෙනේ.

මම වැරදි කරන්නේ කුමක් ද?

Answers:


412

මම මෑතකදී මගේ උබුන්ටු 15.04 සිට 16.04 දක්වා උත්ශ්‍රේණිගත කළ අතර මෙය මට වැඩ කර ඇත:

  1. පළමුව, sudo mysql සමඟ සම්බන්ධ වන්න

    sudo mysql -u root
    
  2. ඔබගේ db හි ඇති ඔබගේ ගිණුම් පරීක්ෂා කරන්න

    SELECT User,Host FROM mysql.user;
    +------------------+-----------+
    | User             | Host      |
    +------------------+-----------+
    | admin            | localhost |
    | debian-sys-maint | localhost |
    | magento_user     | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    
  3. වත්මන් root @ localhost ගිණුම මකන්න

    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. MySQL වෙතින් ඉවත් වී sudo නොමැතිව නැවත සම්බන්ධ වීමට උත්සාහ කරන්න.

මෙය යමෙකුට උපකාරී වනු ඇතැයි මම බලාපොරොත්තු වෙමි :)


16
මෙය මට වැඩ කළ එකම දෙයයි, ඔබ 16.04 හි mysql-server ස්ථාපනය කරන විට root පරිශීලකයාට සිදුවූයේ කුමක්දැයි කවුරුහරි දන්නවාද?
රග්ගි

40
එය රඳවා ගන්න, %එයින් අදහස් කරන්නේ ඔබට ඕනෑම තැනක සිට සම්බන්ධ විය හැකි බව නොවේ ... දුරස්ථවද?
ස්ටීවි ජී

11
ඔබට පේළිය පහත පරිදි වෙනස් කළ හැකිය: පරිශීලක 'root' create 'localhost' හඳුනාගත් '';
vladnev

13
ආරක්ෂාව සම්බන්ධව: අනාරක්ෂිත මූල @ localhost mysql සම්බන්ධතා රටාව දේශීය සංවර්ධනයේ පාන් සහ බටර් ප්‍රධාන ආහාරයක් වන නමුත් එය වෙනත් තැනක නොපෙන්විය යුතුය.
චාර්නි කේ

5
මෙහි නව මූල පරිශීලකයා සඳහා වන ප්‍රදාන ප්‍රකාශය root සඳහා “ප්‍රදාන සමඟ” ලබා නොදෙන බැවින් මෙය ක්‍රියාත්මක නොකර root ලබා දිය නොහැක: dba.stackexchange.com/a/62046/115679 කරුණාකර ප්‍රදාන ප්‍රකාශය වෙනස් කරන්නgrant all privileges on *.* to 'root'@'localhost' with grant option;
ලෝරන්

150

ඔබ 5.7 ​​ස්ථාපනය කර rootපරිශීලකයාට මුරපදයක් ලබා නොදෙන්නේ නම් , එය auth_socketප්ලගිනය භාවිතා කරයි . එම ප්ලගිනය ගණන් නොගන්නා අතර මුරපදයක් අවශ්‍ය නොවේ. එය පරිශීලකයා යුනික්ස් සොකට් භාවිතයෙන් සම්බන්ධ වන්නේ දැයි පරීක්ෂා කර පරිශීලක නාමය සංසන්දනය කරයි.

සිට ගෙන ": auth_socket ප්ලගිනය" සමඟ වෙනස් MySQL 5.7 දී පරිශීලක මුරපදය

එබැවින් pluginපසුපසට වෙනස් කිරීම සඳහා mysql_native_password:

  1. Sudo සමඟ ලොග් වන්න:

    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
එසේම, මම මෙම පිළිතුරට වඩා කැමතියි - එය බෙහෙවින් අඩු විනාශකාරී ය ;-)
benzkji

4
මාරියා ඩී බී <10.2 සඳහා, මුරපදය සමඟ ප්ලගිනය වෙනස් කිරීම සඳහා, මෙහි විමසුම: UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root'; FLUSH PRIVILEGES;මූලාශ්‍රය: stackoverflow.com/a/41537019/1004587
පොති කාලිමුත්

5
මෙය පිළිගත් පිළිතුර විය යුතුය
Geo C.

3
මට මෙය දෙවරක් ඡන්දය දීමට හැකි වේවායි ප්‍රාර්ථනා කරමි.
ජේම්ස් ස්මිත්

26

කෙටියෙන් කිවහොත්, මාරියා ඩීබී හි

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

එහිදී ඔබ NEWPASSWORD වෙනුවට ඔබට අවශ්‍ය මුරපදය සහ අනෙක් සියල්ල වාචිකව ආදේශ කරයි.

මෙහි ඇති ගැටළුව නම් MariaDB හෝ MySQL ස්ථාපනය කර / යාවත්කාලීන කරන විට (විශේෂයෙන් මුරපදයක් නොමැතිව මූලයක් සකසා තිබේ නම්) පරිශීලක වගුවේ මුරපදය ඇත්ත වශයෙන්ම හිස් (හෝ නොසලකා හරිනු ලැබේ), සහ පුරනය වීම රඳා පවතින්නේ පද්ධති පරිශීලකයා මත ය. MySQL පරිශීලකයෙකුට. පද්ධති මූලයට මාරුවීමෙන් ඔබට මෙය පහත පරිදි පරීක්ෂා කළ හැකිය, ඉන්පසු ටයිප් කරන්න:

mysql -uroot -p

ඉන්පසු මුරපදයක් හෝ වැරදි මුරපදයක් ඇතුළත් නොකරන්න . ඔබට බොහෝ විට ඉඩ දෙනු ඇත. ( # mysqlමුරපදය අදාල නොවන නිසාත් පරිශීලකයා අර්ථ දක්වා ඇති නිසාත් ඔබට යුනික්ස් මූලයෙන් ලොග් වීමට පවා හැකිය ).

ඉතින් මොකද වෙන්නේ? හොඳයි, ඔබ root ලෙස ලොග් වී පහත සඳහන් දේ කරන්නේ නම්:

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

ඔබ සටහන් කරනු ඇත auth_socket(එය unix_socketමාරියා ඩීබී හි කියවිය හැකිය ). මෙම සොකට් මුරපද නොසලකා හරින අතර අනුරූප යුනික්ස් පරිශීලකයාට මුරපද පරීක්ෂාවකින් තොරව ඇතුළුවීමට ඉඩ දෙයි . ඔබට වෙනත් පරිශීලකයෙකු සමඟ නොව root සමඟ ලොග් විය හැක්කේ මේ නිසා ය .

එබැවින් විසඳුම වන්නේ auth_socket/unix_socketමුරපදය නිසි ලෙස සකසා නොගෙන පරිශීලකයින් යාවත්කාලීන කිරීමයි .

2017 වන විට උබුන්ටු අනුවාදය 16 හි ඇති මාරියා ඩීබී (<10.2, පහත අදහස් බලන්න) මෙය ප්‍රමාණවත් විය යුතුය. NEWPASSWORD යනු ඔබගේ මුරපදයයි. mysql_native_passwordඔබ වාචික ටයිප් කරන්න.

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

(ප්ලගිනය හිස් ලෙස සැකසීම සාර්ථක වනු ඇත. YMMV. මම මෙය උත්සාහ කළේ නැත. එබැවින් මෙය විකල්පයකි.)

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අනෙක් අනුවාදයන්ට අදාළ වන්නේ s දෙකද ? දෙවැන්න UPDATEපළමුවැන්නාට විකල්පයක් ද, නැතහොත් අපි දෙකම ටයිප් කළ යුතුද? අවසාන වශයෙන්, 'mysql_native_password' යනු වාචික ටයිප් කිරීම සඳහා යමක් ද, නැතහොත් අපි එය MySQL සඳහා අපේක්ෂිත මූල මුරපදය සමඟ ප්‍රතිස්ථාපනය කළ යුතුද?
මයිකල් ෂෙපර්

1
Ic මයිකල්ෂෙපර් ටික වේලාවකට පසු මට වැඩිපුර සංස්කරණය කිරීමට අවශ්‍ය නැත, නමුත් මෙන්න මට මතක ඇති දේ. (1) පළමු යාවත්කාලීන කිරීම පමණක් කරන්න (<10.2 අවශ්‍යතාවයක් නොවිය හැක). (2) ඔව්, 'mysql_native_password' verbatim ටයිප් කරන්න. අත්යවශ්යයෙන්ම, ඔබ කරන්නේ මාරියාඩ්බ්ට පැවසීමයි: "යුනික්ස් ප්රයිවෙල්ජස් භාවිතා නොකරන්න, දත්ත සමුදා ප්රයිවෙල්ජස් භාවිතා කරන්න". මෙම mysql_native_passwordඑම විකල්පය වේ.
ගැසර්

අනේ, මම 'වරප්‍රසාදය' වැරදියි!
ගැසර්

1
ඔබට සංස්කරණ කාල සීමාව මිනිත්තු 1½ කින් පමණක් මග හැරී ඇති බව පෙනේ! සමහර වෙලාවට මමත් ඒ ගැන කලකිරෙනවා. කෙසේ වෙතත්, ස්තූතියි!
මයිකල් ෂෙපර්

12

MySQL විධානය ක්‍රියාත්මක කිරීමේදී, ඔබට මුරපදයක් ඉල්ලීමකින් තොරව ප්‍රවේශය ලබා දෙන්නේ නම්, root @ localhost සඳහා සොකට් සත්‍යාපනය සක්‍රීය කර ඇත.

  1. MySQL මූල කවචයට පිවිසෙන්න:

    $ 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
    

මූලාශ්රය


මම මෙය කරන විට, මට තවදුරටත් mysql root ලෙස සුඩෝ කිරීමට නොහැකි විය. මට මුලින් su කිරීමට සිදු වූ අතර පසුව mysql වෙත root ලෙස ලොග් විය හැකිය. ඒ නිසා මම එය නැවත auth_socket ලෙස වෙනස් කළා.
untill

තනි විධානය:mysql -u root -p -e "use mysql;update user set plugin='mysql_native_password' where user='root';flush privileges;"
ක්‍රිස් ස්ට්‍රයිසින්ස්කි

ඔබගේ MySQL නිදසුනට ප්‍රවේශය නැති කර ගැනීමට ඔබට අවශ්‍ය නම්, මෙම පිළිතුර පහසුම ක්‍රමයයි.
ඩැනිලා වර්ෂිනින්

2

නව mysql ගිණුමක් නිර්මාණය කිරීමට උත්සාහ කරන්න, මට එය ක්‍රියාත්මක වී ඇත (mysql 5.7.12):

  1. Sudo ලෙස ලොග් වන්න:

    sudo mysql -uroot
    
  2. නව පරිශීලකයෙකු නිර්මාණය කර ඔහුට වරප්‍රසාද ලබා දෙන්න (මුරපදයක් නොමැත):

    CREATE USER 'admin'@'localhost' IDENTIFIED BY '';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
    
  3. නව පරිශීලකයෙකු ලෙස පිවිසෙන්න:

    mysql -uadmin
    

2

ඔබ root පරිශීලකයා යටතේ mysql විධානය ක්‍රියාත්මක කරන්නේ නම් මුරපදය ඉල්ලීමකින් තොරව ඔබට ප්‍රවේශය ලැබෙනු ඇත, මන්ද root @ localhost සඳහා සොකට් සත්‍යාපනය සක්‍රීය කර ඇත. .

මුරපදය සැකසීමට ඇති එකම ක්‍රමය වන්නේ ස්වදේශීය සත්‍යාපනය වෙත මාරුවීමයි:

$ sudo mysql

mysql> වෙනත් පරිශීලක 'root' local 'localhost' mysql_native_password සමඟ හඳුනාගෙන ඇත 'පරීක්ෂණය';


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;

0

මම මාරියා ඩීබී භාවිතා කිරීම සඳහා නිර්මාණය කර ඇති ප්‍රතිපාදන ස්ක්‍රිප්ට් කිහිපයක් අනුවර්තනය කර ඇති අතර මෙම නිශ්චිත ගැටලුවට මුහුණ දී සිටිමි. මෙහි බොහෝ තොරතුරු එක්රැස් කිරීම ගැසර්ගේ පිළිතුර ඇත්ත වශයෙන්ම කලාපයේ ශුන්‍ය වේ; ඒ සියල්ල auth_socket/ unix_socketසැකසුම දක්වා උනු .

එබැවින් මාරියා ඩීබී 5.5 (උබුන්ටු 14.04 යටතේ) සහ මරියා ඩීබී 10 (උබුන්ටු 16.04) යටතේ භාවිතා කරන විට, MySQL වෙත පිවිස මෙම විධානය ක්‍රියාත්මක කිරීමෙන් මේ මොහොතේම දේවල් ඉවත් වේ:

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

ලෝරෙමිප්සම් විසින් මෙම තනතුරට ලබා දී ඇති වැඩිම ඡන්ද ප්‍රතිශතය ඇතුළුව අනෙක් පිළිතුරු - පරිශීලකයෙකු අතහැර දමා ඒවා ප්‍රතිනිර්මාණය කිරීම නිර්දේශ කිරීමෙන් නරක පුරුදු දිරිමත් කරයි. මට නම් එය තරමක් රැඩිකල් විසඳුමකි. pluginවටිනාකම අහෝසි කිරීම , වරප්‍රසාද ලබා ගැනීම සහ ජීවිතය සමඟ ඉදිරියට යාම සඳහා හොඳම / සරලම විසඳුම .


-1

මට එකම ගැටළුවක් ඇති අතර පහත සඳහන් දෑ ක්‍රියාත්මක කිරීමෙන් එය නිවැරදි විය:

mysql_upgrade --force

කනගාටුවට කරුණක් නම් එය ක්‍රියාත්මක නොවීමයි. මම උබුන්ටු නැවත ස්ථාපනය කරනවා.
කේත දර්ශනය

1
මම උබුන්ටු 16.04 නැවුම් ලෙස ස්ථාපනය කර මාරියාඩ් සේවාදායකය ස්ථාපනය කළෙමි. ස්ථාපනය කිරීමෙන් පසු මම mysql_secure_installation ධාවනය කර මුරපදය සකසා ඇත. MySQL_secure_installation හි ඉතිරි පියවරයන් පසු කිරීමෙන් පසු, මම එය නැවත ධාවනය කළ අතර එය වෙනස්කම් සුරකින බවක් නොපෙනේ. මට තවමත් මගේ සාමාන්‍ය පරිශීලක ගිණුමෙන් ප්‍රවේශ විය නොහැක. එය දෝෂයක් විය හැකිද?
කේත දර්ශනය

මෙය කිසි විටෙකත් උදව් නොකරනු ඇත. මාරියා ඩීබී ද්විමය සත්‍ය වශයෙන්ම ස්ථාපනය කිරීම සමඟ ගැටළුවට කිසිදු සම්බන්ධයක් නැති නමුත් පරිශීලකයා ප්‍රමිතියෙන් තොර සැකසුම් rootසමඟ සකසා ඇත plugin. ඩීබී යාවත්කාලීන කිරීම මෙවැනි අවස්ථාවකදී උපකාර කළ හැකි එකම දාරය නම්, එම mysql_upgradeක්‍රියාවලියම pluginමා සැක කරන සැකසුම සඳහා හේතු වේ නම් .
ජේක්ගෝල්ඩ්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.