详解:MySQL数据库的权限管理和运维实操

详解:MySQL数据库的权限管理

一、MYSQL权限简介

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

那么MYSQL的权限是如何实现的呢?这就要说到mysql的两阶段的验证,下面详细来介绍:第一阶段:服务器首先会检查你是否允许连接。因为创建用户的时候会加上主机限制,可以限制成本地、某个IP、某个IP段、以及任何地方等,只允许你从配置的指定地方登录。后面在实战的时候会详细说关于主机的限制。第二阶段:如果你能连接,MYSQL会检查你发出的每个请求,看你是否有足够的权限实施它。比如你要更新某个表、或者查询某个表,MYSQL会检查你对哪个表或者某个列是否有权限。再比如,你要运行某个存储过程,MYSQL会检查你对存储过程是否有执行权限等。

mysql的官网:https://www.mysql.com/

二:MYSQL有哪些权限呢,整理了一下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三:MYSQL的权限的分布

MYSQL的权限如何分布,就是针对表可以设置什么权限,针对列可以设置什么权限等等,这个可以从官方文档中的一个表来说明:

在这里插入图片描述

四:MYSQL权限经验原则

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

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

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

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

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

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

五:MYSQL权限实战

  1. GRANT命令使用说明

先来看一个例子,创建一个只允许从本地登录的超级用户feihong,并允许将权限赋予别的用户,密码为test@feihong.111

GRANT ALL PRIVILEGES ON *.* TO feihong@'localhost'\
 IDENTIFIED BY 'test@feihong.111' WITH GRANT OPTION;

GRANT命令说明:

ALL PRIVILEGES 是表示所有权限,你也可以使用select、update等权限提到的权限。

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

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

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

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

IDENTIFIED BY 指定用户的登录密码。

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

备注:可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加了一个select权限,然后又给用户添加了一个insert权限,那么该用户就同时拥有了select和insert权限。

2. 创建一个超级用户

创建一个只允许从本地登录的超级用户feihong,并允许将权限赋予别的用户,密码为test@feihong.111

GRANT ALL PRIVILEGES ON *.* TO feihong@'localhost'\
 IDENTIFIED BY 'test@feihong.111' WITH GRANT OPTION;

3. 创建一个网站用户(程序用户)

创建一个一般的程序用户,这个用户可能只需要SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES等权限如果有存储过程还需要加上EXECUTE权限,一般是指定内网网段192.168.100网段。

GRANT  USAGE,SELECT, INSERT, UPDATE, DELETE, \
SHOW VIEW ,CREATE TEMPORARY TABLES,EXECUTE\
 ON `test`.* TO webuser@'192.168.100.%'\
  IDENTIFIED BY  'test@feihong.111';

4. 创建一个普通用户(仅有查询权限)

GRANT USAGE,SELECT ON `test`.* \
TO public@'192.168.100.%' \
IDENTIFIED BY  'public@feihong.111';

5. 刷新权限

使用这个命令使权限生效,尤其是你对那些权限表user、db、host等做了update或者delete更新的时候。以前遇到过使用grant后权限没有更新的情况,大家可以养成习惯,只要对权限做了更改就使用FLUSH PRIVILEGES命令来刷新权限。

FLUSH PRIVILEGES;

6. 查看权限

使用如下命令可以方便的查看到某个用户的权限:

SHOW GRANTS FOR 'webuser'@'192.168.100.%';

7. 回收权限

将前面创建的webuser用户的DELETE权限回收,使用如下命令

REVOKE DELETE ON test.* FROM 'webuser'@'192.168.100.%';

8. 删除用户

注意删除用户不要使用DELETE直接删除,因为使用DELETE删除后用户的权限并未删除,新建同名用户后又会继承以前的权限。正确的做法是使用DROP USER命令删除用户,比如要删除’webuser’@'192.168.100.%'用户采用如下命令:

DROP USER 'webuser'@'192.168.100.%';

六:运维工程师实操

在实际操作中:我们是通过hive来给他们赋予权限的

平台数据仓库使用Hive进行构建,通过调研决定使用“SQL Standards Based Authorization in HiveServer2”对用户提交的SQL进行权限控制,也可根据实际情况选择是否开启“Storage Based Authorization in the Metastore Server”。

权限校验时需要识别提交SQL的用户名(即:与HiveServer2建立连接时使用的用户名),在使用Kerberos的环境下,用户名为通过Kerberos认证的用户名;

案例:

在hive创建 dws_consumer 库 ,oru用户只要读的权限,hadoop用户要所有权限

操作步骤可以参考

1.ssh 10.200.60.123 
2.kinit -kt hive.keytab hive #获取hive的授权 
3.klist    #klist 命令显示 Kerberos 凭证高速缓存或密钥表的内容
4.beeline -u 'jdbc:hive2://10.200.60.114:10003/default;principal=hive/ddp-cm.cmdmp.com@CMDMP.COM' 
5.create database dws_consumer ; #创建数dws_consumer据库
6.grant select on database dws_consumer to role oru_role; #授予oru用户只读权限 
7.grant all on database dws_consumer to role hadoop_role; #授予hadoop用户所有权限 
8.show grant role oru_role on dws_consumer ; #查看oru用户被授予的权限是否成功
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值