NoteOfMySQL-11-权限管理

一、权限系统

MySQL数据库中使用3种不同类型的安全检查:登录验证、授权、访问控制。

二、权限表

MySQL权限表存储在名为mysql的数据库中,常用的表有user、db、tables_priv、columns_priv、procs_priv。进行身份验证时也按照上述的顺序依次查找验证。

权限表详解

1. user表

字段 字段名 说明 用户字段 host、user、password、… 权限字段 …_priv 包含几十个 安全字段 ssl_type

ssl_cipher

x509_issuer

x509_subject ssl用于加密

x509用户标识用户

plugin是用户验证用户身份的插件 资源控制列 max_questions

max_updates

max_connections

max_user_connections 用户每小时允许的查询操作次数

用户每小时允许的更新操作次数

用户每小时允许执行的连接操作次数

单个用户可以同时具有的连接次数。

以上默认值都为0,表示无限制次数

MySQL5.7 版本的mysql.user表中,password字段改成authentication_string。

2. db表和host表

  • db表中存储用户对某个数据库的操作权限,决定用户能从那个主机存取哪个数据库。
  • host表中存储了某个主机对数据库的操作权限,配合db表对给定主机上数据库级操作权限有更细致的控制。

这两个表不受grant、revoke语句的影响。

user表中的权限是针对所有数据库的。如果user表中的select_ priv字段取值为y,那么该用户可以查询所有数据库中的表。如果为某个用户只设置了查询test表的权限,那么user表的select_ priv字段的取值为n。而这个select权限则记录在db表中,db 表中select_ priv 字段的取值将会是y。 由此可知,用户先根据user表的内容获取权限,然后再根据db表的内容获取权限。

3. tables_priv表

tables_priv表对单个表进行权限设置,用来指定表级权限,权限用于一个表的所有列。

4. columns_priv表

columns_priv表对表的某一列进行权限设置。

5. procs_priv表

procs_priv表对存储过程和函数进行权限设置。

三、用户管理

1. 添加用户

1.1 create user语句

create user user_name[@host_name] [identified by passwd] [login policy policy_name] [force password change {on | off}]

参数 说明 user_name 用户名 host_name 主机名,省略时默认为%,表示一组主机 passwd 密码 policy_name 用户登录的策略名称 force password change 指定用户登录时是否需重新设置新密码

注意点

  • user_name、passwd必须是有效的标识符:不能以空格、单引号、双引号开头,不能以空格结尾,不能含有分号。
  • 使用create user语句必须具有 对mysql数据库的INSERT权限或全局的CREATE USER权限
  • 新创建的用户不能访问相关的数据库或表。

NoteOfMySQL-11-权限管理

1.2 insert语句

可以直接使用insert语句将用户信息插入到mysql.user表中,但需要具有 对user表的INSERT权限。用于user表中字段较多,要保证没有默认值的字段一定要给出值,即至少插入6个字段的值: host、user、password、ssl_cipher、x509_issuer、x509_subject。插入数据之后需要执行下面语句来使用户生效,这个命令需要 RELOAD权限

-- 插入数据到mysql.user表中
insert into mysql.user(host,user,authentication_string,ssl_cipher,x509_issuer,x509_subject)
values('host_aame', 'user_name', password('passwd'), '', '', '');

-- 使新用户生效
flush privileges;

NoteOfMySQL-11-权限管理

2. 查看用户

select * from mysql.user [where host='host_name' and user='user_name'];

3. 修改用户信息

3.1 修改用户账户

修改用户账户需要具有 对mysql数据库的UPDATE权限或全局的CREATE USER权限

rename user user_name@host_name to user_name@new_host [, ...];

3.2 修改用户密码

(1)mysqladmin命令

mysqladmin -uuser_name -p password

输入上述命令之后,根据提示输入旧密码和新密码即可。

例子:将kate密码由kate90改为1234。

NoteOfMySQL-11-权限管理
NoteOfMySQL-11-权限管理

(2)set语句

set password [for 'user_name'@'host_name'] = password('new_passwd');

可选参数省略时为修改当前用户的密码。

(3)update语句

-- 更新数据到mysql.user表中
update mysql.user set authentication_string = password('new_passwd')
where user = 'user_name' and host = 'host_name';

-- 使修改生效
flush privileges;

此方法需要具有 对mysql数据库的UPDATE权限和RELOAD权限

4. 删除用户

4.1 drop语句

drop user user_name@host_name;

4.2 delete语句

-- 删除mysql.user表的数据
delete from mysql.user where user = 'user_name' and host = 'host_name';

-- 时删除生效
flush privileges;

NoteOfMySQL-11-权限管理

四、账户权限管理

1. 权限赋予

1.1 语法格式

grant priv_type[(column_list)] [, priv_type[(column_list)]]
on [object_type] priv_level
to user_specification
[with with_option...];

1.2 参数说明

参数 参数值 说明 priv_type 见下表 权限类型 column_list string 列名 object_type table、function、procedure 对象类型 priv_level 见下表 权限级别 user_specification ‘user_name’@’host_name’ 用户信息 with_option – 用于实现权限转移或限制

priv_type参数值 说明 select 赋予使用select语句的权限 insert 赋予使用insert语句的权限 update 赋予使用update语句的权限 delete 赋予使用delete语句的权限 references 赋予创建外键约束的权限 create 赋予创建数据表的权限 alter 赋予使用alter table语句修改数据库的权限 index 赋予定义索引的权限 drop 赋予删除数据表的权限 all all privileges

赋予所有的权限

priv_level参数值 说明 *

当前数据库的所有表 *.*

所有数据库的所有表 tb_name 当前数据库的某个表或视图 db_name.* 某个数据库的所有表 db_name.tb_name 某个数据库的某个表或视图 db_name.routine_name 某个数据库的某个存储过程或函数

1.3 例子

grant select(sno, sname)
on table student
to 'lili'@'localhost';

这个是赋予用户lili有使用select语句查询student数据表中sno和sname字段的权限。

grant select, update
on studentinfo.student
to 'liming'@'localhost'
identified by '123';

liming这个用户在系统中是还不存在的,这段代码是创建用户liming有使用select、update语句查询和修改studentinfo数据库中student表的权限,同时设置登录密码为123。

2. 权限转移

将with_option改为 GRANT OPTION可将to指定的用户拥有把自己的权限授予给其他用户的权力。

3. 权限限制

with_option也可以使用下面的参数+参数值的方式限制用户权限。

参数名 说明 max_queries_per_hour count 限制每小时可以查询数据库的次数 max_updates_per_hour count 限制每小时可以修改数据库的次数 max_connections_per_hour count 限制每小时可以连接数据库的次数 max_user_connections count 限制同时连接MySQL的最大用户数

上述中,count为非负整数值,0为默认值,表示无穷大。

4. 权限撤销

使用revoke语句,必须要有 MySQL数据库的全局create user权限或update权限

-- 收回某些特定权限
revoke priv_type[(column_list)] [, priv_type[(column_list)]]
on [object_type] priv_level
from user_specification;

-- 收回特定用户的所有权限
revoke all privileges, grant option from user_specification;

Original: https://www.cnblogs.com/bpf-1024/p/14060100.html
Author: 步平凡
Title: NoteOfMySQL-11-权限管理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/684625/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 《插秧诗》契此和尚

    《插秧诗》契此和尚 手把青秧插满田,低头便见水中天。 六根清净方为道,退步原来是向前。 posted @2022-08-04 09:17 郑瀚Andrew 阅读(152 ) 评论(…

    技术杂谈 2023年5月31日
    0106
  • java Script

    JavaScript JavaScript(简称”JS”)是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言,弱类型,脚本语言 三大部分 核心(E…

    技术杂谈 2023年6月21日
    0115
  • 标识符和关键字

    标识符 标识符是什么? 关键字 为编程文件取名时不能使用图中的关键字,否则会直接报错,根本没法儿写后续内容 Java的所有组成部分都需要名字。类名,变量名以及方法名都被称为标识符 …

    技术杂谈 2023年6月21日
    092
  • Java-Stream入门

    学习Stream的目的 函数式编程渐渐变成主流,而Stream是函数式编程的重点。 相对于传统的编程方式,代码更为简洁清晰易懂。 使得并发编程变得如此简单。 有效的避免了代码嵌套地…

    技术杂谈 2023年7月11日
    064
  • 树莓派初次开机配置教程

    树莓派初次开机配置教程 树莓派 背景故事 树莓派镜像烧录完成后,一堆配置步骤,应该如何选择呢?本教程一一给大家演示一遍。 准备工作 刷好镜像的SD卡 树莓派刷机烧录镜像可以参考我的…

    技术杂谈 2023年7月23日
    0111
  • SQL45 将titles_test表名修改为titles_2017

    本题链接本题省略表结构。需要用到RENAME TABLE子句,该子句可实现一或多个表名称的修改。子句语法为: RENAME TABLE tbl_name TO new_tbl_na…

    技术杂谈 2023年7月11日
    078
  • NLP知识总结和论文整理

    词向量 参考论文: Efficient Estimation of Word Representations in Vector Space CBOW (Continuous Ba…

    技术杂谈 2023年6月21日
    0105
  • 利用C#怎么获取 List集合中的重复值Linq操作

    跟大家聊聊有关利用C#怎么获取 List集合中的重复值,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 一、获取集合内重复值…

    技术杂谈 2023年5月31日
    0113
  • Windows下USB磁盘开发系列二:枚举系统中所有USB设备

    上篇 《Windows下USB磁盘开发系列一:枚举系统中U盘的盘符》介绍了很简单的获取系统U盘盘符的办法,现在介绍下如何枚举系统中所有USB设备(不光是U盘)。 主要调用的API如…

    技术杂谈 2023年5月31日
    093
  • CESIUM 原理 之 COMMAND拼接【转】

    VAO VAO(Vertext Array Object),中文是顶点数组对象。之前在《Buffer》一文中,我们介绍了Cesium如何创建VBO的过程,而VAO可以简单的认为是基…

    技术杂谈 2023年5月31日
    0121
  • 贪吃蛇项目的制作

    该项目是根据GUI编程学习所写,详细的学习课程可以参考狂神说老师的GUI课程:一小时开发贪吃蛇。 以下仅仅为简要说一下 逻辑,源码放在最后。 实现该项目总共用到三个类: Data数…

    技术杂谈 2023年7月25日
    0100
  • Linux中的fd

    Linux中的fd 起子 ​ 如果说系统学Linux,我其实没有这个经历,你问我xx环境在Linux内核某个发行版怎么配置,那我可能可以告诉你,但是你要问我很多kernel相关的内…

    技术杂谈 2023年7月11日
    096
  • solr英文使用的基本分词器和过滤器配置

    英文应用分词器和过滤器一般配置顺序 索引(index): 1:空格 WhitespaceTokenizer2:过滤词(停用词,如:on、of、a、an等) StopFilter3:…

    技术杂谈 2023年5月31日
    091
  • module federation

    webpack 5的新特性:module federation,微前端的一种形式。 参考:https://juejin.cn/post/7117055274682155038 Or…

    技术杂谈 2023年5月31日
    0105
  • Docker容器网络

    Docker容器网络 1、Docker容器网络 Docker在安装后自动提供3种网络,可以使用`docker network ls命令查看 [root@localhost ~]# …

    技术杂谈 2023年6月21日
    0116
  • NBA 2K23 Arcade Edition for Mac(篮球游戏)

    Original: https://www.cnblogs.com/aurora-123/p/16841256.htmlAuthor: 佛系女孩Title: NBA 2K23 Ar…

    技术杂谈 2023年7月11日
    091
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球