mysql 安全





#给用户cacti赋予所有库的所有权限  
GRANT ALL PRIVILEGES ON *.* TO 'cacti'@'%' IDENTIFIED BY 'cacti' WITH GRANT OPTION;  
#重新载入赋权表  
FLUSH PRIVILEGES;  
  
#收回权限(不包含赋权权限)  
REVOKE ALL PRIVILEGES ON *.* FROM cacti;  
REVOKE ALL PRIVILEGES ON cacti.* FROM cacti;  
#收回赋权权限  
REVOKE GRANT OPTION ON *.* FROM cacti;  
#重新载入赋权表  
FLUSH PRIVILEGES; 




 
安全规则:
1, 不要赋予任何账户(除了root)进入user表的权限
2, 使用GRANT和REVOKE控制mysql进入,不要赋予超出必要的权限,不要赋予all hosts权限;
3, 不要设置自动登录msyql -u root
4, 使用SHOW GRANTS查看权限,然后REVOKE删除不必要权限
5, 数据库中不要存储明文密码
6, 不要从字典中选择密码
7, 使用防火墙,扫描机器端口,mysql默认3306,不应该被未授权机器访问;
8, 不要在internet上传输未加密数据,可以使用SSL或SSH;tcpdump工具验证msyql数据流是否加密
9, 设置my.cnf访问chmod权限400或600
10, -pyour_pass方式也不是安全的,因为密码可见,有的版本ps可以看得到密码;建议使用-p | --password交互窗口输入密码的方式;
11, 限制日志文件目录的访问权限




安全要点:
1, PASSWORD()用于生成密码hash值;PASSWORD(text)
2, 所有账户信息存储在mysql.user表中,表中的密码被PASSWORD()加密过;
3, mysql账户名由用户名和host共同组合而成,这意味着同一个账户在不同的登陆机器上具有不同权限;SHOW GRANTS FOR 'joe'@'office.example.com';/SHOW GRANTS FOR 'joe'@'home.example.com';
4,  账户登陆的时候,server首先根据user@host和密码,决定是否允许连接;当成功连接后,执行语句的时候,会判断是否拥有响应语句执行权限;
5,  权限被存储在mysql库的:user, db, tables_priv, columns_priv, and procs_priv表中;
6,  ALL PRIVILEGES代表所有的操作权限,除了GRANT OPTION;
7,  mysql.user表, 用户账户权限; XXX_priv,一列代表一个权限,Y的即授权,N未授权;
8,  db表: db层面的权限;tables_priv表层面权限; columns_priv列层面授权;proces_priv;存储过程层面授权; proxies_priv代理账户授权;
9,  如果账户带通配符(.|_|-等),则必须用引号括起来('|"|`),host不缺分大小写,user部分区分大小写;
10, ' '@'localhost'是匿名账户,建议删除;
11, 如果超过1条的匹配,则按照排序后取第一条;‘ ’@'h1.eg.net' 和 'tony'@'%',来自h1.eg.net的tony账户使用前一个匹配;来自其他所有设备的tony账户使用后一个匹配;
12, 
user表控制全局权限,即所有库的所有表; db表控制库权限,即指定库的所有表; tables_priv控制表权限,即指定表的所有列;columns_priv|procs_priv控制列和存储
13, 
mysql将这些表加载到缓存,当用户发出命令的时候,会使用这些表确认权限,如: SHUTDOWN命令的时候,会检查user表, Shutdown_priv列是否是Y;如果Y则获准进入,再检查其他相关权限表是否有响应权限,如果没有权限则直接denied,不用后续检查db等表权限
14,授权表会加载到内存,所以GRANT, REVOKE,SET PASSWORD, or RENAME USER等会立即生效;而直接修改授权表不会立即生效,必须重启服务或者FLUSH PRIVILEGES ,mysqladmin flush-privileges or mysqladmin reload才会立即生效
15,--skip-grant-tables 会让mysql不读授权表;任何用户可以进行任何操作
16, 创建账户时:WITH MAX_QUERIES_PER_HOUR 20
-> MAX_UPDATES_PER_HOUR 10
-> MAX_CONNECTIONS_PER_HOUR 5
-> MAX_USER_CONNECTIONS 2; 可以对账户做一些限制;
17, 设置密码永不过期ALTER USER 'script'@'localhost' PASSWORD EXPIRE NEVER 或default_password_lifetime=0
18,ER_MUST_CHANGE_PASSWORD 密码过期提示消息;
19,插件认证功能:对本地密码使用hash计算进行认证;
20, V5.7.6支持ACCOUNT LOCK|UNLOCK功能;记录在mysql.user表的account_locked列
21,user()和current_user(),有通配符的时候,user指当前账户和host的; current_user()含有通配符,是user中匹配的账户;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值