MySQL权限问题(内部显示ERROR 1045 (28000))
我的root用户竟然没有办法授权?
刚开始猜测是mysql里面自己出了点问题,但是可以查看表也可以插入数据,这个时候反应过来是权限问题
因为我之前做musqldump的备份的时候创建了个远程root用户
我们在mysqldump远程的时候会将创建'root'@'%'用于全网段登录,这个其实不是覆盖原本'root'@'localhost',而是创建一个新的root
我们现在需要看看权限
mysql> select * from user \G
*************************** 4. row ***************************
Host: %
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: N
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:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
password_expired: N
password_last_changed: 2022-04-25 11:29:10
password_lifetime: NULL
account_locked: N
4 rows in set (0.00 sec)
我们注意这个扎眼的玩意
Grant_priv: N
grant权限并没有给到,所以说,all privilege是不包含grant权限的
解决方法
第一种、
此处的解决方法分成两个一个是在刚开始时,在我们创建root@'%'的时候赋予权限with grant option
grant all privileges on *.* to root@'%' identified by '123456' with grant option ;
可以防止后续的出错
第二种、
这种主要是在已经删除root@'localhost’的时候的,整个MySQL都没有grant的时候
update mysql.user set Grant_priv="Y" where user="root" and host="%";
我们虽然不能赋权,但是可以直接修改呀
我的一个碎碎念:
在解决问题时我们有讨论过,如果说把grant放出去是不是不太好,我刚开始也是这么说,但是你们看第二种解决方法,它的修改方式是update,这就说明了,如果你把update放出去了,它就是无敌的,我也是后面才意识到这个
所以我的建议是在规划用户的时候需要仔细,如果是没有必要的,不要把修改权限放出去,这个很致命
请根据个人环境选择不同的方法解决问题,问题的解决方法并不适用与所有人与环境