删库跑路,一键操作600万?一起来学习一下Mysql的权限管理

2019-09-27 16:28:13 浏览数 (1)

“ 究竟是猿某锁死服务器坑人,还是螃蟹创始人倒打一耙在胡说?” —— 23号老板

0

1

事件还原

前几日,螃蟹网络创始人尹柏霖对《财经天下》周刊说,自己从月流水预计千万元的游戏策划人,到如今重回打工仔,在深圳没房没车一无所有,孩子正要出生,“将近三个月没法缓过劲来”。而这一切,都要拜跑路的主程序员燕飞宏所赐。

1月20日,游戏公司螃蟹网络的一则公告开始在微博上流传。公告称,螃蟹网络的一款游戏在上线测试当天,遭后端主程序员锁死服务器与电脑,拒不交接工作,最终耗费两年,导致600万元资金的项目失败。

创始人的声明:

程序员锁死服务器与电脑并恶意失踪,最终致创业公司倒闭,创始人身背百万债务沦为打工仔的新闻持续刷屏各大平台。1 月 24 日,当事主程燕某发表了一篇题为《已倒闭某科技公司前员工的辟谣声明》的文章,对众多指责和网络谣言一一反驳。剧情又来了个惊天大逆转。

猿某一一反驳:

02

Mysql权限管理

程序员删库跑路,对一家创业公司意味着什么,不用说那是一件极其严重的事情。那作为公司的管理者,又或者是DBA,如果更为合理、有效的管理数据库呢?以企业当中常用的ysql数据库为例,Mysql有着全面的权限管理。

Mysql的权限,简单来说就是mysql允许你做你权限以内的事情,不可以越界。比如只允许你执行select操作,那么你就不能执行update操作。只允许你从某台机器上连接mysql,那么你就不能从除那台机器以外的其他机器连接mysql。

那么Mysql的权限是如何实现的呢?

这就要说到mysql的两阶段验证:

第一阶段:服务器首先会检查你是否允许连接。因为创建用户的时候会加上主机限制,可以限制成本地、某个IP、某个IP段、以及任何地方等,只允许你从配置的指定地方登陆。

第二阶段:如果你能连接,Mysql会检查你发出的每个请求,看你是否有足够的权限实施它。比如你要更新某个表、或者查询某个表,Mysql会查看你对哪个表或者某个列是否有权限。再比如,你要运行某个存储过程,Mysql会检查你对存储过程是否有执行权限等。

权限

权限级别

权限说明

CREATE

数据库、表或索引

创建数据库、表或索引权限

DROP

数据库或表

删除数据库或表权限

GRANT OPTION

数据库、表或保存的程序

赋予权限选项

REFERENCES

数据库或表

ALTER

更改表,比如添加字段、索引等

DELETE

删除数据权限

INDEX

索引权限

INSERT

插入权限

SELECT

查询权限

UPDATE

更新权限

CREATE VIEW

视图

创建视图权限

SHOW VIEW

视图

查看视图权限

ALTER ROUTINE

存储过程

更改存储过程权限

CREATE ROUTINE

存储过程

创建存储过程权限

EXECUTE

存储过程

执行存储过程权限

FILE

服务器主机上的文件访问

文件访问权限

CREATE TEMPORARY TABLES

服务器管理

创建临时表权限

LOCK TABLES

服务器管理

锁表权限

CREATE USER

服务器管理

创建用户权限

PROCESS

服务器管理

查看进程权限

RELOAD

服务器管理

执行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的权限

REPLICATION CLIENT

服务器管理

复制权限

REPLICATION SLAVE

服务器管理

复制权限

SHOW DATABASES

服务器管理

查看数据库权限

SHUTDOWN

服务器管理

关闭数据库权限

SUPER

服务器管理

执行kill线程权限

Mysql的权限分布

权限分布

可能的设置的权限

表权限

'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter'

列权限

'Select', 'Insert', 'Update', 'References'

过程权限

'Execute', 'Alter Routine', 'Grant'

权限控制主要是出于安全因素,因此需要遵循一下几个经验原则:

1、只授予能满足需要的最小权限,防止用户干坏事。比如用户只是需要查询,那就只给select权限就可以了,不要给用户赋予update、insert或者delete权限。

2、创建用户的时候限制用户的登录主机,一般是限制成指定IP或者内网IP段。

3、初始化数据库的时候删除没有密码的用户。安装完数据库的时候会自动创建一些用户,这些用户默认没有密码。

4、为每个用户设置满足密码复杂度的密码。

5、定期清理不需要的用户。回收权限或者删除用户。

如何使用?

GRANT命令

$> grant all privileges on *.* to bboyHan@'localhost' identified by "123456" with grant option;

关键字

说明

ALL PRIVILEGES

表示所有权限,你也可以使用select、update等权限。

on

用来指定权限针对哪些库和表。

*.*

*.* 中前面的*号用来指定数据库名,后面的*号用来指定表名。

TO‍

表示将权限赋予某个用户。

bboyhan@localhost

@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。注意:这里%有的版本不包括本地,以前碰到过给某个用户设置了%允许任何地方登录,但是在本地登录不了,这个和版本有关系,遇到这个问题再加一个localhost的用户就可以了。

IDENTIFIED BY

指定用户的登录密码

WITH GRANT OPTION

这个选项表示该用户可以将自己拥有的权限授权给别人。注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其它用户授权。

使权限刷新生效:

回收用户权限:

删除用户:

修改密码:

03

小结

删库跑路并不可怕,可怕的是没有防范于未然。

文章部分内容来自infoQ、I’m Me!(博客园)等,在此鸣谢。

0 人点赞