巡检的时候, 发现数据库存在用户名为空的账号.
低版本的mysql安装的时候会创建用户名为空的账号, 然后升级到高版本的时候附带了这个账号.
但官方生成的那个匿名账号是 ''@'localhost'
的. 所以这个账号很大可能是业务创建的.(得解析binlog找了)
show grants for ''@'%';
权限很大.... 不安全
select user,host,plugin,authentication_string from mysql.user where user='';
有密码, 虽然是mysql_native_password加密方式. 勉强算是安全.
如果我们直接使用命令行登录:
mysql -h127.0.0.1 -P3314 -p12345678 --user ''
发现会用户名会自动识别为 操作系统用户名. 所以不能直接使用命令行登录.
使用应用程序登录
比如使用pymysql登录
import pymysql
conn = pymysql.connect(
host='127.0.0.1',
port=3314,
user='',
password='12345678',
)
还是报错, 也自动使用了当前操作系统的用户作为mysql用户.
自定义脚本连接
这时候就需要我们的知识储备了. 好在之前有解析过mysql的连接协议: https://cloud.tencent.com/developer/article/2242261
我们直接把源码复制过来使用即可, 无需任何修改
import testpymysql
aa = testpymysql.mysql()
aa.connect()
登录数据库验证
show processlist;
发现确实登录上了.
1. 虽然mysql里存在匿名账号, 但是要求有密码要求, 也还算安全.
2. 无法直接使用mysql命令和业务程序连接. 因为会自动使用当前OS用户作为mysql用户连接. (所以这账号到底有啥用?)
3. 定期巡检. 就能早点发现这个用户. 早发现,早处理(时间久了, binlog就被清除了, 就找不到原因了.)
4. 匿名账号可能影响审计之类的, 建议清楚匿名账号(即使它要密码才能登录)
源码看之前的文章即可
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。