mysql 开发进阶篇系列 51 权限与安全(权限表user,db详细介绍 )
一.概述
mysql 的权限系统主要用来对连接到数据库的用户进行权限验证,以此来判断此用户是否属于合法用户,以及合法用户给予的相应数据库权限。下面将介绍权限系统的工作原理,以及将要熟练掌握账号的管理和使用方法(mysql版本 5.7)。
1.1 权限系统的工作原理
mysql 权限系统通过两个阶段进行认证:(1) 对连接的用户进行身份认证,合法的用户通过认证,不合法的用户拒绝连接;(2) 对通过认证的合法用户赋予相应的权限,用户可以在这些权限范围内对数据库做相应操作。
对于身份认证, mysql是通过ip地址和用户名联合进行确认的, 例如在mysql安装后默认创建的用户root@localhost表示用户root 只能从本地(localhost)进行连接才可以通过认证,此用户从其它任何主机上对数据库进行的连接都将被拒绝。 可以说同样一个用户名,如果来自不同的ip地址,则mysql将视为不同的用户。
如下图所示,mysql.user表中第一行的host列限定是localhost 代表本地:
mysql权限表在数据库启动的时候就载入内存了,当用户通过身份认证后,就在内存中进行相应权限的存取,这样,此用户就可以在数据库中做权限范围内的各种操作了。
1.2 权限表的权限介绍
在权限表存取的两个过程中,系统会用到"mysql" 数据库(安装mysql时被创建, 数据库名称叫" mysql ")中的user,host,db这3个最重要的权限表(在MySQL 5.6.7中删除了mysql.host表)。
表名 | user | db | 描述 |
用户列 | Host | Host | 允许用户登录所使用的IP |
User(对应的用户名称) | Db(对应的库名称) | ||
Password (5.7 版本 authentication_string) |
User | ||
权限列 | |||
Select_priv | Select_priv | 是否通过SELECT命令查询数据 | |
Insert_priv | Insert_priv | 是否通过INSERT命令插入数据; | |
Update_priv | Update_priv | 是否通过UPDATE命令修改现有数据 | |
Delete_priv | Delete_priv | 是否通过DELETE命令删除现有数据 | |
Create_priv | Create_priv | 是否可以创建新的数据库和表 | |
Drop_priv | Drop_priv | 是否可以删除现有数据库和表 | |
Reload_priv | 是否可以执行刷新和重新加载MySQL所用各种内部缓存的特定命令,包括日志、权限、主机、查询和表;重新加载权限表 | ||
Shutdown_priv | 是否可以关闭MySQL服务器 | ||
Process_priv | 是否可以通过SHOW PROCESSLIST命令查看其他用户的进程;服务器管理 | ||
File_priv | 是否可以执行SELECT INTO OUTFILE和LOAD DATA INFILE命令;加载服务器上的文件 | ||
Grant_priv | Grant_priv | 是否可以将自己的权限再授予其他用户 | |
References_priv | References_priv | 创建外键约束 | |
Index_priv | Index_priv | 是否可以创建和删除表索引;用索引查询表 | |
Alter_priv | Alter_priv | 是否可以重命名和修改表结构 | |
Show_db_priv | 是否可以查看服务器上所有数据库的名字,包括用户拥有足够访问权限的数据库 | ||
Super_priv | 是否可以执行某些强大的管理功能,例如通过KILL命令删除用户进程,使用SET GLOBAL修改全局MySQL变量,执行关于复制和日志的各种命令;超级权限 | ||
Create_tmp_table_priv | Create_tmp_table_priv | 是否可以创建临时表 | |
Lock_tables_priv | Lock_tables_priv | 是否可以使用LOCK TABLES命令阻止对表的访问/修改; | |
Execute_priv | Execute_priv | 是否可以执行存储过程 | |
Repl_slave_priv | 是否可以读取用于维护复制数据库环境的二进制日志文件;此用户位于主系统中,有利于主机和客户机之间的通信;主服务器管理 | ||
Repl_client_priv | 是否可以确定复制从服务器和主服务器的位置;从服务器管理 | ||
Create_view_priv | Create_view_priv | 是否可以创建视图 | |
Show_view_priv | Show_view_priv | 是否可以查看视图 | |
Create_routine_priv | Create_routine_priv | 是否可以更改或放弃存储过程和函数 | |
Alter_routine_priv | Alter_routine_priv | 是否可以修改或删除存储函数及函数 | |
Create_user_priv | 是否可以执行CREATE USER命令,这个命令用于创建新的MySQL账户 | ||
Event_priv | Event_priv | 是否能否创建、修改和删除事件 | |
Trigger_priv | Trigger_priv | 是否能否创建和删除触发器 | |
Create_tablespace_priv | 是否可以创建表空间 | ||
安全列 | |||
ssl_type | 支持ssl标准加密安全字段 | ||
ssl_cipher | 支持ssl标准加密安全字段 | ||
x509_issuer | 支持x509标准字段 | ||
x509_subject | 支持x509标准字段 | ||
资源控制列 | |||
max_questions | 每小时允许执行多少次查询 | ||
max_updates | 每小时可以执行多少次更新 | ||
max_connections | 每小时可以建立的多少次连接 | ||
max_user_connections | 单用户可以同时具有的连接数 | ||
安全列 | |||
plugin | 引入plugins以进行用户连接时的密码验证,plugin创建外部/代理用户 | ||
password_expired | 密码是否过期 (y 已过期) | ||
password_last_changed | |||
password_lifetime | |||
account_locked |
在这二个表中,最重要的是user表,其次是db表,在user表中通常使用最多的是用户列和权限列, 权限列分为普通权限和管理权限。
普通权限主要用于数据库操作,如seelct_priv,create_priv等。
管理权限主要用来对数据库进行管理的操作包括:Create_tablespace_priv ,Create_user_priv ,process_priv,
Reload_priv, Repl_client_priv , Repl_slave_priv , Show_db_priv ,Shutdown_priv ,super_priv。
最后权限表中权限列,对应的权限名(privilege)如下图所示(在下一章中有用GRANT赋予权限时会用到,例如权限列Delete_priv对应的是DELETE权限):
详细的权限文档参考:
https://dev.mysql.com/doc/mysql-security-excerpt/5.7/en/privileges-provided.html#priv_references
mysql 开发进阶篇系列 51 权限与安全(权限表user,db详细介绍 )的更多相关文章
- mysql 开发进阶篇系列 30 数据库二进制包(安装指定路径,目录介绍)
一. 指定路径 在上一篇里,二进制包解压后,全部放入在/usr/local/mysql目录下,在安装时指定了基础目录和数据目录, --basedir=/usr/local/mysql --datadi ...
- mysql 开发进阶篇系列 55 权限与安全(安全事项 )
一. 操作系统层面安全 对于数据库来说,安全很重要,本章将从操作系统和数据库两个层面对mysql的安全问题进行了解. 1. 严格控制操作系统账号和权限 在数据库服务器上要严格控制操作系统的账号和权限, ...
- mysql 开发进阶篇系列 47 物理备份与恢复(xtrabackup 的完全备份恢复,恢复后重启失败总结)
一. 完全备份恢复说明 xtrabackup二进制文件有一个xtrabackup --copy-back选项,它将备份复制到服务器的datadir目录下.下面是通过 --target-dir 指定完全 ...
- mysql 开发进阶篇系列 46 物理备份与恢复( xtrabackup的 选项说明,增加备份用户,完全备份案例)
一. xtrabackup 选项说明 在操作xtrabackup备份与恢复之前,先看下该工具的选项,下面记录了xtrabackup二进制文件的部分命令行选项,后期把常用的选项在补上.点击查看xtrab ...
- mysql 开发进阶篇系列 42 逻辑备份与恢复(mysqldump 的完全恢复)
一.概述 在作何数据库里,备份与恢复都是非常重要的.好的备份方法和备份策略将会使得数据库中的数据更加高效和安全.对于DBA来说,进行备份或恢复操作时要考虑的因素大概有如下: (1) 确定要备份的表的存 ...
- mysql 开发进阶篇系列 20 MySQL Server(innodb_lock_wait_timeout,innodb_support_xa,innodb _log_*)
1. innodb_lock_wait_timeout mysql 可以自动监测行锁导致的死锁并进行相应的处理,但是对于表锁导致的死锁不能自动监测,所以该参数主要用于,出现类似情况的时候等待指定的时间 ...
- mysql 开发进阶篇系列 10 锁问题 (相同索引键值或同一行或间隙锁的冲突)
1.使用相同索引键值的冲突 由于mysql 的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但如果是使用相同的索引键,是会出现锁冲突的.设计时要注意 例如:city表city_ ...
- mysql 开发进阶篇系列 53 权限与安全(账号管理的各种权限操作 上)
一. 概述 在了解前两篇的权限系统介绍后,这篇继续讲账号的管理,这些管理包括账号的创建,权限更改,账号删除等.用户连接数据库的第一步都是从账号创建开始. 1. 创建账号 有两种方法可以用来授权账号: ...
- mysql 开发进阶篇系列 54 权限与安全(账号管理的各种权限操作 下)
1. 查看权限 -- 如果host值不是%, 就要加上host值,下面查看bkpuser用户权限(6个权限, 限本地连接) SHOW GRANTS FOR bkpuser@localhost; -- ...
随机推荐
- 天兔(Lepus)数据库监控系统安装笔记
天兔(Lepus)数据库监控系统安装笔记 一.部署:本次操作系统:centos6.9 IP:192.168.153.145Lepus_v3.8_beta MySQL-python-1.2.5xampp ...
- C#动态设置webServer路径
using BD.SD_BJXYZY_PRO.WsbxService;using System;using System.Collections.Generic;using System.Linq;u ...
- JavaWeb(一)-Servlet知识
一.Servlet简介 Servlet是sun公司提供一门用于开发动态web资源的技术. sun公司在其API中提供了一个servlet接口,用户若想开发一个动态web资源(即开发一个java程序向浏 ...
- 【翻译】Flume 1.8.0 User Guide(用户指南) Processors
翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...
- JPA-04
一.JPQL JPA的查询语言(和SQL非常像,面向对象的查询语言) 有list集合可以用size看长度 分页:setFirstResult().setMaxResults(); 获取总条数:getS ...
- UE4行为树
这是 UE4中行为树编辑器 中可用的默认节点.取决于开发项目的不同(如射击游戏),可能会有更多节点.这里介绍五种行为树节点类型: 节点类型 描述 Composite(流程控制节点) 这种节点定义一 ...
- SSH通过密钥登陆
A服务器上操作 ssh-keygen -t rsa/dsa 后面所带参数rsa/dsa为加密方式,默认为dsa [root@localhost ~]# ssh-keygen Generating pu ...
- 项目小程序笔记-登录界面+FPGA管脚分配文件生成
声明:只是为了记录我遇到的一些问题,其中有我理解错的望勿参考. (1)qt designer设计好窗口 主窗口: 登录窗口: 关于qt designer的使用,大可以百度,很简单的,要注意的是部件的参 ...
- 关于IO的整理
我们知道io只是输入输出,在java语言中分为同步阻塞的BIO.同步非阻塞的NIO.异步非阻塞的AIO,现在的IO,一般是用作两种用途:一种是进行文件或者目录的操作(将不同的输入输出源抽象成流,所以流 ...
- django查询数据库无法过滤月份的解决
我试过,当settings里的:USE_TZ = False时也可以查询,但是数据库里的时间就会显示错的 解决方法是可以再终端输入 mysql_tzinfo_to_sql /usr/share/zon ...