Skip to content

用户管理

用户查看

select * from mysql.user where user = 'root'\G;
Host: localhost
                    User: root
             Select_priv: Y
             Insert_priv: Y
             Update_priv: Y
             Delete_priv: Y
             Create_priv: Y
               Drop_priv: Y
             Reload_priv: Y
           Shutdown_priv: Y
            Process_priv: Y
               File_priv: Y
              Grant_priv: Y
         References_priv: Y
              Index_priv: Y
              Alter_priv: Y
            Show_db_priv: Y
              Super_priv: Y
   Create_tmp_table_priv: Y
        Lock_tables_priv: Y
            Execute_priv: Y
         Repl_slave_priv: Y
        Repl_client_priv: Y
        Create_view_priv: Y
          Show_view_priv: Y
     Create_routine_priv: Y
      Alter_routine_priv: Y
        Create_user_priv: Y
              Event_priv: Y
            Trigger_priv: Y
  Create_tablespace_priv: Y
                ssl_type: 
              ssl_cipher: 0x
             x509_issuer: 0x
            x509_subject: 0x
           max_questions: 0
             max_updates: 0
         max_connections: 0
    max_user_connections: 0
                  plugin: auth_socket
   authentication_string: 
        password_expired: N
   password_last_changed: 2024-11-12 11:15:54
       password_lifetime: NULL
          account_locked: N
        Create_role_priv: Y
          Drop_role_priv: Y
  Password_reuse_history: NULL
     Password_reuse_time: NULL
Password_require_current: NULL
         User_attributes: NULL

auth_socket 验证插件的使用场景

验证方式有以下特点:

首先,这种验证方式不要求输入密码,即使输入了密码也不验证。这个特点让很多人觉得很不安全,实际仔细研究一下这种方式,发现还是相当安全的,因为它有另外两个限制;
只能用 UNIX 的 socket 方式登陆,这就保证了只能本地登陆,用户在使用这种登陆方式时已经通过了操作系统的安全验证;
操作系统的用户和 MySQL 数据库的用户名必须一致,例如你要登陆 MySQL 的 root 用户,必须用操作系统的 root 用户登陆。

auth_socket 这个插件因为有这些特点,它很适合我们在系统投产前进行安装调试的时候使用,而且也有相当的安全性,因为系统投产前通常经常同时使用操作系统的 root 用户和 MySQL 的 root 用户。当我们在系统投产后,操作系统的 root 用户和 MySQL 的 root 用户就不能随便使用了,这时可以换成其它的验证方式,可以使用下面的命令进行切换:

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

caching_sha2_password

从 MySQL 8.0.4 开始,MySQL 默认身份验证插件从 mysql_native_password 改为 caching_sha2_password

创建用户

CREATE USER 'myuser'@'%' IDENTIFIED WITH caching_sha2_password  BY 'mypassword';
GRANT ALL ON *.* TO 'myuser'@'%';
FLUSH PRIVILEGES;

'myuser'@'%' 用户名@IP 组成用户的唯一标识。即使用户名相同,如果ip不同代表两个不同的用户

修改密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'pwd';
flush privileges;

查看用户权限

SHOW GRANTS FOR 'myuser'@'%';

ssl 访问

-- 查看数据库服务是否支持ssl
show variables like '%have%ssl%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_openssl  | YES   |
| have_ssl      | YES   |
+---------------+-------+
-- 创建用户
CREATE USER 'myssluser'@'%' IDENTIFIED BY 'mysslpassword';
GRANT ALL ON *.* TO 'myssluser'@'%';
ALTER USER 'myssluser'@'%' REQUIRE SSL;
FLUSH PRIVILEGES;
SELECT ssl_type From mysql.user Where user='myssluser';
-- 普通登录失败
$ mysql -umyssluser -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'myssluser'@'xxxxx' (using password: YES)
-- 使用ssl登录
$ mysql --ssl-mode=REQUIRED  -u myssluser -p