前言
前两天已经上线的项目被扫描出了一些关于MySQL数据库的安全漏洞,本人选择了升级MySQL版本的方式来解决这些安全漏洞(由5.7.26升级至5.7.33),数据库升级后项目可以成功链接上新版本的数据库,但是在进行操作的时候就出现了unknown error 1449的错误…
问题原因及解决办法
有经验的小伙伴都知道,MySQL出现unknown error 1449错误的原因就是MySQL用户权限不够导致的,那么针对这种情况来说解决起来也是很简单的,就是给用户足够的权限就好了,解决办法如下:
①打开命令行用 root用户登录mysql数据库
②执行grant all privileges on . to 账号@”%” identified by ”密码”;
例如:grant all privileges on . to root@”%” identified by ”root”;
③刷新权限FLUSH PRIVILEGES;
不过此方法对本人来说并没有作用,在操作的时候依然会出现unknown error 1449的错误,那么接下来再说说第二种情况。
通过对新旧两个数据库的排查比较,终于发现了一些蛛丝马迹,在旧数据库(5.7.26)中存在一个XXX账号,但是新数据库中并不存在这个用户,抱着死马当活马医的想法,本人在新数据库(5.7.33)中新建了与旧数据库(5.7.26)中相同的XXX账号(登录名、密码、权限完全相同),此时神奇的一幕出现了,unknown error 1449问题被完美解决了。
经过查阅资料后发现,出现这个情况的原因是在数据库迁移后新版本MySQL数据库中不存在创建该库的用户(也就是说A数据库是由a用户在旧版本数据库中创建的,此时A数据库被迁移至高版本数据库,但是高版本数据库中并不存在a用户),从而导致其他用户无权操作该数据库。(缺少创建该库的用户,即便给root用户赋权后也无法操作),所以在新版本数据库中创建了此用户,问题就迎刃而解了。
结语
第二种情况下不只是数据库表,视图也会出现相同的问题,所以必须要保证新库中存在创建该数据库(视图)的用户才可以正常使用。
当然了,这还有个馊主意,就是重新创建一遍这些数据库(视图)也可以完美解决这个问题。
如果文章中有错误,欢迎大家留言指正;若您有更好、更独到的理解,欢迎您在留言区留下您的宝贵想法。
你在被打击时,记起你的珍贵,抵抗恶意;
你在迷茫时,坚信你的珍贵,抛开蜚语;
爱你所爱 行你所行 听从你心 无问东西