Day01-MySQL数据库介绍及部署
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 1000link/ether 00:0c:29:97:85:64 brd ff:ff:ff:ff:ff:ffinet 10.0.0.51/24 brd 10.0.0.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet6 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 MySQLLoaded: loaded (/etc/rc.d/init.d/mysqld; bad; vendor preset: disabled)Active: active (running) since Wed 2024-04-10 05:45:54 CST; 1s agoDocs: 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 - GPLCopyright (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 --listNote: This output shows SysV services only and does not include nativesystemd services. SysV configuration data might be overridden by nativesystemd 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.26Copyright (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 systemPLEASE 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_installationwhich 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.plcd mysql-test ; perl mysql-test-run.plPlease report any problems at http://bugs.mysql.com/The latest information about MySQL is available on the web athttp://www.mysql.comSupport MySQL by buying support/licenses at http://shop.mysql.comNew 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 - GPLCopyright (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、数据库服务多实例构建
相关文章:

Day01-MySQL数据库介绍及部署
Day01-MySQL数据库介绍及部署 1、数据库服务概述介绍1.1 企业中为什么需要数据库?1.2 数据库服务作用1.3 数据库服务分类 2、数据库服务安装部署2.1 数据库版本应用2.2 数据库服务程序下载2.3 数据库软件安装方式2.3.1 二进制安装步骤 3、数据库服务初始化介绍3.1 安…...

分享一个餐饮连锁店点餐系统 餐馆食材采购系统Java、python、php三个版本(源码、调试、LW、开题、PPT)
💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…...

解决跨域问题
第一种 让后端解决 第二种 通过代理来解决 首先可以先搭建后端接口 解决则参照vue-cli官网 首先新建一个vue.config.js文件 然后在项目的根目录新建两个文件夹 开发环境和生产环境 然后可以使用环境变量 系统会自动识别你是生产环境还是开发环境 然后在封装的axios中配…...

面试知识储备-多线程
1.线程的概念 线程使得在一个程序中可以同时执行多个任务。在 Java 应用程序中,多个线程可以同时运行,例如一个线程可以处理用户输入,另一个线程可以进行后台数据处理。 2.创建线程的方式 (1)重写thread类中的run方法…...

边缘计算插上AI的翅膀会咋样?
人工智能(Artificial Intelligence,AI)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学,是新一轮产业革命的重要驱动力量。2022年底发布的ChatGPT将人工智能技术上升到了一个新的高度。如今&#x…...

脉冲神经网络(SNN)论文阅读(六)-----ECCV-2024 脉冲驱动的SNN目标检测框架:SpikeYOLO
原文链接:CSDN-脉冲神经网络(SNN)论文阅读(六)-----ECCV-2024 脉冲驱动的SNN目标检测框架:SpikeYOLO Integer-Valued Training and Spike-Driven Inference Spiking Neural Network for High-performance …...

周报_2024/10/6
周报 时间 2024/9/30——2024/10/6 科研进展 写项目标书 实验了不同比例的标签加噪,模型效果随着标签加噪比例增加下降明显 下周计划 构造概念漂移数据集 借鉴其他文章中应对标签加噪的做法...

[深度学习][python]yolov11+bytetrack+pyqt5实现目标追踪
【算法介绍】 YOLOv11、ByteTrack和PyQt5的组合为实现高效目标追踪提供了一个强大的解决方案。 YOLOv11是YOLO系列的最新版本,它在保持高检测速度的同时,通过改进网络结构、优化损失函数等方式,提高了检测精度,能够同时处理多个…...

如何使用ssm实现基于Web的穿戴搭配系统的设计与实现+vue
TOC ssm784基于Web的穿戴搭配系统的设计与实现vue 第1章 绪论 1.1 研究背景 互联网概念的产生到如今的蓬勃发展,用了短短的几十年时间就风靡全球,使得全球各个行业都进行了互联网的改造升级,标志着互联网浪潮的来临。在这个新的时代&…...

JavaScript的设计模式
JavaScript设计模式是指在面向对象编程中,通过对类和对象进行抽象和泛化,提取出一些通用的设计思路和解决方案,以解决常见的软件设计问题。这些设计模式可以分为以下几类进行详细介绍: 一、创建型模式 1. 工厂模式(F…...

CIKM 2024 | 时空数据(Spatial-temporal)论文总结
CIKM 2024于10月21号-10月25号在美国爱达荷州博伊西举行(Boise, Idaho, USA) 本文总结了CIKM 2024有关时空数据(spatial-temporal data)的相关论文,主要包含交通预测,插补,事故预测,…...

计算机毕业设计 网上体育商城系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...

【数据结构】什么是哈希表(散列表)?
🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 📌哈希表的概念 📌哈希函数的构造方法 🎏直接定址法 🎏除留余数法 🎏平方取中法 🎏折叠法 &#x…...

【优选算法】(第二十三篇)
目录 快速选择算法(medium) 题目解析 讲解算法原理 编写代码 最⼩的k个数(medium) 题目解析 讲解算法原理 编写代码 快速选择算法(medium) 题目解析 1.题目链接:. - 力扣(L…...

Java.数据结构.HashSet
目录 1 基本概念 2 数据结构 3 常用操作 3.1 add(E e):向HashSet中添加元素 3.2 remove(Object o):从HashSet中移除元素 3.3 contains(Object o):判断HashSet中是否包含指定元素 3.4 size():返回HashSet中元素的个数 3.5 …...

关于懒惰学习与渴求学习的一份介绍
在这篇文章中,我将介绍些懒惰学习与渴求学习的算法例子,会介绍其概念、优缺点以及其python的运用。 一、渴求学习 1.1概念 渴求学习(Eager Learning)是指在训练阶段构建出复杂的模型,然后在预测阶段运用这个构建出的…...

sed 环境配置
参考项目来自这里: https://github.com/DCASE-REPO/DESED_task/tree/master/recipes/dcase2023_task4_baseline 1. 更新自己的 conda 避免一些包在旧的conda 环境中不存在; conda update conda使用conda 指定安装 对应版本 # CUDA 11.7 conda instal…...

黑神话:仙童,数据库自动反射魔法棒
黑神话:仙童,数据库自动反射魔法棒 Golang 通用代码生成器仙童发布了最新版本电音仙女尝鲜版十一及其介绍视频,视频请见:https://www.bilibili.com/video/BV1ET4wecEBk/ 此视频介绍了使用最新版的仙童代码生成器,将 …...

香江电器冲刺港交所上市:投资方提前撤资退出,因对赌协议而赔偿
近日,湖北香江电器股份有限公司(X.J. ELECTRICS (HU BEI) CO., LTD,下称“香江电器”)披露招股书,准备在港交所主板上市,国金证券为其独家保荐人。据贝多财经了解,香江电器曾计划在A股上市&…...

SpringSecurity实现自定义登录接口
SpringSecurity实现自定义登录接口 1、配置类 ConfigClazz(SpringSecuriey的) //首先就是要有一个配置类Resourceprivate DIYUsernamePasswordAuthenticationFilter diyUsernamePasswordAuthenticationFilter;/*SpringSecurity配置*/Beanpublic Securit…...

深度解析:Tkinter 界面布局与优化技巧
目录 深度解析:Tkinter 界面布局与优化技巧1. Tkinter 布局管理简介如何选择合适的布局管理器 2. pack() 布局管理详解嵌套布局 3. grid() 布局管理详解行列合并 4. place() 精确布局详解5. Tkinter 界面优化技巧自适应布局响应式布局资源管理 6. 项目示例ÿ…...

RCE_无回显
<aside> 💡 无回显 </aside> 写文件 **curl -o shell.php <http://xxxxxx.txt> wget -O shell.php <http://xxxxxx.txt>**请求带出 **curl <http://requestbin.net/r/1kiej1p1?pcat> /flag|base64 curl xxd -p /flag.xxxxxx.dnslo…...

文心一言智能体——绿色生活管家
最近,我在参加文心一言智能体大赛,这是我的智能体地址绿色生活管家,点击即可访问,大家可以去向我的智能体提问,提五个问题左右即可,真的非常感谢大家!好人一生平安🌼🌼&a…...

无人机(自组穿越机,航模)-芯片选型
飞控MCU: 型号尺寸子型号参数规格备注STM325*532位ARM Cortex-M3 CPU,72MHz,256KB Flash,20KB RAMLQFP 48F33*332位ARM Cortex-M4 CPU,72MHz,256KB Flash,40KB RAMMPU6050F45*532位ARM Cortex-M4 CPU&…...

[Cocoa]_[初级]_[绘制文本如何设置断行效果]
场景 在开发Cocoa程序时,表格NSTableView是经常使用的控件。其基于View Base的视图单元格模式就是使用NSCell或其子类来控制每个单元格的呈现。当一个单元格里的文字过多时,需要截断超出宽度的文字,怎么实现? 说明 Cocoa下的文本…...

IPS和IDS有啥区别
在网络安全领域,入侵检测系统 (IDS) 和入侵防御系统 (IPS) 是两种关键的技术,旨在保护网络免受各种威胁。这两者尽管名字相似,但在功能、配置、以及应用场景等方面都有着显著的差异。 入侵检测系统 (IDS) IDS 是一种被动监控系统,…...

c基础面试题
1.static和const的作用 static意为静态的,在C语言中可以修饰变量。如果是全局变量则只能在当前文件范围访问。 如果是函数内的局部变量则延长生命周期到整个程序。这意味着如果函数被多次调用,这个变量不会被重新初始化,而是保留上次调用结…...

选择最佳HR系统_6款产品评测与推荐
本文盘点了ZohoPeople、SAPSuccessFactors等六款主流HRMS,各系统各具特色,如ZohoPeople的全球化云管理、SAP的高定制化、Workday的实时数据分析等,适合不同规模企业需求,建议企业试用后决策。 一、Zoho People Zoho People 是一个…...

Latex技巧——参考文献中加入url和doi
有的期刊要求在参考文献里加入url或者doi, 例如下图中蓝色的字体。 在bib里编辑为下图中note行,也就是利用\href命令。\href后第一个{}内为网址,第二个{}为在参考文献中显示的蓝色文字。一般来说,两个{}内的文字相同。若遇到有些网址有下划线…...

安卓WPS Office v18.13.0高级版
软件介绍 WPS Office,金山WPS移动版,使用人数最多的移动办公软件套件。独有手机阅读模式,字体清晰翻页流畅;完美支持文字,表格,演示,PDF等51种文档格式;新版本具有海量精美模版及高…...