MySQL-体系结构及授权管理

一、MySQL体系结构

1.1、mysql C/S模型

主要有两种连接mysql的方式:

  • 1)TCP/IP
  • 2)Socket

image

mysql -uroot -pmysql -h 10.0.0.51   #TCP/IP
mysql -uroot -pmysql -S /tmp/mysql.sock  #socket

1.2、mysql实例概念

image

分布式系统架构中会使用多实例:在一个系统上要起多个mysql。

mysqld守护进程+Master thread + worker thread +专用内存 ====>实例

实例+数据 ====>完整的数据库管理系统

多实例==完整的数据库管理系统*n

1.3、mysql工作过程

一条SQL语句的执行过程:select user,authentication_string,host from mysql.user;

image

1.3.1、连接层工作原理

(1) 提供连接协议 
	TCP/IP
	Socket
(2) 提供用户验证模块,加载授权表(mysql.user)
	user 
	password
(3) 提供连接线程
	负责:所有会话相关的命令接收及回馈

1.3.2、SQL层工作原理

#SQL语言种类
SQL :结构化的查询语言
DDL :数据定义语言
DCL :数据控制语言
DML :数据操作语言
DQL :数据查询语言
每一类语言,都有专门的模块来负责

#SQL层工作原理 
(1) 验证语句语法(SQL 92, 99,移植性),SQL_MODE
(2) 权限验证模块
(3) 语义验证模块
(4) 专用SQL解析器,SQL语句执行的方法(explain)
(5) 优化器:选择一个代价最低的执行计划
代价:CPU MEM IO
(6) 执行器:根据优化器的选择最优的执行计划,执行SQL语句,得出执行结果.
(7) 提供查询缓存:query_cache ,现在一般用redis产品替代query_cache
(8) 提供查询(变更类)日志:binlog 

1.3.4、存储引擎层工作原理

多种存储引擎,以插件形式支持.
不同存储引擎就像,不同的文件系统一样,提供不同数据存取模式.
InnoDB: 一张表就是一个文件, .ibd文件,一个段,区,数据页(16K)
存储引擎根据,SQL层提供的执行结果,结构化层表的形式,返回给用户

1.4、mysql逻辑结构

image

1.5、mysql物理结构

1)对于Linux操作系统来讲,他的物理层是同柱面的扇区.

2)对于MySQL来讲,他是Linux系统之上的应用软件,他的物理层就是文件系统上的特定格式的文件,由MySQL<存储引擎>决定的

对于myisam引擎来说:

  • user.frm :表的列结构
  • user.MYD :数据行记录
  • user.MYI :表的索引

对于innodb引擎来说:(注意:mysql8.0中已经没有.frm文件了

  • t1.frm :表列的结构
  • t1.ibd :数据行记录和索引

二、用户权限管理

2.1、mysql用户

2.1.1、用户作用

1)登录MySQL

2)管理MySQL对象(逻辑结构:库(库名字,库属性)、表(表名,表的数据行,表的列(列名字及列属性),表的属性))

2.1.2、用户定义

abc@'白名单'    密码123

白名单: 允许白名单中的IP,可以通过abc用户及123密码登录和管理MySQL

白名单支持定义的方式:

10.0.0.52 
10.0.0.%  ==> 10.0.0.1~10.0.0.254/24
10.0.0.5% ==> 10.0.0.50 ~10.0.0.59(包含10.0.0.5)
www.oldguo.com
%         
10.0.0.0/255.255.254.0

2.2、用户管理命令

2.2.1、创建用户

create user abc@'10.0.0.%'   identified  by  '123';
select user ,host  from mysql.user; 

2.2.2、删除用户

drop user abc@'10.0.0.%';

2.2.3、修改用户密码

alter user abc@'10.0.0.%' identified by '456';

2.3、权限管理

2.3.1、授权命令

grant all on *.* to wordpress@'%' identified by '123';

#注意8.0以后授权
create user wordpress@'10.0.0.%' identified by '123';
grant all on wordpress.* to wordpress@'10.0.0.%';

注意:all权限内容

INSERT,
SELECT, 
UPDATE, 
DELETE, 
CREATE,
DROP, 
RELOAD,
SHUTDOWN, 	
PROCESS, 
FILE, 
REFERENCES, 
INDEX, 
ALTER, 
SHOW DATABASES, 
SUPER, 	
CREATE TEMPORARY TABLES, 
LOCK TABLES, 
EXECUTE, 
REPLICATION SLAVE, 	
REPLICATION CLIENT, 
CREATE VIEW, 
SHOW VIEW, 
CREATE ROUTINE, 
ALTER 	ROUTINE, 
CREATE USER, 
EVENT, 
TRIGGER, 
CREATE TABLESPACE

#注意:all中不包含with grant option

2.3.2、权限作用对象

*.*     #表示的是,对整个数据库下的所有的表都授权.
abc.*   #表示的是,对abc下所有的表都授权
abc.t1  #只对 abc下的t1表进行授权

#8.0版本以前: 创建用户和授权都合到一起了,其实是不符合SQL92标准的
grant  all   on wordpress.* to wordpress@'10.0.0.%' identified by '123';

#标准的SQL92标准:
(1) 用户必须提前存在
(2) grant  all   on wordpress.* to wordpress@'10.0.0.%'

#8.0以后授权:
create user wordpress@'10.0.0.%' identified by '123';
grant all on wordpress.* to wordpress@'10.0.0.%';

2.4、生产授权

生产授权案例:
生产库: 
	管理员用户 : root身份
	授权管理员用户oldguo,实现从10网段登录管理	
	[(none)]>grant all on *.* to oldguo@'10.0.0.%' identified by '123';
	应用用户   :  实现业务功能的
沟通: 
		1.用户名,密码方面和开发沟通,一般情况下,用户名一般会应用有关,密码一般是有复杂度(三种字符以上复杂度)
		用户和密码信息会填写到应用的配置文件中
		2.确认从什么IP地址连接我的生产库,涉及到白名单问题,不能设置%
		3.业务功能都有需要哪些权限,确认最小权限.
			select , insert , update ,delete
			疑问: 
				1. delete危险怎么办?
				2. 表结构变化怎么办  ---->一般是DBA来做
		   user passwd   ip   权限

		4. 难缠开发,找你要root
		   走流程---->找领导邮件确认 

2.5、查看用户具备的权限

show grants for oldguo@'10.0.0.%';
show grants for root@'localhost';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION  #超级管理员

2.6、回收权限

revoke select on *.* from 'oldguo'@'10.0.0.%';

猜你喜欢

转载自www.cnblogs.com/hujinzhong/p/11625571.html