Day01-MySQL数据库介绍及部署

news2024/11/27 14:47:47

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. 可以实现数据稳定存储(安全性)
  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 71 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 表示初始化成功

image-20240410062811164

image-20240410062834486

image-20240410062754556

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 —权限解释说明

常用权限信息:参考截图

核心重要授权权限总结:

序号权限授权资源解释说明
01SelectTables可以对表进行操作,查询表中数据信息
02InsertTables可以对表进行操作,插入表中数据信息
03UpdateTables可以对表进行操作,修改表中数据信息
04DeleteTables可以对表进行操作,删除表中数据信息
05AlterTables可以对表进行操作,修改表中结构信息(元数据-属性)
06IndexTables可以对表进行操作,删除或创建表中的索引信息
07CreateDatabases,Tables可以对表和库进行操作,用于创建数据库和表信息
08DropDatabases,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、数据库服务授权表介绍

授权表有什么用:可以核实用户身份(做验证),可以核实用户权限 随便登录

常见的授权表信息说明:

序号授权表名称解释说明
01user主要用于存储用户、主机域、密码、加密插件等信息,同时还存储了*.*级别的权限(全局权限)
02db主要用于存储用户、主机域等信息,同时还存储了单库级别的权限(局部权限)
03tables_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、数据库服务多实例构建

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2189880.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《15分钟轻松学 Python》教程目录

为什么要写这个教程呢&#xff0c;主要是因为即使是AI技术突起的时代&#xff0c;想要用好AI做开发&#xff0c;那肯定离不开Python&#xff0c;就算最轻量级的智能体都有代码块要写&#xff0c;所以不一定要掌握完完整整的Python&#xff0c;只要掌握基础就能应对大部分场景。…

react-问卷星项目(6)

实战 React常用UI组件库 Ant Design国内最常用组件库&#xff0c;稳定&#xff0c;强大Material UI国外流行TailWind UI 国外流行&#xff0c;收费 Ant Design 官网地址 这一章基本内容就是使用UI重构页面&#xff0c;也没有什么知识点&#xff0c;直接上代码 下载 npm ins…

git diff 查看到一行变动,但是目测无差异怎么办?

1. 目测无变化 直接用 git diff main.js 提示有一行变动&#xff0c;但是目测看不出来差异。 结果如图&#xff1a;up panel. 2. 大概是空格的问题&#xff0c;使用参数 --ws-error-highlightall $ git diff --ws-error-highlightall main.js结果如图: down panel.

【LeetCode: 19. 删除链表的倒数第 N 个结点 | 链表 + 快慢指针】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

大学生就业桥梁:基于Spring Boot的招聘系统

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…

【操作系统】引导(Boot)电脑的奇妙开机过程

&#x1f339;&#x1f60a;&#x1f339;博客主页&#xff1a;【Hello_shuoCSDN博客】 ✨操作系统详见 【操作系统专项】 ✨C语言知识详见&#xff1a;【C语言专项】 目录 什么是操作系统的引导&#xff1f; 操作系统的引导&#xff08;开机过程&#xff09; Windows操作系…

JavaScript-下篇

上篇我们学习了&#xff0c;一些基础语法和函数&#xff0c;现在我们学习下篇&#xff0c;主要包括,对象和事件。而对象又包括&#xff0c;数组Arrays&#xff0c;String字符串&#xff0c;BOM&#xff0c;DOM等 JS对象 Arrays数组 数组是一种特殊的对象&#xff0c;用于存储…

【多线程】多线程(8):单例模式:阻塞队列

【阻塞队列】 阻塞队列是在普通的“先进先出”队列的基础上&#xff0c;做出了扩充&#xff0c;可以组成「生产者消费者模型」 1.线程安全性 标准库是原有的队列Queue和其子类&#xff0c;默认都是“线程不安全的”&#xff0c;而阻塞队列是“线程安全的” 2.具有阻塞特性 …

【pytorch】张量求导3

再接上文,补一下作者未补完的矩阵运算的坑。 首先贴一下原作者的图,将其转化为如下代码: import torch import torch.nn as nn import torch.optim as optim# 定义一个简单的两层神经网络 class TwoLayerNet(nn.Module):def __init__(self):super(TwoLayerNet, self).__in…

Markdown 语法详解大全(超级版)(二)

Markdown 语法详解大全(超级版)&#xff08;二&#xff09; Markdown 语法详解大全(超级版)&#xff08;一&#xff09; Markdown 语法详解大全(超级版)&#xff08;二&#xff09; Markdown 语法详解大全(超级版)&#xff08;三&#xff09; &#xff08;歌词节选&#xff09…

Ubuntu 中 Redis ,MySQL 基本使用

1、Redis &#xff08;1&#xff09;启动Redis 服务端客户端命令 服务端 ps aux | grep redis 查看redis服务器进程 sudo kill -9 pid 杀死redis服务器 sudo redis-server /etc/redis/redis.conf 指定加载的配置文件客户端 连接redis&#xff1a; redis-cli运⾏测试命令&am…

C++结构体定义和创建

// // Created by 徐昌真 on 2024/10/5. // #include <iostream> using namespace std;int main() {//结构体的定义 struct 结构体名字 { 结构体成员名字 }struct Book{string name;double price;int value;}java; //java是创建的结构体//创建结构体//这是第一种方式Boo…

目标检测 DAB-DETR(2022)

文章目录 前言Query是什么&#xff0c;Detr收敛速度慢的原因是什么&#xff1f;改进策略位置先验和模型框架设置温度系数 前言 本文认为原始的Detr系列论文中&#xff1a;可学习的object queries仅仅是给model预测box提供了锚点&#xff08;中心点&#xff09;信息&#xff0c…

SpringBoot环境下古典舞交流平台的快速开发

第三章 系统分析 3.1 可行性分析 需要使用大部分精力开发的古典舞在线交流平台为了充分降低开发风险&#xff0c;特意在开发之前进行可行性分析这个验证系统开发是否可行的步骤。本文就会从技术角度&#xff0c;经济角度&#xff0c;还有操作角度等进行综合阐述。 3.1.1技术可行…

Python案例--三数排序

一、引言 在信息爆炸的时代&#xff0c;我们每天都会接触到大量的数据。无论是工作中的报表、学习中的数据集&#xff0c;还是日常生活中的购物清单&#xff0c;数据的有序性对于提高效率和决策质量都至关重要。排序算法作为数据处理的基础工具&#xff0c;其重要性不言而喻。…

日记学习小迪安全27

感觉复制粘贴没有意思&#xff0c;而且还有点浪费时间&#xff0c;主要是学习&#xff0c;不是复制&#xff0c;那就复制别人的吧 第27关就参考这篇文章吧&#xff0c;以下大部分内容都是参考以下文章&#xff08;侵权删除&#xff09; 第27天&#xff1a;WEB攻防-通用漏洞&a…

芯片录-低压差线性稳压器AZ1084D-ADJE1失效记录与原理分析

背景 最近主板坏了&#xff0c;现象是主机不停重启&#xff0c;USB设备LED灯一会儿亮&#xff0c;一会儿灭。经过一些分析和定位&#xff0c;通过测温发现主板上AZ1084D-ADJE1芯片高达91摄氏度&#xff0c;进一步测量该芯片的输出引脚和接地引脚短路&#xff0c;初步推测某些原…

Shell-使用函数

在 Shell 脚本中&#xff0c;函数是由一段代码定义的&#xff0c;可以被重复调用。Shell 函数的定义和调用相对简单&#xff0c;并且它支持参数传递和返回值。错误处理在 Shell 中也非常重要&#xff0c;通常通过检查返回的状态码来判断是否有错误发生。 1.Shell 函数的定义和…

构建高效招聘流程:Spring Boot大学生就业系统

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…

28 基于51单片机的两路电压检测(ADC0808)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;通过ADC0808获取两路电压&#xff0c;通过LCD1602显示 二、硬件资源 基于KEIL5编写C代码&#xff0c;PROTEUS8.15进行仿真&#xff0c;全部资源在页尾&#xff0c;提供…