1.1. 最简单的MySql权限
最简单也是最高效的,如果解决新手们删库跑路的问题其实也是很简单的,对于正式库只给一个增删改查的权限,或者只给一个查询权限(是不是就解决了删库的可能性?)
使用Root用户,执行
grant SELECT on mall.* TO 'dev'@'192.168.244.%' IDENTIFIED BY '123' WITH GRANT OPTION;
很简单的一句sql,创建了一个dev的用户,密码为123,仅仅运行在网段为192.168.0.*的网段进行查询操作。
再执行一条命令
show grants for 'dev'@'192.168.244.%'
不错,可以链接,也可以执行select,这个时候还想删库?做梦吧~
1.2. 深入研究下MySQL权限
1.2.1. 用户标识是什么
上面一句简单的SQL堪称完美的解决了程序员新手的删库跑路的问题,高兴吧,你学到了新姿势,但是如果想面试给面试管留下好映像,上面的知识好像还不够,有必要好好深入研究下MySql的权限了。
这里有个小的知识点需要先具备,在mysql中的权限不是单纯的赋予给用户的,而是赋予给”用户+IP”的
比如dev用户是否能登陆,用什么密码登陆,并且能访问什么数据库等都需要加上IP,这样才算一个完整的用户标识,换句话说 'dev'@'192.168.0.168' 、'dev'@'127.0.0.1'与'dev'@'localhost' 这3个是完全不同的用户标识(哪怕你本机的ip就是192.168.0.168)。
1.2.2. 用户权限所涉及的表
有了用户标识的概念接下来就可以看权限涉及的表了,这也是面试的时候加分项哦。
有几张表你可以好好的记记的,mysql.user,mysql.db,mysql.table_priv,mysql_column_priv
你可以熟悉其中的user表,甚至手动的改过里面的数据(不合规范哦!)
那这些表有什么用,和权限又有什么关系呢?
l User的一行记录代表一个用户标识
l db的一行记录代表对数据库的权限
l table_priv的一行记录代表对表的权限
l column_priv的一行记录代表对某一列的权限
新建一个表account
DROP TABLE IF EXISTS `account`;
CREATE TABLE `account` (
`id` int(11) NOT NULL,
`name` varchar(50) DEFAULT NULL,
`balance` int(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_balance` (`balance`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `account` VALUES ('1', 'lilei', '900');
INSERT INTO `account` VALUES ('2', 'hanmei', '100');
INSERT INTO `account` VALUES ('3', 'lucy', '250');
INSERT INTO `account` VALUES ('5', 'tom', '0');
很诧异吧,mysql其实权限并不事特别low,权限的粒度甚至到了某一列上,举例来说,有个表account表
对于前面创建的dev用户我不想让他访问balance列,但是id和name列是可以访问的,这样的需求在工作中不是没有。
grant select(id,name) on mall.account to 'dev'@'192.168.244.%';
这时候可以在分别看下table_priv,column_priv的数据
这个就应该豁然开朗了吧
REVOKE SELECT on mall.* from 'dev'@'192.168.244.%'
你使用dev登陆查询试试
你再要查询所有记录?不好意思不让查
而你查询id,name查询又是可以了。
1.2.3. Mysql的角色
1.2.3.1. 准备工作
MySql基于”用户+IP”的这种授权模式其实还是挺好用的,但如果你使用Oracle、PostgreSQL、SqlServer你可能会发牢骚
这样对于每个用户都要赋权的方式是不是太麻烦了,如果我用户多呢?有没有角色或者用户组这样的功能呢?
好吧,你搓中了mysql的软肋,很痛,在mysql5.7开始才正式支持这个功能,而且连mysql官方把它叫做“Role Like”(不是角色,长得比较像而已,额~~~)?
好咧,那在5.7中怎么玩这个不像角色的角色呢?
show variables like "%proxy%"
你得先把check_proxy_users,mysql_native_password_proxy_users这两个变量设置成true才行
set GLOBAL check_proxy_users =1;
set GLOBAL mysql_native_password_proxy_users = 1;
当然,你也可以把这两个配置设置到my.cnf中
1.2.3.2. 创建一个角色
create USER 'dev_role'
可能被你发现了,我这里创建得是个user,为了稍微像角色一点点,我给这user取名叫dev_role,而且为了方便也没用使用密码了。
1.2.3.3. 创建2个开发人员账号:
create USER 'deer'
create USER 'enjoy'
这两个用户我也没设置密码
1.2.3.4. 把两个用户加到组里面
grant proxy on 'dev_role' to 'deer'
grant proxy on 'dev_role' to 'enjoy'
可以看下其中一个用户的权限
这里有个小的地方需要注意:如果你是远程链接,你可能会收获一个大大的错误,你没有权限做这一步,这个时候你需要再服务器上执行一条
GRANT PROXY ON ''@'' TO 'root'@'%' WITH GRANT OPTION;
1.2.3.5. 给角色dev_role应该有的权限
有了用户了,这用户也归属到了dev_role这角色下面,那接下来要做的就很简单了,根据业务需求给这角色设置权限就好了
grant select(id,name) on mall.account to 'dev_role'
1.2.3.6. 测试
好咧,大功告成,现在使用'deer'用户登陆系统试试
select id ,name from mall.account
你可能又会问,这种角色的权限是存哪的呢?
给你看表
Mysql用户权限控制(5.7以上版本)的更多相关文章
-
MySQL用户权限控制一例
Preface I supposed we are encountering a situation that there's an anonymous user has connec ...
-
asp.net core根据用户权限控制页面元素的显示
asp.net core根据用户权限控制页面元素的显示 Intro 在 web 应用中我们经常需要根据用户的不同允许用户访问不同的资源,显示不同的内容,之前做了一个 AccessControlHelp ...
-
mysql用户权限
mysql> show grants for root@'localhost';+-------------------------------------------------------- ...
-
linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制)
linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制) 发表于2012//07由feng linux 本身的ugo rwx的权限,对于精确的权限控制很是力不从心的,ac ...
-
Vue-Access-Control:前端用户权限控制解决方案
原文地址:http://refined-x.com/2017/11/28/Vue2.0用户权限控制解决方案/ Vue-Access-Control是一套基于Vue/Vue-Router/axios 实 ...
-
mysql用户权限操作
mysql用户权限操作1.创建用户mysql -urootcreate database zabbix default charset utf8;grant all on zabbix.* to za ...
-
Linux上Mysql数据库 用户权限控制
Linux安装mysql 点我直达 Mysql限制root用户ip地址登录 修改mysql库里边的user表: update mysql.user set host='localhost' where ...
-
Mysql 用户权限管理
1. MySQL 权限介绍 mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表,我当前的版本mysql 5.7.22 . mysql权限表 ...
-
详解nginx、php-fpm和mysql用户权限
通常情况下,我们运行web应用的服务器有CentOS.Ubuntu.Debian等等的Linux发行版本.这时候,构成服务架构所必须的Nginx.php和MySQL等应用的权限控制就显得非常重要,各个 ...
随机推荐
-
如何利用rem在移动端不同设备上让字体自适应大小
本人也是一个刚刚接触前端的小虾米,对于移动端这一块更是一抹眼的黑,前端时间接手开始一个移动端的项目,在网上查询了一下rem的作用,百度搜索下来全是介绍rem的作用原理的(rem是根据根元素计算的),然 ...
-
T-SQL CROSS APPLY、MERGE
写在前面 刚才看项目里一个存储过程,也是好长时间没有使用Sql Server2008了,好多写法和函数感觉到陌生,这就遇到了CROSS APPLY 和MERGE的语法,两者之前完全没接触过. 所以专门 ...
-
五.CSS盒子模型
所谓盒模型,就是浏览器为每个HTML元素生成的矩形盒子.即HTML页面实际上就是由一系列盒子组成.这些盒子是按照可见版式在页面上排布的.并由三个属性进行控制:position属性,display属性, ...
-
1018. Public Bike Management (30)
时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue There is a public bike service i ...
-
python局域网alive ip侦听
python局域网alive ip侦听 作者:vpoet mails:vpoet_sir@163.com 注:写着玩,欢迎copy # -*- coding: cp936 -*- # coding = ...
-
一切从编辑器说起:web前端代码编辑器
俗话说:工欲善其事,必先利其器. 工欲善其事必先利其器.谓工匠想要使他的工作做好,一定要先让工具锋利.比喻要做好一件事,准备工作非常重要. 前端写代码也是一样,需要一个好的适合自己的代码编辑器. 我想 ...
-
On the first day here
记录一下到这里的第一天 简单的自我介绍一下: 姓名: 郑超杰 昵称: 蝴蝶 English Nickname: developerbfl 技能: OC H5 Swift ...
-
封装json输出
/** * 输出json * @param $msg * @param int $errno */ protected function printOutError($msg,$errno = 100 ...
-
js/jquery 元素是否存在
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>spli ...
-
BZOJ4255 : Keep Fit!
首先旋转坐标系,把每个点可以接收的范围转化成一个正方形. 然后建立k-d tree,并记录下每个点在k-d tree上的位置. 对询问使用莫队算法,修改$O(\log n)$,查询期望$O(\log ...