关于mysql5.7中创建用户无法登录及grant操作无效问题的处理

今天用mysql创建用户时,出现了创建完成后的用户无法登录,授权无效的情况
CREATE USER testIDENTIFIED BY 'test';
mysql> GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
查看用户表的情况如下:



再次进行授权时:
mysql> GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test'@'%';
ERROR 1524 (HY000): Plugin '*E3619321C1A937C46A0D8BD1DAC39F93B27D4458' is not loaded

这是因为mysql.user表中对应的plugin不对,默认应该为mysql_native_password才对,于是更改成mysql_native_password
update mysql.user set plugin='mysql_native_password', password=PASSWORD('test') where User='test';

现在mysql.user表中对应的用户信息正常了
再次执行:
mysql> GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
SQL语句正常执行,再次查看mysql.user表的情况


不起作用?
重启mysql数据库,还是不对,删除掉用户再次创建,问题一样,所以从mysql库本身去排查问题。

于是先进行数据库升级:
./mysql_upgrade -h127.0.0.1 -uroot -p'xxxx' --force
mysql_upgrade: [Warning] Using a password on the command line interface can be insecure.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv OK
mysql.db OK
mysql.engine_cost OK
mysql.event OK
mysql.func OK
mysql.general_log OK
mysql.gtid_executed OK
mysql.ha_health_check OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.rds_table_checksums OK
mysql.server_cost OK
mysql.servers OK
mysql.slave_master_info OK
mysql.slave_relay_log_info OK
mysql.slave_worker_info OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
Upgrading the sys schema.
Checking databases.

重启数据库再次测试,问题解决
查看到mysql.user表中的权限信息如下:


在未升级之前,使用mysqldump命令会出现
mysqldump: Couldn't execute 'SHOW VARIABLES LIKE 'gtid\_mode'': Table 'performance_schema.session_variables' doesn't exist (1146)

如果在升级后使用mysqldump出现错误:
mysqldump: Couldn't execute 'SHOW VARIABLES LIKE 'gtid\_mode'': Native table 'performance_schema'.'session_variables' has the wrong structure (1682)
只要重新启动mysql服务即可

MySQL 5.7 创建用户操作可以通过 SQL 语句来完成。通常,您需要使用 `CREATE USER` 命令来创建新的数据库用户账户,并且可以为该用户设置密码和其他访问权限。以下是创建用户的示例步骤: 1. 打开 MySQL 命令行工具或者使用任何可以连接到 MySQL 数据库的客户端工具。 2. 使用 `CREATE USER` 语句来创建用户,并且可以指定用户登录名和主机。例如,创建一个名为 `newuser`,从所有主机可以登录用户: ```sql CREATE USER 'newuser'@'%' IDENTIFIED BY 'password'; ``` 在这个例子,`'newuser'@'%'` 表示用户名为 `newuser`,`'%'` 表示可以从任何主机连接。`IDENTIFIED BY 'password'` 是设置该用户的密码。 3. 创建用户后,通常还需要为该用户分配相应的权限。可以使用 `GRANT` 语句来授权。例如,授予 `newuser` 对所有数据库的 `SELECT`、`INSERT`、`UPDATE` 和 `DELETE` 权限: ```sql GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'newuser'@'%'; ``` 这里 `ON *.*` 表示对所有数据库和所有表进行授权,`TO 'newuser'@'%'` 表示授权给 `newuser` 用户。 4. 完成授权后,使用 `FLUSH PRIVILEGES` 命令使权限更改立即生效: ```sql FLUSH PRIVILEGES; ``` 5. 最后,你可以用 `SHOW GRANTS FOR 'newuser'@'%';` 来检查授权信息是否正确。 请注意,出于安全考虑,在创建用户时应该选择一个强密码,并且在生产环境限制用户的访问权限,遵循最小权限原则,只授予其完成工作必需的权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值