常见问题及解决方法
1. localhost作为连接参数
$ mysql --host=localhost,默认使用unix socket而非tcp
使用ssh通道连接tcp端口必须使用127.0.0.1
登陆时不会将localhost与%匹配
2. 临时表
只有CREATE TEMPORARY TABLE权限,其他的“表权限”应用到临时表
可能会导致不能对临时表做ddl操作,但是赋予这些权限会影响正常表
解决方法是建一个tmp的db,将权限赋予用户
3. 必须使用密码
[client] section of my.cnf as follows:
password
mysql.user表中空串的密码是没有密码,而非密码为空串你
4. 考虑禁用匿名用户
show grants 可能不会显示所有权限
mysql提供的mysql_secure_installation可以实现
5. 合理使用用户的host
host应该用来区分where connect,而非what can do
容易产生问题
6. select允许show create table
7. 不要给一般用户授权mysql db中的权限
他们可以自己修改了
不要使用grant *.*
8. 小心授权SUPER
9. Mysql没有“可以使用所有db 除了”的权限
好的命名可以解决
mysql> GRANT ... ON `analysis%`.* TO 'analyst' ...;
让用户只能使用其名称开头的db,如果db有下划线,需要转义
mysql> GRANT ... ON `sunny\_%`.* TO 'sunny' ...;
10. 隐式权限
show grants只显式授予的权限
mysql默认安装,将test_开头的db权限授予任何人
有可能还能建db,如果有以下两行
mysql> SELECT * FROM mysql.db\G
*************************** 1. row ***************************
Host: %
Db: test
User:
Select_priv: Y
*************************** 2. row ***************************
Host: %
Db: test\_%
User:
Select_priv: Y
... omitted ...
另外一种情况是,用户权限查找时精确的匹配隐藏模糊匹配,即使模糊匹配权限更高,隐藏风险是用户权限修改后,模糊匹配会生效
11. 过期权限
表被删除,用户被赋予的表的权限没有删
操作系统安全
1. 不要使用特权用户启动mysql
2. 保持OS更新
3. 限制db host的登录
4. 生产测试分离
5. server审计
6. 使用chrooting, jails, zones, or virtual servers进一步隔离mysql
网络安全
1. 仅允许本机连接
禁止tcp socket 但允许unix socket
[mysqld]
skip_networking
允许tcp 但仅限于本机
[mysqld]
bind_address=127.0.0.1
2. tcp wrapper:再封一个中间层,定义访问规则
数据加密
1. 用户密码:MD%
mysql> SELECT MD5('p4ssword'), ENCRYPT('p4ssword'), SHA1('p4ssword')\G
*************************** 1. row ***************************
MD5('p4ssword'): 93863810133ebebe6e4c6bbc2a6ce1e7
ENCRYPT('p4ssword'): dDCjeBzIycENk
SHA1('p4ssword'): fbb73ec5afd91d5b503ca11756e33d21a9045d9d
INSERT INTO user_table (user, pass) VALUES ('user', MD5('p4ssword') )
SELECT * FROM user_table WHERE user = ? AND pass = MD5(?)
2. 文件系统加密
chroot环境
mysql 安全
原创
©著作权归作者所有:来自51CTO博客作者yingtju的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:新浪微博的oauth
下一篇:mysql 备份与恢复
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
MySQL 8自动备份脚本密码安全警告
作者:田逸(formyz)目标需求接到一个任务,需要在凌晨四点对一个数据库进行备
mysql v8 MySQL