简介
写这篇文章的主要目的并不是为了抄袭一下,显示自己的才能什么的,而是为了记录下自己踩过的坑,下次需要走相同的路的时候,给自己找一个桥,不用来回的找工具用来跳坑。
mysql用户相关权限分类
1-用户创建删除
2-用户对表的操作权限增加删除
3-当然,我觉得应该还有其他权限,以后补充
方案
我提供了一套自己使用mysql的方案,供各位参考。
1-root禁止远程登录
root禁止远程登录是很重要的,因为没有root用户允许,其他用户根本无法操作权限,只能做root允许自己做的事。
反之,想要本地登录root用户,就需要本地登录你的服务器,如果你的服务器都被攻破了,那还有啥说的。当然我也可以认为别人直接在你本地登录的mysql。那我只能说,你的机房都被人物理攻破了,这个世界太危险了。
禁止root远程登录也有缺点,那就是所有的权限相关的操作必须到本地操作(或者远程桌面),不过我想需要做mysql权限控制的用户,这个应该不是很麻烦。
(一般情况下我的服务器root用于也是禁止远程登录的,同时我的其他用户也都限制了sudo的权限,不登陆root用户,很多东西根本无法操作)
2-创建新用户
创建用户之后如果正式使用,最好限制每个用户的允许登录的IP地址,如此一来则可以更大程度的保证数据库的安全。
3-分割权限
root禁止远程登录之后(root未禁止远程登录则意义不大,看个人需求),你就可以创建不同的用户,然后把不同的用户赋予不同的权限,以增加安全性。(分割不同的用户权限最大的作用在于,算了,不说了,自行体会)
比如,使用微服务时,用户查询的微服务,使用你的用户只有读的权限等。
见解
一定要注意的一点就是,更改了mysql权限相关的内容后一定要刷新权限
命令:FLUSH PRIVILEGES;(忽略大小写,注意结尾有分号)
flush privileges;
本文中没有写任何的具体操作,具体操作内容在下方的引用文章中可以找到。使用时请注意数据库版本。
世上没有不透风的墙,也没有走不通的路,更没有绝对安全的所在。世界在变,你我也在变,技术日新月异,各种技术的漏洞也在不断被发现和被修复。我们能做的只是让我们的数据更安全,更可靠,数据的安全并不是一场赛跑,先到了终点就是胜利,这是一个天平,你不减少bug,你就会由于重量被敌人压下去。
不过,也不要太悲观,毕竟你从一开始就站在绝对的高处,你有更多的优势。
sql语句用例
创建新用户
create user 用户名 identified by '密码';
删除用户
drop user zhangsan@'%';
允许远程访问(新建用户默认支持远程访问,下面的语句貌似会附加赋权语句)
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
禁止远程访问
update user set host = "localhost" where user = "root" and host = "%";
delete from mysql.user where user = 用户名;
查询远程访问
select host,user from user;
创建数据库
create database 数据库名;
赋予权限(select,insert,update,delete,create,drop,all)
grant 权限 on 数据库.数据表 to '用户' @ '主机名';
例:让 xiaogang 有查询 tmp 数据库 tmp1 表的权限;
grant all on temp.* to 'xiaogang'@'%';
删除权限(select,insert,update,delete,create,drop,all)
revoke 权限 on 数据库.数据表 from '用户'@'主机名';
例:收回 xiaogang的所有权限
revoke all on *.* from 'xiaogang' @'%';
刷新权限
命令:FLUSH PRIVILEGES;(忽略大小写,注意结尾有分号)
感言
祝各位的数据更安全,各位管理共轻松。
说道数据库,我想到一篇关于jedis的文章(JedisCluster API 整理)