ERROR 1044 (42000) at line 17: Access denied for user ‘root‘@‘%‘ to database ‘teamtalk‘

linux的ubuntu系统,突然登入不到mysql数据库。Navicat 远程登入数据库发现,数据库莫名其妙没了!!!起初还以为登错远程服务器端了,因为前一天还在使用的数据库,说没就没。仔细观察后发现又多出一个README_TO_RECOVER_A的数据库。看这个数据库的名字就感觉不秒,如此猥琐的名称。

没有删除前的数据库。

删除用户数据库并赠送一个数据库后。 

 这个曾送的数据库中还留下一句话,大概意思就是限多少时间内给钱,不给就撕票。我这个是测试用的数据库,所以没什么关系。如果是生产环节的就危险了。所以需要处理两个问题。第一如何恢复数据库,第二如何加强数据库安全。

那就开始度娘找答案了,因为最终没有找到一个完整的答案,所以这里总结并记录一下。

1.如何恢复数据库。

准确说,是如何让mysql数据库可用并从新创建自己的数据库。因为被这种绑票后,数据库是创建不了。网上都说是权限问题,有两种方法。

第一、修改权限

 登入数据库

# mysql -u root -p

 选择mysql数据,并查看权限。

use mysql;

SELECT host,user,Grant_priv,Super_priv FROM mysql.user;

 其实看我数据库中root用户的Grant_priv和Super_priv权限都有,但是还是跟着操作了一遍。

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';

更新权限 FLUSH PRIVILEGES;

 再次进入数据库。

测试创建数据是否可以create database python;

发现问题依旧存在。

 第二、赋权

选择数据库use mysql;

 给root用户赋权,结果失败了。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

 查看当前用户权限show grants;(其实一开始也看不董如何才是正常的权限列表,后面有查看自己创建的root账号权限列表)

 度娘上此问题基本上都是用修改权限和赋权法处理的。在我这里第一个修改权限问题依旧,第二个赋权法,本身就执行失败了。毫无头绪了!!!只能在想办法了。

删除此root账号在重新创建一个root账号然后赋权呢?

第三、重新创建root账号

前面有个叫debian-sys-maint的用户选项也是都有权限。

首先用户debian-sys-maint的密码我们不知道,需要先找到此用户密码。我也不知道密码在哪里。

度娘说mysql有个debian.cnf的配置文件有此用户密码。

locate *.cnf

 确实发现了上述文件。查看文件cat /etc/mysql/debian.cnf 

 使用此用户名和密码登入

 查看权限show grants;发现跟之前的root用户权限还真不一样。

(后话,用debian-sys-maint账号给root账号赋权不知道是否可以成功GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';因为当时没有执行赋权指令,而是直接删除了root账号,从新创建一个root账号。而后来用新建的root账号登入后去执行赋权指令时候可以的GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';以及用debian-sys-maint账号给新创建的root账号执行赋权指令GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';也是可以成功的,所以是否原来root账号确实有问题,不得而知了。)

 删除root用户drop user root;

 选择用户并查看用户,显示没有root用户了。

use mysql;

SELECT host,user,Grant_priv,Super_priv FROM mysql.user;

创建root用户并且是可以通过任何IP访问的,密码是123456。(%表示设置为任何IP可访问。这里密码123456也是数据库不安全的原因,后面单独讲。)

创建用户create user 'root'@'%' identified by  '123456';

查看用户权限SELECT host,user,Grant_priv,Super_priv FROM mysql.user;

给新用户赋权grant all privileges on *.* to 'root'@'%' with grant option; 

查看新创建root账号并赋权后的权限,和原来的root账号显示不同。具体是什么原因,导致之前账号权限有问题,然后又不能被重新赋权,目前我也不知道。

 

更新权限flush privileges;

 用新创建的root用户验证

mysql -u root -p

创建新数据库create database python;

(这里用python为实例是因为度娘,都是用这个举例,所以我也就用这个了。)

删除测试的数据库drop database python;

 到此第一个问题恢复数据库可使用就完成了。

2.加强数据库安全

虽然是测试数据库,也不希望每天重新去生成一次,那多麻烦。更重要的是以后生产环境下的就一定要确保安全。那如何提高安全性呢?有以下两点。

1.服务器后台设置允许访问的IP

从源头上防止外部非指定的主机访问到我们的mysql数据库。这里说的服务器后台指的是云服务器控制台。

2.mysql数据库本身的设置

一、关闭远程访问,这点不推荐,因为实际应用中数据库和应用软件都会分别部署在不同的服务器。所以我还是开启了远程访问。

use mysql;                                           #访问mysql库
update user set host = 'localhost' where user = 'root';      #使root能再任何host访问
FLUSH PRIVILEGES;                                    #刷新

 二、不使用默认端口3306

找到mysql.cnf配置文件locate mysql.cnf

打开文件vim /etc/mysql/mysql.cnf。找到节点[mysqld]下有个port = 3306,可以修改为新的端口。

 保存配置文件后,从前数据库service mysql restart

三、root账号密码增加复杂度

不要用太简单的密码作为root账号密码。这点比前两点更重要,也更容易做到。

UPDATE user SET plugin="mysql_native_password", authentication_string=PASSWORD("Qui12&3#uj9") WHERE user="root";

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值