3.Mysql权限

前言

权限,是解决“删库跑路”的可能性,接着来学习mysql权限的问题。

mysql角色问题,在5.7之上才有 like role的角色,当时我通过yum mysql安装的版本是 5.6,导致我迷惑了很久很久, 以为自己是角色配错了,没有生效......

查看版本的命令: mysql -uroot -proot 

1.linux安装mysql 单实例安装

https://blog.csdn.net/qq_20409407/article/details/86369185

2.linux安装mysql 多实例安装

https://blog.csdn.net/qq_20409407/article/details/102718139

按照之前的两篇mysql搭建,安装的正是mysql5.7的版本:

正文

版本安装无误后,接下来测试权限的全过程

首先登陆root用户,执行下面的语句,

#语句解释:创建了一个dev的用户,密码为123, 'dev'@'%' 代表在全网段访问,如仅仅运行在网段为192.168.0.*的网段进行查询操作,应改为:'dev'@'192.168.244.%' 
#dev 用户拥有mall这个数据库的查询权限
grant SELECT on mall.* TO 'dev'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;

查看该用户的权限,可以看到dev仅仅只有查询的权限

show grants for 'dev'@'%'

用户标识:dev+ip是一个用户标识,可以为这一个赋予一个独特的权限

用户权限相关的表:

mysql.user,mysql.db,mysql.table_priv,mysql_column_priv

那这些表有什么用,和权限又有什么关系呢?

  1. User的一行记录代表一个用户标识
  2. db的一行记录代表对数据库的权限
  3. table_priv的一行记录代表对表的权限
  4. column_priv的一行记录代表对某一列的权限

在mall下面,新建一个表,并插入一些数据:

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');

列权限的控制:

#将 account表中的 id name两个字段的权限,赋权给 'dev'@'%'
grant select(id,name) on mall.account to 'dev'@'%';

此时,你肯定跟我一样,心急的去登入了dev用户,发现account整个表的数据,都能看到,为什么么?

原因就是:  通过 show grants for 'dev'@'%' 查看一下权限,你会发现一个更大的权限出现在这

解决方式:收回这mall.*这个权限即可

#收回dev@'%' 用户的 mall.* 的权限
REVOKE SELECT on mall.* from 'dev'@'%' 

收回权限后,看看是不是只能通过sql查询赋权的字段了?是不是豁然开朗呢?

Mysql的角色

在mysql5.7开始才正式支持这个功能,而且连mysql官方把它叫做“Role Like”(不是角色,长得比较像而已)。

吐露一下自己的心声:之前我一直用5.6,一直试,一直试,都没成功,还以为自己哪里弄错了.....真正的血泪史,希望大家早点发现是版本问题,不要像我自以为是的瞎捣鼓。

show variables like "%proxy%"

想玩5.7中的Role like,先要要将 check_proxy_users,mysql_native_password_proxy_users 变为true才行,当然,你也可以把这两个配置设置到my.cnf中

set GLOBAL check_proxy_users =1;
set GLOBAL mysql_native_password_proxy_users = 1;

前期准备做好了,我们来创建一个角色,2个开发者账号,并把“2个开发者账号”add到“dev_role”

创建一个角色???【别一头雾水,角色就是用户,要不然mysql官方也不会称之为“Role Like”】

create USER 'dev_role'

创建两个开发者账号

create USER 'hqf1';
create USER 'hqf2';

把两个用户加到组里面

grant proxy on 'dev_role' to  'hqf1';
grant proxy on 'dev_role' to  'hqf2';

居然报错了,赶快查一下什么原因

这里有个小的地方需要注意:如果你是远程链接,你可能会收获一个大大的错误,你没有权限做这一步,这个时候你需要再服务器上执行一条下面一条语句

 GRANT PROXY ON ''@'' TO 'root'@'%' WITH GRANT OPTION;

#执行完后,再执行下面的语句,应该没什么问题了
grant proxy on 'dev_role' to  'hqf1';
grant proxy on 'dev_role' to  'hqf2';

查看其中一个用户的权限,通过下面的图片,可以看到原来就是 将以前的ip@‘%’ 换成了 'dev_role'@'%',真有点意思

GRANT PROXY ON 'dev_role'@'%' TO 'hqf1'@'%'

show GRANTS for 'hqf1';
show GRANTS for 'hqf2';

给角色dev_role应该有的权限

有了用户了,这用户也归属到了dev_role这角色下面,那接下来要做的就很简单了,根据业务需求给这角色设置权限就好了

grant select(id,name) on mall.account to 'dev_role'

测试这hqf1   hqf2   dev_role 这三个权限是不是已经ok了呢?

忘记说了,这三个用户登录都没有设置密码的,自己测试下吧,我测试了下,完全ok了

select id ,name from mall.account

select * from mall.account;

总结:mysql角色  权限问题,大致知道了,原来是通过 用户 控制 用户 来着

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值