一, information_schema 数据库内容说明
information_schema 数据库:mysql 5.0以上版本所有
作用:放架构信息,是一个“字典”(存放各个用户的权限,每个数据库的内容)
- SQL注入时会经常对这个数据库操作 —>通过SQL语句可以获知后台系统有那些表,库,内容
【例如】如果网站有SQL注入的漏洞—>通过sql查询一个管理员用户 —>上传php木马---->反弹shell
- 一般后端会过滤不显示SQL查询结果
内容:
二. mysql.user表内容
该表存放了数据库的用户信息,如user host password等信息
【【【【mysql.usr 存放登录mysql用户的信息-->sql注入的目标】】】
1.user字段为空的,删了就好
2.host有
允许本机登录:localhost
允许域登录:localdomain
IP:127.0.0.1 | 允许的IP
该表还储存了用户的权限说明
三,数据库安全问题
1. 修改mysql密码
默认空密码【即只允许本机登录】 -->需要网络连接 --> 修改管理员密码
☞way1 在shell里
mysqladmin -u root -p password “密码”
设置完储存在 mysql.user表中为加密后的数据
☞way2 修改mysql.user表中的数据
update mysql.user set password=password(‘新密码’) where user=‘指定用户’ and host=‘指定主机类型’;
password=password(‘密码’)
第一个password是修改密码列
?第二个password是对修改的密码进行加密处理的函数,若不带,则以明文的形式储存在user表中!!
修改完更新数据库的权限表 FLUSH PRIVILEGES;
2. mysql管理员root账号密码遗忘
☞way1 杀死进程,绕过grant权限表,实现无口令登录后修改密码
- ①杀掉进程
在shenll中 killall -TERM mysqld
- ②增加一个后台,绕过grant权限表
mysqld_safe --skip-grant-tables &
这条命令要在本机或者远程登录(ssh)才能执行
③可以无口令登录
④修改user表密码数据, 刷新数据 , 退出数据库并重启mysqld服务
☞way2 修改配置文件,添加skip-grant-tables ,实现无口令登录后修改密码
- ①修改配置文件
- ②重启mysqld服务
- ②实现无口令登录,修改user表password数据,刷新数据,退出数据库
- ④删掉跳过grant权限表那一行,重启mysqld服务
3. 添加数据库用户
☞way1在mysql.user中添加数据
??这样赋予权限,权限很大,对所有库,表都可操作【没有指定库,表】
☞way2 用CREATE USER语句添加
CREATE USER ‘用户名’@‘host内容’ IDENTIFIED BY ‘设置登录密码’;
3.用户授权(增删查改)、
①新用户授权(不存在的用户):
mysql> GRANT 权限列表 ON 库或表 TO ‘用户名’@‘登录IP或域名’ IDENTIFIED BY ‘设置登录密码’;
权限列表:
all——所有权限
select,insert,update,drop,delete,create等
库或表:
*.*——所有库,所有表
登录IP或域名:
%——表示没有限制,在任何主机都可以登录
192.168.120.%——表示在192.168.120.0网段可以登录
②老用户授权:
mysql> GRANT 权限列表 ON 库或表 TO ‘用户名’@‘登录IP或域名’;
③查看用户权限
SHOW GRANTS FOR ‘用户名’@‘登录IP或域名’;
④撤销权限
REVOKE 权限列表 ON 库.表 FROM ‘用户’@‘登录IP或域名’;
???这里的用户必须存在
4.网络连接权限
作为web部署框架的后端数据库,在网络连接方面尤为重要。
远程连接mysql命令
mysql -h 指定要连接的IP -P 指定的端口 -u 有远端登录的用户名 -p登录口令
默认端口为3306