Day01-MySQL数据库介绍及部署
- 1、数据库服务概述介绍
- 1.1 企业中为什么需要数据库?
- 1.2 数据库服务作用
- 1.3 数据库服务分类
- 2、数据库服务安装部署
- 2.1 数据库版本应用
- 2.2 数据库服务程序下载
- 2.3 数据库软件安装方式
- 2.3.1 二进制安装步骤
- 3、数据库服务初始化介绍
- 3.1 安全模式初始化
- 3.2 非安全模式初始化
- 3.3 知识点补充:非安全模式设置管理员密码
- 3.3.1 设置密码方式一:没有密码设置密码
- 3.3.2 设置密码方法二:修改密码信息
- 3.3.3 设置密码方法三:忘记密码进行密码重置
- 4、数据库服务用户管理
- 4.1 创建用户 useradd == create
- 解决数据库加密问题:客户端 -- 服务端
- 4.2 查看用户 id == select
- 4.3 删除用户 userdel == drop
- 4.4 修改用户 usermod == alter
- 补充:8.0版本与之前数据库版本 用户管理区别
- 5、数据库服务授权管理
- 6、数据库服务授权表介绍
- 6.1 设置角色功能实践
- 7、数据库服务密码重置实践
1、数据库服务概述介绍
1.1 企业中为什么需要数据库?
数据:图片 文字 视频 用户名 密码 代码信息(html php jar)地址 人类识别 – 保存
数据:二进制信息 – 保存 --磁盘
人类可识别信息 - DBMS(数据库管理系统)- 二进制 -磁盘(颗粒-正负极)
DBMS分类:
RDBMS(关系型数据库软件):主流核心使用数据库软件
NoSQL(非关系数据库软件):辅助数据库软件程序
DDBMS(分布式数据库软件):解决海量数据存储与管理(NewSQL)
1.2 数据库服务作用
- 可以实现数据稳定存储(安全性)
- 可以分析管理数据信息(数据分析查询) 注册 – 数据库识别 – 二进制 – 磁盘
1.3 数据库服务分类
第一代数据库产品:实现数据整合
01 关系型数据库:二维表结构数据库 == excel
DBMS(管理系统)
库
表
字段/记录
代表产品:MySQL Oracle Mariadb 10.x SQLserver(国企 校园)PostgreSQL(PGSQL)海量数据存储场景–金融行业
第二代数据库产品:实现数据拆分 解决并发压力
02 非关系型数据库:提高数据存储和读取效率(内存存储数据) 辅助关系型数据库,解决高并发访问问题
key value 键值对 抖音/B站 – 点赞:1000 收藏数量 100
代表产品:Redis mongdb(文档型数据库==关系型数据库?) memcache ES(日志信息存储)
第三代数据库产品:实现业务整合
03 新型数据库 :业务整合 分布式(垂直分布式 水平分布式)
代表产品:OceanBase TiDB PolarDB
数据信息来源参考:https://www.modb.pro/dbRank
数据信息来源参考:https://db-engines.com/en/ranking
数据信息来源参考:https://www.itdks.com/
2、数据库服务安装部署
2.1 数据库版本应用
面试题目:你之前用的数据库服务是什么 用的是什么版本?
MySQL数据库产品:Oracle MySQL Mariadb MySQL 5.5+ 10的版本 Percona MySQL(工具 辅助管理数据库)
MySQL数据库版本:
大版本
5.5 5.5 (GA最新版本) 5.5.62 18年发布
5.6 5.6 (GA最新版本) 双数版本 5.6.26 38 40
5.7 5.7
PS:以上三个版本,都已停止更新维护
8.0
C版: 社区版 – 免费版
E版: 企业版 – 盈利版
CLuster:集群版 – 收费版
PS:主要讲解8.0.26 MySQL
2.2 数据库服务程序下载
官网下载:http://www.mysql.com
查看系统C语言版本
[root@localhost ~]# getconf GNU_LIBC_VERSION
glibc 2.17
[root@localhost ~]# ldd --version
ldd (GNU libc) 2.17
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
2.3 数据库软件安装方式
- 方式一:利用yum进行安装 更新yum源 https://dev.mysql.com/downloads/ 最新版本 依赖于网络 下载最新
- 方式二:利用rpm进行安装 离线安装 rpm -ivh xxx.rpm 依赖
- 方式三:源码安装 编译安装 cmake – make && make install 用于数据库二次开发 30-1小时
- 方式四:二进制安装 解压完了 依赖需要解决 (主推)
2.3.1 二进制安装步骤
01 系统环境准备:
# 虚拟主机环境:1核 2G 100G
# 系统配置说明:
# 网络地址:10.0.0.51
# 主机名:db01
# 域名解析:10.0.0.51 db01
# 关闭防火墙
# 关闭selinux
# 卸载系统mariadb程序:yum remove `rpm -qa|grep mariadb`
# 解决软件依赖:yum install -y libaio-devel
02 上传部署软件:
# 确认操作系统数据库服务安装环境
[root@db01 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
-- 查看操作系统的版本信息
[root@db01 ~]# ip address show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:97:85:64 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.51/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::ab2a:fb93:6cca:3ecd/64 scope link noprefixroute
valid_lft forever preferred_lft forever
-- 查看操作系统的网卡地址
[root@db01 ~]# cat /etc/hosts
...省略部分信息...
10.0.0.51 db01
-- 查看系统本地域名解析信息
[root@db01 ~]# systemctl is-active firewalld
unknown
[root@db01 ~]# systemctl is-enabled firewalld
disabled
-- 查看防火墙服务是否关闭
[root@db01 ~]# getenforce
Disabled
-- 查看selinux安全策略是否关闭
[root@db01 ~]# rpm -qa|grep mariadb
mariadb-libs-5.5.68-1.el7.x86_64
[root@db01 ~]# yum remove -y mariadb-libs
-- 清楚系统自带的mariadb数据库服务相关的程序包
[root@db01 ~]# yum install -y libaio-devel
-- 安装数据库服务程序所需的依赖软件包
[root@db01 ~]# ln -s /usr/lib64/libncurses.so.6 /usr/lib64/libncurses.so.5
或者
[root@db01 ~]# yum install ncurses-compat-libs
-- 需要修改链接库信息(只有centos 8 系统才需要进行操作修改)
# 数据库服务程序详细安装过程
[root@db01 ~]# cd /usr/local/
[root@db01 local]# rz -y
-- 上传数据库程序软件包
[root@db01 local]# tar xf mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
-- 解压数据库服务软件程序压缩包
[root@db01 local]# ln -s mysql-8.0.26-linux-glibc2.12-x86_64 mysql
-- 创建数据库服务程序目录的软链接
[root@db01 local]# tail -1 /etc/profile
export PATH=/usr/local/mysql/bin:$PATH
[root@db01 local]# source /etc/profile
-- 配置数据库服务程序环境变量
[root@db01 local]# mysql -V
mysql Ver 8.0.26 for Linux on x86_64 (MySQL Community Server - GPL)
-- 可以获取数据库服务版本信息表示环境变量配置生效
03 初始化数据库
[root@db01 local]# useradd mysql
-- 创建数据库服务管理用户信息
[root@db01 local]# mkdir -p /data/3306/data /data/3306/logs
[root@db01 local]# chown -R mysql. /data/
-- 创建数据库服务相关目录并进行目录信息进行授权
进行初始MySQL数据库服务操作:(8.0版本数据库)
数据库初始化命令应用解读:
核心程序命令 | 初始化核心参数(不安全初始化) | 数据管理用户 | 核心程序路径 | 数据存放目录 |
---|---|---|---|---|
mysqld | –initialize-insecure | –user=mysql | –basedir=/usr/local/mysql | –datadir=/data/3306/data |
[root@localhost ~]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data
2024-04-09T21:25:07.719121Z 0 [System] [MY-013169] [Server] /usr/local/mysql-8.0.26-linux-glibc2.12-x86_64/bin/mysqld (mysqld 8.0.26) initializing of server in progress as process 1766
2024-04-09T21:25:07.739528Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-04-09T21:25:08.715486Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-04-09T21:25:09.521768Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
2024-04-09T21:25:09.522084Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
2024-04-09T21:25:09.548104Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
PS:只要初始化没有报错就是成功的
编写生成MySQL数据库配置文件:
[root@db01 ~]# cat > /etc/my.cnf <<eof
[mysql]
socket=/tmp/mysql.sock
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
eof
-- 创建数据库服务运行需要加载的my.cnf配置模板文件
启动运行MySQL数据库服务脚本:
# 查看数据库服务默认启动脚本文件
[root@db01 ~]# ls -l /usr/local/mysql/support-files/mysql.server
-rwxr-xr-x 1 7161 31415 10576 7月 1 2021 /usr/local/mysql/support-files/mysql.server
-- 数据库服务默认的启动脚本文件
# 设置数据库服务程序启动运行文件
[root@db01 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# 启动数据库服务程序利用脚本文件
[root@db01 ~]# /etc/init.d/mysqld start
[root@db01 ~]# service mysqld start
Starting MySQL.Logging to '/data/3306/data/db01.err'.
.. SUCCESS!
[root@db01 ~]# service mysqld stop
Shutting down MySQL.. SUCCESS!
-- 启动和停止数据库服务均成功
[root@db01 ~]# chkconfig --add mysqld
-- 设置数据库服务开机自动运行
# 启动数据库服务程序利用脚本文件 (systemd方式)
[root@db01 ~]# systemctl enable mysqld
mysqld.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig mysqld on
-- 将service管理服务方式转换为systemd管理服务方式
[root@xiaoQ-01 ~]# systemctl start mysqld
[root@xiaoQ-01 ~]# systemctl is-active mysqld
active
# 检查确认数据库服务是否启动成功
[root@xiaoQ-01 ~]# netstat -lntup|grep 3306
tcp6 0 0 :::33060 :::* LISTEN 67809/mysqld
tcp6 0 0 :::3306 :::* LISTEN 67809/mysqld
[root@xiaoQ-01 ~]# ps -ef|grep mysql
root 67663 1 0 01:04 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/3306/data --pid-file=/data/3306/data/xiaoQ-01.edu.pid
mysql 67809 67663 0 01:04 pts/0 00:00:01 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=xiaoQ-01.edu.err --pid-file=/data/3306/data/xiaoQ-01.edu.pid --socket=/tmp/mysql.sock
特殊说明:在启动mysql数据库服务时,可能看到33060端口信息,此端口信息主要实现mysqlx协议的通讯过程;
利用mysqlx协议可以实现利用mysql-shell功能组件,对数据进行key-value操作,即识别json文件信息,进行远程管理;
Port 3306 is the default port for the MySQL Protocol, which is used by the mysql client, MySQL Connectors, and utilities such as mysqldump and mysqlpump.
Port 33060 is the default port for the MySQL Database Extended Interface (the MySQL X Protocol).
The X Plugin can be disabled at startup by either setting mysqlx=0 in your MySQL configuration file, or by passing in either --mysqlx=0 or --skip-mysqlx when starting the MySQL server.
Alternatively, use the -DWITH_MYSQLX=OFF CMake option to compile MySQL Server without X Plugin.
参考链接:https://blog.csdn.net/michaelwoshi/article/details/107955539
数据库初始化过程完毕
间接加载
[root@localhost ~]# systemctl enable mysqld
mysqld.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig mysqld on
[root@localhost ~]# systemctl start mysqld
[root@localhost ~]# systemctl status mysqld
● mysqld.service - LSB: start and stop MySQL
Loaded: loaded (/etc/rc.d/init.d/mysqld; bad; vendor preset: disabled)
Active: active (running) since Wed 2024-04-10 05:45:54 CST; 1s ago
Docs: man:systemd-sysv-generator(8)
Process: 2323 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/mysqld.service
├─2334 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/3306/data --pid-fi...
└─2487 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/3306...
Apr 10 05:45:53 localhost.localdomain systemd[1]: Starting LSB: start and stop MySQL...
Apr 10 05:45:54 localhost.localdomain mysqld[2323]: Starting MySQL. SUCCESS!
Apr 10 05:45:54 localhost.localdomain systemd[1]: Started LSB: start and stop MySQL.
登录管理MySQL数据库服务程序
[root@db01 ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.26 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
MySQL数据库部署参考链接:https://www.cnblogs.com/oldboy666/p/15559963.html
实现数据库开机脚本自动运行
[root@localhost ~]# chkconfig --add mysqld
[root@localhost ~]# chkconfig --list
Note: This output shows SysV services only and does not include native
systemd services. SysV configuration data might be overridden by native
systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'.
To see services enabled on particular target use
'systemctl list-dependencies [target]'.
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@localhost ~]# /etc/init.d/mysqld start 放在 /etc/rc.local中
3、数据库服务初始化介绍
8.0 5.7 数据库初始化操作
3.1 安全模式初始化
mysqld --initialize – 可以利用随机密码登录 临时密码 具有四种密码复杂度 12位 rWjgD;Qdg2e9
说明:临时密码只能用户临时登录数据库,登录完毕需要重置密码,才能对数据库进行管理
[root@db01 ~]# mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data
2024-07-24T08:52:00.526156Z 0 [System] [MY-013169] [Server] /usr/local/mysql-8.0.26-linux-glibc2.12-x86_64/bin/mysqld (mysqld 8.0.26) initializing of server in progress as process 3151
2024-07-24T08:52:00.586830Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-07-24T08:52:01.124556Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-07-24T08:52:01.879799Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
2024-07-24T08:52:01.880322Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
2024-07-24T08:52:01.970658Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: rWjgD;Qdg2e9
[root@db01 ~]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/data/3306/data/db01.err'.
SUCCESS!
[root@db01 ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.26
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
mysql> alter user root@'localhost' identified by '123456';
Query OK, 0 rows affected (0.01 sec)
-- 修改临时密码
3.2 非安全模式初始化
mysqld --initialize-insecure – 可以免密登录
5.5 5.6 数据库初始化操作:
[root@localhost ~]# ./mysql56/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql56 --datadir=/data/3356/data
....
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/local/mysql56/bin/mysqladmin -u root password 'new-password'
/usr/local/mysql56/bin/mysqladmin -u root -h db01 password 'new-password'
Alternatively you can run:
/usr/local/mysql56/bin/mysql_secure_installation
which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.
See the manual for more instructions.
You can start the MySQL daemon with:
cd . ; /usr/local/mysql56/bin/mysqld_safe &
You can test the MySQL daemon with mysql-test-run.pl
cd mysql-test ; perl mysql-test-run.pl
Please report any problems at http://bugs.mysql.com/
The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com
New default config file was created as /usr/local/mysql56/my.cnf and
will be used by default by the server when you start it.
You may edit this file to change server settings
PS:确实是否会显示两个OK 表示初始化成功
3.3 知识点补充:非安全模式设置管理员密码
3.3.1 设置密码方式一:没有密码设置密码
在命令行设置:
mysqladmin password 'oldboy123'
or
mysqladmin -uroot -p password 'oldboy123'
在数据库中设置密码:SQL语句
alter user root@'localhost' identified by '123456';
3.3.2 设置密码方法二:修改密码信息
在命令行设置:
mysqladmin -uroot -poldboy123 password '123456'
在数据库中设置密码:SQL语句
mysql> alter user root@'localhost' identified by '123456';
-- 8.0 利用SQL语句设置用户密码
mysql> update mysql.user set authentication_string=PASSWORD('oldboy123') where user='root' and host='localhost';
-- 5.7 利用SQL语句设置用户密码
mysql> set password for 'oldboy'@'localhost'=PASSWORD('oldboy123');
-- 5.6 利用SQL语句设置用户密码
3.3.3 设置密码方法三:忘记密码进行密码重置
???
作业:
01 如何编写MySQL的systemctl启动文件;
4、数据库服务用户管理
学习数据库用户管理知识原因
- 用户登录数据库服务系统中(实现数据库服务登录)
- 用户管理数据库服务中对象(实现数据库对象管理)
4.1 创建用户 useradd == create
创建用户格式:'用户名称信息'@'白名单信息'
用户名称:创建用户名字
白名单信息:主机域信息
本地-localhost/127.0.0.1:
-- 只允许本地连接登录数据库
网段-10.0.0.0/24 10.% 172.16.% 182.168.10.%
-- 允许某个网段中的多个主机,均可远程登录
地址-192.168.10.13
-- 只允许某个主机可以远程登录
域名-oldboyedu
-- 允许某个主机可以远程登录(域名解析)
-- 允许远程登录数据库
create user oldboy@'10.0.0.%' identified by '123';
# 方式一:书写方法(企业常用)
root@'192.168.30.0/24'
root@'192.168.30.0/255.255.255.0'
-- 授权一个网段主机均可远程登录数据库服务,表示这个网段中192.168.30.1~192.168.30.254均可访问
-- 在数据库中识别默认掩码就是/24,其他掩码信息需要具体写明,需要注意特殊VLSM子网掩码需要长格式指明,不能简写***
# 方式二:书写方法(企业常用)
root@'192.168.30.%'
-- 授权一个网段主机均可远程登录数据库服务,表示这个网段中192.168.30.1~192.168.30.254均可访问
# 方式三:书写方法
root@'172.16.%'
-- 授权一个更大网段主机均可远程登录数据库服务,表示这个网段中192.168.0.1~192.168.255.254均可访问
# 方式四:书写方法
root@'%'
-- 授权任意主机都可以远程登录数据库服务
# 方式五:书写方法
root@'192.168.30.51' 1-254
-- 授权一个具体的主机可以远程登录数据库服务,表示这个主机192.168.30.51可以访问
root@'192.168.30.5%'
-- 授权多个具体的主机可以远程登录数据库服务,表示多个主机192.168.30.50~192.168.30.59均可以访问
解决数据库加密问题:客户端 – 服务端
-
方法一:升级客户端 客户端加密方式升级
-
方法二:降级服务端 服务端加密方式降级
查看8.0数据库 密码加密方式
show variables like ‘%auth%’;
早期默认加密方式:mysql_native_password
目前最新加密方式:caching_sha2_password
# 降级方式一:
create user oldgirl@'localhost' identified with mysql_native_password by '123';
# 降级方式二:
alter user 'oldboy'@'10.0.0.%' identified with mysql_native_password by '123';
# 降级方式三:全局修改
vim /etc/my.cnf
[mysqld]
default_authentication_plugin=mysql_native_password
# 重启数据库服务,使配置生效
# 检查确认
mysql> show variables like '%auth%';
+----------------------------------------+------------------------------+
| Variable_name | Value |
+----------------------------------------+------------------------------+
| default_authentication_plugin | mysql_native_password |
+----------------------------------------+------------------------------+
1 row in set (0.01 sec)
查看数据库用户密码信息:
select user,host,authentication_string,plugin from mysql.user;
4.2 查看用户 id == select
# 查看数据库所有用户信息:
select user,host from mysql.user;
# 查看当前登录系统的用户信息:
select user();
4.3 删除用户 userdel == drop
# 方式一:drop
drop user 'oldbaby'@'10.0.0.%';
# 方式二:delete 危险--有可能将全部用户删除
delete from mysql.user where user='oldboy' and host='10.0.0.%';
# 企业里:尽量不要删除用户,锁定用户==禁用
mysql> alter user oldgirl@'localhost' account lock; # 锁定
mysql> alter user oldgirl@'localhost' account unlock; # 解锁
4.4 修改用户 usermod == alter
# 修改用户密码
alter user oldboy@'10.0.0.%' identified with mysql_native_password by '123456';
补充:8.0版本与之前数据库版本 用户管理区别
-
区别一:数据库密码加密方式不同
8.0 caching_sha2_password
之前版本 mysql_native_password
-
区别二:新版数据库不能在授权时创建用户
# 之前数据库版本:
grant all on *.* to oldgirl@'localhost' identified by '123'
-- 一条命令,完成了用户创建,并授权操作
show grants for oldgirl@'localhost';
select * from mysql.user\G
# 目前数据库版本
mysql> grant all on *.* to oldboy@'localhost' identified by '123';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by '123'' at line 1
# 8.0版本有密码按上键调取不出来
create user oldboy@'localhost' identified by '123';
grant all on *.* to oldboy@'localhost';
5、数据库服务授权管理
授权管理作用:安全 区别用户能力
数据库中有什么权限:
show privileges; —查看所有权限信息
第一列:Privilege —所有权限信息
第二列:Context —权限操作对象
第三列:Comment —权限解释说明
常用权限信息:参考截图
核心重要授权权限总结:
序号 | 权限 | 授权资源 | 解释说明 |
---|---|---|---|
01 | Select | Tables | 可以对表进行操作,查询表中数据信息 |
02 | Insert | Tables | 可以对表进行操作,插入表中数据信息 |
03 | Update | Tables | 可以对表进行操作,修改表中数据信息 |
04 | Delete | Tables | 可以对表进行操作,删除表中数据信息 |
05 | Alter | Tables | 可以对表进行操作,修改表中结构信息(元数据-属性) |
06 | Index | Tables | 可以对表进行操作,删除或创建表中的索引信息 |
07 | Create | Databases,Tables | 可以对表和库进行操作,用于创建数据库和表信息 |
08 | Drop | Databases,Tables | 可以对表和库进行操作,用于删除数据库和表信息 |
说明:all privileges(all)包含查看的所有权限信息,但是唯独缺了Grant option,不能授权用户,此权限只能给root@local用户
PS:赋予用户所有权限,all=all privileges表示所有权限,但一个权限不会赋予Grant priv
To give to other users those privileges you possess 不允许给其他用户授权
皇帝–年羹尧(荣耀)–授权能力 玉玺
当创建出一个用户时,如果没有授权,也会有一个默认权限
mysql> create user oldboy@'10.0.0.%' identified by '123';
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for oldboy@'10.0.0.%';
+-------------------------------------------+
| Grants for oldboy@10.0.0.% |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `oldboy`@`10.0.0.%` |
+-------------------------------------------+
1 row in set (0.00 sec)
USAGE: No privileges - allow connect only -- 创建用户之后,默认权限只允许用户登录数据库
如何设置权限:授权
MySOL> grant all on 授权对象范围 to 权限赋予用户信息
MySQL> grant all on * . * to blog@"192.168.30.%';
授权 权限 库信息 表信息 用户 主机域
一般程序中,需要授权程序连接用户有:select insert update delete 博文–uri–数据库 blog.oldboy.com/xxx&id=02
如何回收权限:取消权限
mysql> revoke delete on *.* from oldbaby@‘192.168.30.%’;
回收权限
mysql> grant select,insert,update,delete on *.* to oldboy@'10.0.0.%';
Query OK, 0 rows affected (0.01 sec)
-- 创建授权
mysql> show grants for oldboy@'10.0.0.%';
+--------------------------------------------------------------------+
| Grants for oldboy@10.0.0.% |
+--------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO `oldboy`@`10.0.0.%` |
+--------------------------------------------------------------------+
1 row in set (0.00 sec)
-- 数据库服务用户权限授权成功
mysql> revoke delete on *.* from oldboy@'10.0.0.%';
Query OK, 0 rows affected (0.00 sec)
-- 数据库服务用户回收权限
mysql> show grants for oldboy@'10.0.0.%';
+-----------------------------------------------------------------+
| Grants for oldbaby@10.0.0.% |
+-----------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE ON *.* TO `oldboy`@`10.0.0.%` |
+-----------------------------------------------------------------+
1 row in set (0.00 sec)
-- 数据库服务用户权限回收成功
6、数据库服务授权表介绍
授权表有什么用:可以核实用户身份(做验证),可以核实用户权限 随便登录
常见的授权表信息说明:
序号 | 授权表名称 | 解释说明 |
---|---|---|
01 | user | 主要用于存储用户、主机域、密码、加密插件等信息,同时还存储了*.*级别的权限(全局权限) |
02 | db | 主要用于存储用户、主机域等信息,同时还存储了单库级别的权限(局部权限) |
03 | tables_priv | 主要用于存储用户、主机域等信息,同时还存储了单表级别的权限(局部权限) |
说明:以上授权表信息了解作用即可,不建议采用手工方式对授权表中的数据进行修改调整
知识点补充:8.0版本新的权限管理功能 权限角色管理 == 将相同权限的用户整合为一个组 == 系统用户组
之前的版本:在设置权限信息时,只能针对用户设置权限
www数据库 oldboy-增删改查.其它管理权限 oldgirl-增删改查.其它管理权限 oldbaby-增删改查.其它管理权限
创建角色信息:
CREATE ROLE 'admin', 'developer';
CREATE ROLE 'webapp'@'localhost';
6.1 设置角色功能实践
00 创建管理数据库信息
create database oldboy;
01 创建出角色组信息
create role oldboy_rw,oldboy_r;
02 设置角色的权限
mysql> grant select on oldboy.* to oldboy_r;
mysql> grant select,update,insert,delete on oldboy.* to oldboy_rw;
mysql> show grants for oldboy_r;
+----------------------------------------------+
| Grants for oldboy_r@% |
+----------------------------------------------+
| GRANT USAGE ON *.* TO `oldboy_r`@`%` |
| GRANT SELECT ON `oldboy`.* TO `oldboy_r`@`%` |
+----------------------------------------------+
2 rows in set (0.00 sec)
mysql> show grants for oldboy_rw;
+-----------------------------------------------------------------------+
| Grants for oldboy_rw@% |
+-----------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `oldboy_rw`@`%` |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `oldboy`.* TO `oldboy_rw`@`%` |
+-----------------------------------------------------------------------+
2 rows in set (0.00 sec)
03 创建用户信息
create user user01@'%' identified by '123';
create user user02@'%' identified by '123';
04 实现用户与角色关联
grant oldboy_r to user01@'%';
grant oldboy_rw to user02@'%';
05 激活角色功能
方式一:手动激活角色
set default role all to user01@'%';
set default role all to user02@'%';
-- 用管理员登录数据库,激活角色功能
select current_role();
-- 相应用户登录数据库,查看确认角色功能是否激活(有角色信息)
方式二:实现自动激活用户角色信息
set global activate_all_roles_on_login=on;
-- 临时配置,也可以将配置参数写入到配置文件中实现永久配置
具体操作演示过程:
# 指定用户操作特定数据库时,具有共性相同的权限:分为运维权限(rw) 分为开发权限(ro)
mysql>help create role;
-- 查看role创建的方法
# 创建指定的role信息
CREATE ROLE 'admin', 'developer';
CREATE ROLE 'webapp'@'localhost';
-- 创建role信息的语句结构信息,不加@信息表示角色白名单为%方式,实际还要根据具体用户定义
mysql> create role oldboy_rw,oldboy_r;
-- 创建两个不同的role信息
-- oldboy_rw: oldboy.* rw(select,update,insert,delete)
-- oldboy_r: oldboy.* r(select)
# 进行role权限信息设定
mysql> grant select on oldboy.* to oldboy_r;
Query OK, 0 rows affected (0.00 sec)
mysql> grant select,update,insert,delete on oldboy.* to oldboy_rw;
Query OK, 0 rows affected (0.00 sec)
# 将指定role信息与相应的用户信息进行捆绑
mysql> create user user01@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec)
mysql> create user user02@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec)
-- 创建需要捆绑role权限的用户信息
mysql> grant oldboy_r to user01@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> grant oldboy_rw to user02@'%';
Query OK, 0 rows affected (0.00 sec)
-- 实现不同的role信息与不同的用户进行捆绑
# 进行角色信息激活
# 方式一:手动激活角色
mysql> SET DEFAULT ROLE ALL TO 'lei_test'@'localhost';
mysql> set default role all to user01@'%';
mysql> set default role all to user02@'%';
-- 利用数据库管理员账号手工激活角色
mysql> select current_role();
+----------------+
| current_role() |
+----------------+
| `oldboy_r`@`%` |
+----------------+
1 row in set (0.00 sec)
-- user01登录数据库,会显示对应激活的角色信息
mysql> select current_role();
+----------------+
| current_role() |
+----------------+
| `oldboy_rw`@`%` |
+----------------+
1 row in set (0.00 sec)
-- user02登录数据库,会显示对应激活的角色信息
#方式二:实现自动激活用户角色信息
mysql> select @@activate_all_roles_on_login;
+-------------------------------+
| @@activate_all_roles_on_login |
+-------------------------------+
| 0 |
+-------------------------------+
1 row in set (0.00 sec)
mysql> set global activate_all_roles_on_login=on;
Query OK, 0 rows affected (0.00 sec)
mysql> select @@activate_all_roles_on_login;
+-------------------------------+
| @@activate_all_roles_on_login |
+-------------------------------+
| 1 |
+-------------------------------+
1 row in set (0.00 sec)
[root@db-01 ~]# mysql -uuser01 -p123 -h10.0.0.51
mysql> select current_role();
+----------------+
| current_role() |
+----------------+
| `oldboy_r`@`%` |
+----------------+
1 row in set (0.00 sec)
-- user01登录数据库,会显示对应激活的角色信息
[root@db-01 ~]# mysql -uuser02 -p123 -h10.0.0.51
mysql> select current_role();
+-----------------+
| current_role() |
+-----------------+
| `oldboy_rw`@`%` |
+-----------------+
1 row in set (0.01 sec)
-- user02登录数据库,会显示对应激活的角色信息
# 进行用户操作验证
mysql> select * from oldboy.t1;
+----------+
| name |
+----------+
| zhangsan |
| lisi |
+----------+
2 rows in set (0.04 sec)
mysql> insert into oldboy.t1 values ('xiaoQ');
ERROR 1142 (42000): INSERT command denied to user 'user01'@'10.0.0.51' for table 't1'
-- user01只读用户登录数据库,只能查看操作,不能进行其他操作
mysql> select * from oldboy.t1;
+--------+
| name |
+--------+
| oldboy |
| lisi |
+--------+
2 rows in set (0.00 sec)
mysql> insert into oldboy.t1 values ('xiaoQ');
-- user02读写用户登录数据库,可以进行其他操作任务
7、数据库服务密码重置实践
忘记密码如何登录数据库:(root用户密码忘记)
1)关闭数据库服务
systemctl stop mysqld
2)采用跳过授权表登录数据库
mysqld_safe --skip-grant-tables --skip-networking &
-- skip-grant-tables 表示忽略授权表启动
-- skip-networking 忽略网络通讯方式启动
# 进行测试服务是否启动
[root@oldboy ~]# ps -ef|grep mysql
3)进入数据库修改重置密码
mysql> alter user root@'localhost' identified by '123';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> flush privileges; -- 可以实现将内存信息同步到磁盘 实现磁盘数据加载到内存
-- 将授权表加载到内存中
-- 表示先将数据库服务授权表加载到内存中,也可以将内存中修改的授权信息存入到磁盘中
mysql> alter user root@'localhost' identified by '123';
-- 修改数据库服务用户密码信息
4)退出数据库并关闭服务
mysql> shutdown;
Query OK, 0 rows affected (0.01 sec)
mysql> 2024-04-14T10:12:41.461824Z mysqld_safe mysqld from pid file /data/3306/data/db01.pid ended
mysql> quit
Bye
[1]+ Done mysqld_safe --skip-grant-tables --skip-networking
# 重启
[root@db01 ~]# systemctl start mysql
5)测试密码信息
[root@db01 ~]# mysql -uroot -p123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.26 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
08、数据库服务连接管理
09、数据库服务应用配置
10、数据库服务多实例构建