Ubuntu 18.04下配置phpMyAdmin管理MySQL5.7

大伟哥 提交于 2019-07-12,周五, 21:57

上次大伟哥说到在Ubuntu18.04下安装MySQL5.7和phpMyAdmin之后,默认不能使用root用户登录phpMyAdmin管理MySQL数据库,而安装phpMyAdmin过程中创建的phpmyadmin用户又没有什么权限,如果我们还是打算要用phpMyAdmin管理和使用MySQL的话,就得想办法给一个用户能能够创建数据库的权限,不管这个用户是root还是phpmyadmin。

下面我们分别说明一下这两种方法。

方法一 设置root密码,使用root密码登录并管理phpMyAdmin。

这个root用户不是Linux系统的超级用户,而是MySQL数据库的超级用户。root本来就拥有最大的权限,是MySQL数据库里的王者。只是MySQL 5.7在 Ubuntu 18.04系统下默认使用的登录方式不是密码,而是auth_socket.

让我们使用命令行登录MySQL验证一下:

  1. daweibro@daweibro:~$ mysql -uroot -p
  2. Enter password:
  3. ERROR 1698 (28000): Access denied for user 'root'@'localhost'
  4. $ sudo mysql -uroot
  5. [sudo] daweibro 的密码:
  6. Welcome to the MySQL monitor. Commands end with ; or \g.
  7. Your MySQL connection id is 117
  8. Server version: 5.7.26-0ubuntu0.18.04.1 (Ubuntu)
  9.  
  10. Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
  11.  
  12. Oracle is a registered trademark of Oracle Corporation and/or its
  13. affiliates. Other names may be trademarks of their respective
  14. owners.
  15.  
  16. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  17.  
  18. mysql> select user, host, plugin, password from mysql.user;
  19. ERROR 1054 (42S22): Unknown column 'password' in 'field list'
  20. mysql> select user, host, plugin, authentication_string from mysql.user;
  21. +------------------+-----------+-----------------------+-------------------------------------------+
  22. | user | host | plugin | authentication_string |
  23. +------------------+-----------+-----------------------+-------------------------------------------+
  24. | root | localhost | auth_socket | |
  25. | mysql.session | localhost | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
  26. | mysql.sys | localhost | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
  27. | debian-sys-maint | localhost | mysql_native_password | *607A324EEBAC7D558C938DBD35F38848F0DFB578 |
  28. | phpmyadmin | localhost | mysql_native_password | *1AA5B91306A02A619A29C477029B113DAADE6E7D |
  29. +------------------+-----------+-----------------------+-------------------------------------------+
  30. 5 rows in set (0.01 sec)

通过命令行的交互,我们可以发现以下这几点:

  1. MySQL的root用户现在没法通过密码登录:Access denied for user 'root'@'localhost'
  2. 拥有sudo权限可以直接以MySQL的root用户登录,不用输入密码。
  3. 与旧版本不同的是,MySQL 5.7的mysql数据库user表里,定义密码的不再是password字段(Unknown column 'password' in 'field list'),而变成了authentication_string字段。
  4. 以上两点出现的原因,在于MySQL 5.7默认定义了root用户的认证机制不是密码认证mysql_native_password,而是auth_socket。

那么,auth_socket是个什么鬼?

The server-side auth_socket authentication plugin authenticates clients that connect from the local host through the Unix socket file. The plugin uses the SO_PEERCRED socket option to obtain information about the user running the client program. Thus, the plugin can be used only on systems that support the SO_PEERCRED option, such as Linux.

在MySQL 5.7里,如果root使用了auth_socket插件,那MySQL只检查用户是否使用UNIX套接字进行连接,然后比较用户名是否匹配,而不验证密码。如果要使用密码认证,需要修改认证插件为“mysql_native_password”并设置密码。使用下面的命令设置“NEWPASSWORD”:

  1. mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';

执行完成以后,MySQL会自动重新连接,这时候退出再使用mysql -uroot -p登录,就可以使用刚才设置的密码进入MySQL了,并且phpMyAdmin也可以正常使用了。

方法二 给于phpmyadmin用户足够的数据库管理权限

安装 phpMyAdmin 的过程中创建的用户 phpmyadmin 就是个鸡肋用户,鸡肋到什么程度呢?

  1. mysql> select * from mysql.user where user="phpmyadmin"\G;
  2. ERROR 2006 (HY000): MySQL server has gone away
  3. No connection. Trying to reconnect...
  4. Connection id: 288
  5. Current database: phpmyadmin
  6.  
  7. *************************** 1. row ***************************
  8. Host: localhost
  9. User: phpmyadmin
  10. Select_priv: N
  11. Insert_priv: N
  12. Update_priv: N
  13. Delete_priv: N
  14. Create_priv: N
  15. Drop_priv: N
  16. Reload_priv: N
  17. Shutdown_priv: N
  18. Process_priv: N
  19. File_priv: N
  20. Grant_priv: N
  21. References_priv: N
  22. Index_priv: N
  23. Alter_priv: N
  24. Show_db_priv: N
  25. Super_priv: N
  26. Create_tmp_table_priv: N
  27. Lock_tables_priv: N
  28. Execute_priv: N
  29. Repl_slave_priv: N
  30. Repl_client_priv: N
  31. Create_view_priv: N
  32. Show_view_priv: N
  33. Create_routine_priv: N
  34. Alter_routine_priv: N
  35. Create_user_priv: N
  36. Event_priv: N
  37. Trigger_priv: N
  38. Create_tablespace_priv: N
  39. ssl_type:
  40. ssl_cipher:
  41. x509_issuer:
  42. x509_subject:
  43. max_questions: 0
  44. max_updates: 0
  45. max_connections: 0
  46. max_user_connections: 0
  47. plugin: mysql_native_password
  48. authentication_string: *1AA5B91306A02A619A29C477029B113DAADE6E7D
  49. password_expired: N
  50. password_last_changed: 2019-07-11 22:40:18
  51. password_lifetime: NULL
  52. account_locked: N
  53. 1 row in set (0.03 sec)

不能创建新数据库新用户,完全没有管理MySQL数据库的权限。如果我们要使用这个用户做管理工作 ,还得给它足够的权限才行,最起码要能创建新的数据库,还要具有创建新用户并分配用户权限的能力。以下是操作方法:

  1. mysql> GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> flush privileges;
  5. Query OK, 0 rows affected (0.01 sec)

刷新权限以后,再以phpmyadmin的身份登录phpMyAdmin,就发现权限一步登天,可以为所欲为了。

文章分类

标签

添加新评论

此字段内容将保密,不会被其他人看见。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。