二、Mysql权限


前文-安装mysql单机版

Mysql权限

最简单的 MySql 权限

使用 Root 用户,执行

grant SELECT on mall.* TO 'dev'@'192.168.6.%' IDENTIFIED BY '123' WITH GRANT OPTION;

很简单的一句 sql,创建了一个 dev 的用户,密码为 123,仅仅运行在网段为 192.168.6.*的 网段进行查询操作。

再执行一条命令

show grants for 'dev'@'192.168.6.%'

在这里插入图片描述
不错,可以链接,也可以执行 select,这个时候还想删库?做梦吧~

用户标识

在 mysql 中的权限不是单纯的赋予给用户的,而是赋予给” 用户+IP”的
用户名+IP
用户权限所涉及的表
mysql.user,mysql.db,mysql.table_priv,mysql_column_priv
这些表有什么用,和权限又有什么关系呢?

  • User 的一行记录代表一个用户标识
  • db 的一行记录代表对数据库的权限
  • table_priv 的一行记录代表对表的权限
  • 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.6.%';

这时候可以在分别看下 table_priv,column_priv 的数据
在这里插入图片描述
在这里插入图片描述
原来是我们之前给了dev所有查看权限,所以需要删除之前的权限

REVOKE SELECT on mall.* from 'dev'@'192.168.6.%

用dev登陆,现在查所有的记录不让查
在这里插入图片描述
查id、name 则可以
在这里插入图片描述

Mysql的角色

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 中

创建一个角色

create USER 'dev_role'

可能被你发现了,我这里创建得是个 user,为了稍微像角色一点点,我给这 user 取名叫 dev_role,而且为了方便也没用使用密码了。

创建 2 个开发人员账号:

create USER 'deer';
 create USER 'enjoy';

这两个用户我也没设置密码

把两个用户加到组里面

grant proxy on 'dev_role' to 'deer' ;
grant proxy on 'dev_role' to 'enjoy';

可以看下其中一个用户的权限
在这里插入图片描述
这里有个小的地方需要注意:如果你是远程链接,你可能会收获一个大大的错误,你没有权 限做这一步,这个时候你需要再服务器上执行一条

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

给角色 dev_role 应该有的权限

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

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

测试

好咧,大功告成,现在使用’deer’用户登陆系统试试

select id ,name from mall.account

学到了吧,涨到姿势了吧,你可能又会问,这种角色的权限是存哪的呢? 给你看表
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值