MySQL的权限体系

 

1、关于账号

user@host 账号三要素:账号、密码、来源主机

 

账号的创建

传统方式:create user abc@'192.168.1.2' identified by 'abc';

grant方式:grant select on abc_db.* to abc@'192.168.1.2' identified by 'abc';

另类方式:insert into mysql.user(host,user,....) values ('192.168.1.2','abc',...)

修改字典表后需要flush privileges使之生效

删除账号:drop user abc@host;

 

修改密码:set password for abc=password('123456');

另类修改:update mysql.user set password=password('123456') where user='abc' and host='...';

 

账号失效:(失效后仍能登录,不能执行操作):alter user abc password expire;

 

账号授权:grant select,insert,... on xxdb.xx to abc@192.168.1.2;

查看授权:show grants for abc@192.168.1.2;

回收授权:(回收时的权限级别必须与授权时一致);

revoke select,insert,... on xxdb.xx from abc@192.168.1.2;

全量回收授权:revoke all,grant option from user@host;

 

2、关于权限级别

mysql权限颗粒:全局、库、表、列、程序(routine,包括procedure、function)

可精确的为某个用户分配从某台机器连接进来,访问某个数据库下某张表的某个列的某部分记录权限

权限匹配时,从大到小,直到匹配成功,否则无权限;

相关的字典表:user、db、host(5.6之后弃用)、tables_priv、columns_priv、procs_priv

 

3、账户方面的安全考虑

建议账户建立三个维度:

user_oper

user_read

user_mgr

两个原则:

管理员账户改名,不允许出现root名称的用户;

用户访问域设定为服务器所在IP段

 

要命的历史文件:~/.mysql_history

Linux/Unix系统下,使用mysql命令行工具执行的所有操作,包括口令,均保存在该隐藏文件下

解决:

方案1:改变环境变量MYSQL_HISTFILE,将其值改为/dev/null

方案2:将.mysql_history改为/dev/null的软连接:ln -s -f /dev/null ~/.mysql_history

修改后,上下键翻看历史命令仅针对当前会话有效!

 

管理员口令丢失

找回方法非常规,必须多次重启MySQL服务

方法1:重启MySQL,附加参数:--init-file,执行含有密码重置的脚本

方法2:杀掉MySQL,附加特殊参数启动,跳过权限验证,而后登录库重置密码后,再正常重启

mysql_safe --defaults-file=/.../my.cnf --skip-grant-tables --skip-networking &

--skip-networking:不监听来自TCP/IP的连接,只允许MySQL服务本地创建连接,确保安全

重启后mysql登录,update掉user表,停服务:mysqladmin shutdown

启动服务:mysql_safe --defaults-file=/.../my.cnf &

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值