牛刀小试MySQL学习-权限管理

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 在讲权限的时候,官方有一句话:Do not ever give anyone (except MySQL root accounts) access to the user table in the mysql database!不要让任何人有进入mysql.user表的权限Never grant privileges to all hosts.  绝不赋予权限给任何的主机       mysql的用户认证系统:有两个阶段:验证和授权(1)验证,第一步先走mysql.user表,查看是否有这个用户,如果有,则匹配授权,没有的话就拒绝连接。

在讲权限的时候,官方有一句话:

Do not ever give anyone (except MySQL root accounts) access to the user table in the mysql database!

不要让任何人有进入mysql.user表的权限

Never grant privileges to all hosts.  

绝不赋予权限给任何的主机

       

mysql的用户认证系统:有两个阶段:

验证和授权

(1)验证,第一步先走mysql.user表,查看是否有这个用户,如果有,则匹配授权,没有的话就拒绝连接。

(2)授权,走db->tables_priv-> column_priv

说白了,授权的时候,分全局级,数据库级,表级和列级,routine级。

http://dev.mysql.com/doc/refman/5.5/en/privileges-provided.html  这里有Mysql提供的权限细则

desc user,db,host(可以查看这三个重要的权限系统表)

更改数据库的权限表,也有两种方式,一种直接改db,user,host,tables_priv,column_priv表。再flush privilegs,这种方式不推荐,还有一种就是grant,上面的网址,也有相应的细则。我举几个实用的例子

例如:

grant all privileges on *.* to zsd@localhost identified by 'zsd'(创建用户,并赋予所有的权限,除了grant privilege,这个是全局级的)

select * from mysql.user where user='zsd' and host='localhost' \G;(查看刚刚用户权限情况)

grant all privileges on *.* to zsd@localhost identified by 'zsd' with grant option(加上grant privilege)

grant select ,insert,update,delete on zsd.* to zsd_oper@'192.168.35.%' identified by ' zsd_oper 

(匹配是192.168.35网段的zsd用户的任何主机,有访问zsd数据库的增上改查的权限)

grant execute on test.pl to 'abc'@'localhost'(赋予用户执行存储过程和函数的权限)


当然还可以设置adminstrator级别的权限。

grant super,process,file on *.*  to zsd_ad@'%' identified by ' zsd_ad';(由于admin权限,所以不是针对库和表的,是针对服务器级别的)

super:enables an account to use CHANGE MASTER TO, KILL or mysqladmin kill to kill threads belonging to other accounts (you can always kill your own threads),PURGE BINARY LOGS, configuration changes using SET GLOBAL to modify global system variables, the mysqladmin debug command

process:The privilege enables use of SHOW PROCESSLIST or mysqladmin processlist to see threads belonging to other accounts

file:gives you permission to read and write files on the server host using the LOAD DATA INFILE and SELECT ... INTO OUTFILE statements and the LOAD_FILE() function

都挺好理解的,我就不翻译了,作为自己看的,再提醒一遍,上面的网址有详细的介绍。当然file的这个权限对于服务器级别是可以做文章的,会导致漏洞和不安全。

grant usage on *.* to zsd_usage@'%' identified by'zsd_usage'(只用户登录数据库,没有任何权限)


查看权限:

show grants for zsd@localhost;

更改权限:

再使用一遍grant,加一个create权限

grant select ,insert,update,delete,create on zsd.* to zsd_oper@'192.168.35.%' identified by ' zsd_oper 

删除权限:

就演示上面的权限删除

revoke all privileges on *.* from zsd_oper@'192.168.35.%' identified by ' zsd_oper ' ;(这个会删除上面的权限吗,完全不会,它只会删除全局的权限,也就是更改user表中的权限)

revoke all privileges on zsd.* from zsd_oper@'192.168.35.%' identified by ' zsd_oper ' ;(这样就可以删除zsd数据库上面的各个权限了)

当然,删除权限只能删除除了usage权限的所有权限指标,代表这这个用户还是存在的。

要想删除的话,只有直接drop user zsd_oper@'192.168.35.%'


除了赋予权限,删除用户,你可能还想修改密码:

修改密码的方式:

set password for zsd_oper@'192.168.35.%'  =password('zsd');

还可以直接修改user表,然后flush privileges.建议不使用。


关于Mysql的安全问题:

锁定mysql用户。

管理员用mysql用户,进行管理,切忌不用root用户(权限太大了),其他的用户都用专有用户管理,例如:zsd_read,zsd_oper用户来做只读和操作用户挺好。

mysql除了数据文件目录是mysql,其他的目录都应该设置为root用户。


还有一个匿名用户的问题例如:(它可以以任何用户名的方式进入),drop user ''@'localhost'可以删除此匿名用户

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
47 3
|
26天前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
57 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
27天前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
44 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
27天前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
20 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
30天前
|
关系型数据库 MySQL 数据库
mysql关系型数据库的学习
mysql关系型数据库的学习
17 0
|
1月前
|
Kubernetes 关系型数据库 MySQL
k8s学习--利用helm部署应用mysql,加深helm的理解
k8s学习--利用helm部署应用mysql,加深helm的理解
150 0
|
2月前
|
SQL 关系型数据库 MySQL
学习MySQL操作的有效方法
学习MySQL操作的有效方法
43 3
|
1天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
11 4
|
25天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
58 3
Mysql(4)—数据库索引
|
10天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
49 2