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…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
Windows 下端口占用排查与释放全攻略
Windows 下端口占用排查与释放全攻略 在开发和运维过程中,经常会遇到端口被占用的问题(如 8080、3306 等常用端口)。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口,帮助你高效解决此类问题。 一、准…...
从实验室到产业:IndexTTS 在六大核心场景的落地实践
一、内容创作:重构数字内容生产范式 在短视频创作领域,IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色,生成的 “各位吴彦祖们大家好” 语音相似度达 97%,单条视频播放量突破百万…...