【网络安全】服务基础第二阶段——第五节:Linux系统管理基础----Linux常见应用服务(Apache、数据库)

news/2024/9/17 14:26:43/ 标签: linux, 运维, 服务器

在Linux系统中,有许多常见的应用服务,它们用于执行各种任务,如网页托管、数据库管理、文件传输等。

  • Apache HTTP Server:用于托管网站和Web应用程序的Web服务器
  • Nginx:高性能的Web服务器和反向代理服务器,也常用于负载均衡。
  • MySQL/MariaDB:关系型数据库管理系统,用于存储和管理网站或应用程序的数据。
  • PostgreSQL:另一个强大的开源关系型数据库系统。
  • PHP服务器端脚本语言,主要用于Web开发,常与Apache或Nginx一起使用。
  • Python:一种通用编程语言,用于Web开发(如Django或Flask框架)和系统管理脚本。
  • Java:用于开发跨平台应用程序的编程语言,常用于大型企业级应用。
  • Tomcat:一个Servlet和JSP容器,用于运行Java Web应用程序

目录

一、LAMP

1.1 Apache环境搭建

1.1.1 apache下载及基础配置

1.1.2 Apache配置文件

​编辑1.1.3​​​​​​​​​​​​​​ Apache相关命令

1.1.4 Apache日志

1.1.5 Apache文件共享

1.1.6 Apache访问控制

1.1.7 Apache虚拟主机技术

1.2 MySQL环境搭建

1.2.1 MySQL下载及初始配置

1.2.2 MySQL使用

1.2.3 创建数据库

1.3.4 数据库查询

1.3.5 备份及还原数据库

1.3.6 数据库配置文件

1.3.7 数据库密码修改

1.3.8 数据库权限设置


一、LAMP

LAMP是一组常用于Web开发的开源软件的缩写,每个字母代表一个组件:

  • L:Linux操作系统,提供了项目部署时所需要的操作系统环境
  • A:Apache服务器:WEB应用程序的服务器,提供软件源文件的存放地,提供了程序访问时所需要的端口(接口)
  • M:MySQL数据库,提供项目或者程序在使用时数据的存储与解析的工作
  • P:PHP/Python开发语言,提供软件或者项目程序部署时所需要的开发环境的支持

概述:LAMP环境,主要给WEB端应用程序(各种类型的网站项目),提供了一个部署安装和使用的平台。

解释:可以理解为:只要把这四个软件安装完成,就形成了LAMP环境,环境有了之后,只需要把WEB应用程序对应的源文件,部署在apache服务器上即可,这样用户就可以直接访问该网站

1.1 Apache环境搭建
1.1.1 apache下载及基础配置

因为是软件的在线安装,需要借助yum命令来完成,最低版本的使用:centos7,所以在部署之前,先查看当前系统是否满足于环境的需求

我的网络yum源是华为云,阿里之类的网络源也满足要求

确保yum满足要求后,可以使用yum命令来下载http服务

yum -y install httpd
或
yum  install  httpd  httpd-devel 
//不仅安装apache,还把相关的开发工具包(devel)一并做安装

这里我用了第二条,一并安装相关开发工具包

有时启动apache服务可能会出现报错,这时候我们可以使用systemctl status httpd.service查看服务状态,这可能会提供一些关于为什么服务启动失败的线索


​​​​​​​根据systemctl status httpd.service 输出,Apache HTTP Server(httpd)服务启动失败,错误信息表明主要问题是80端口已经被占用。使用以下命令来查找哪个进程正在监听端口80:

sudo ss -tulnp | grep :80
或者使用netstat(如果已安装)
sudo netstat -tulnp | grep :80

现在让我们来了解apache的配置文件,使用rpm -ql httpd,我们可以看到一个conf文件夹,Apache HTTP Server 的配置文件主要包含在 httpd.conf 文件以及一系列包含文件中。这些文件定义了 Apache 的行为,包括服务器的行为、模块配置、虚拟主机设置、访问控制等

httpd.conf 文件由多个部分组成,包括:

  • 全局配置:设置全局服务器参数,如服务器根目录、监听端口、服务器令牌、文档根目录等。
  • 模块配置:加载和配置 Apache 模块,这些模块提供额外的功能,如 mod_rewritemod_sslmod_proxy 等。
  • 目录配置:使用 <Directory> 指令设置特定目录的访问权限和行为。
  • 虚拟主机:配置虚拟主机,允许单个 Apache 实例托管多个域名。
  • 访问控制:使用 <Limit><Require>AllowOverride 等指令控制访问。
  • 日志配置:设置日志文件的位置和格式。
  • 性能调整:调整服务器的性能参数,如 KeepAliveMaxClientsTimeout 等。
  • 安全设置:配置安全相关的设置,如 ServerTokensServerSignature

在rpm -ql httpd后继续往下翻,我们能看到许多特定文件夹。对于apache的目录和文件功能:

  • lib64:​​​​​​​lib64 目录通常用于存放 64 位系统的库文件。在 64 位 Linux 系统中,这个目录包含了系统运行所需的共享库,包括 Apache 模块和其他应用程序的依赖库。
  • /var/log/httpd:这是 Apache 服务器的日志文件存放目录。默认情况下,Apache 的访问日志和错误日志都会存放在这个目录下。例如,access_log 和 error_log 文件通常可以在这里找到。
  • /var/www/html:这是 Apache 的默认网站内容目录,也称为文档根目录。Web 服务器上的网页和资源通常存放在这个目录下,这些内容可以通过 Web 浏览器访问。

现在我们想要对httpd.conf 文件进行配置,但是当我们使用vim进入后,发现有太多的注释(#开头的语句),很影响我们配置文件,那现在我们需要对配置文件进行处理:

  • grep -v ^# /etc/httpd/conf/httpd.conf:这个命令用于过滤掉 httpd.conf 文件中以 # 符号开头的注释行^# 是一个正则表达式,匹配任何以 # 开头的行。
  • grep -v "#" /etc/httpd/conf/httpd.conf:这个命令同样用于过滤掉 httpd.conf 文件中的注释行,但它不区分 # 符号的位置,会移除所有包含 # 的行
  • grep -v "#" /etc/httpd/conf/httpd.conf | grep -v ^$:这个命令组合首先移除 httpd.conf 文件中的注释行,然后进一步移除所有空行^$ 匹配空行) 

特定配置指令:

  • ServerRoot "/etc/httpd"ServerRoot 指令定义了 Apache 服务器的根目录。这个目录包含了 Apache 的配置文件、证书、日志等。在这个例子中,ServerRoot 设置为 /etc/httpd,意味着所有相对路径的配置项都是基于这个目录
1.1.2 Apache配置文件

在去除掉了#的影响后,我们得到了一个简介美观的配置信息,现在我们来分析这些配置信息有什么作用

以下配置指令定义了 Apache 服务器的基本行为和设置(默认情况):

ServerRoot "/etc/httpd"  #软件的根目录(相对路径,就是以此开头)
----------------------
Listen 80    	#监听端口
----------------------
User apache	#启动用户
Group apache	#启动用户组
----------------------
ServerAdmin root@localhost	# 服务相关信息发邮件
----------------------
<Directory />AllowOverride none      #根路径权限设置	Require all denied
</Directory>
----------------------
documentRoot "/var/www/html"  #默认发布路径
----------------------
<Directory "/var/www/html">  #默认发布路径,功能限制Options Indexes FollowSymLinksAllowOverride NoneRequire all granted
</Directory>
------------------------
ErrorLog "logs/error_log" 	#错误日志
CustomLog "logs/access_log" combined
------------------------
  • ServerRoot:指定 Apache 软件的根目录。所有相对路径的配置项都是基于这个目录。在这个例子中,配置为 "/etc/httpd"
  • Listen:指定 Apache 服务器监听的端口。在这个例子中,服务器监听 80 端口,这是 HTTP 服务的默认端口。
  • UserGroup:指定启动 Apache 服务的用户和用户组。在这个例子中,使用 apache 用户和组。
  • ServerAdmin:指定服务器管理员的电子邮件地址,用于接收服务相关信息。
  • <Directory />:配置根目录(/)的访问权限。在这个例子中,不允许任何覆盖(AllowOverride none)并且拒绝所有访问(Require all denied)。
  • DocumentRoot:指定 Apache 服务器的默认发布路径,通常是 Web 内容的根目录。在这个例子中,设置为 /var/www/html
  • <Directory "/var/www/html">:配置默认发布路径的访问权限和行为。在这个例子中,允许索引视图(Indexes),允许跟踪符号链接(FollowSymLinks),并且授予所有访问权限(Require all granted)。
  • ErrorLogCustomLog:指定错误日志和访问日志的存放位置。在这个例子中,错误日志存放在 logs/error_log,访问日志存放在 logs/access_log,并且使用 combined 格式记录访问信息。

在所有配置步骤完成后,我们使用systemctl start httpd启动apache服务,现在访问127.0.0.1,会看到一个欢迎页面,除此之外无其他内容

这是因为现在在默认发布路径下还空无一物,我们进入到/var/www/html(默认发布路径)目录,ls查看,发现现在html目录下什么也没有,这也是为什么只能显示一个apache官方的测试网页。现在我们使用cp粘贴命令将一个我们想要的 index.html 页面粘贴到默认发布路径下,再次访问就得到了我们想要的新页面。


当然,此时用其他主机去访问本机的ip地址(前提是两台主机可以相互ping通),也可以访问到新的页面


1.1.3​​​​​​​​​​​​​​ Apache相关命令
  • 启动Apache服务器:sudo systemctl start httpd
  • 重启Apache服务器:sudo systemctl restart httpd
  • 停止Apache服务器:sudo systemctl stop httpd
  • 查看Apache服务器状态:sudo systemctl status httpd
  • 重新加载Apache配置文件:sudo systemctl reload httpd
  • 启用系统启动时自动启动:sudo systemctl enable httpd
  • 禁用自动启动:sudo systemctl disable httpd

有时候修改完配置文件后,需要重启服务才能生效,所以上述命令需要了解

1.1.4 Apache日志

安装配置好Apache后,我们来了解一下Apache的日志

首先我们进入/etc/httpd目录下,在这里我们可以看到一个“log”,浅蓝色代表链接(通过ll可以看到这个链接指向的是var下的位置),我们进入这个链接


在这里我们可以看到两个日志文件,access(访问日志)和error(错误日志),我们使用cat命令查看一下访问日志,可以看到很详细的访问记录,包括:

  • 客户端的IP地址
  • 请求发生的时间
  • 请求的类型(GET、POST)和请求的资源
  • HTTP状态码
  • 使用的浏览器等
1.1.5 Apache文件共享

Apache Web服务器可以通过配置文件设置来实现文件共享功能。这通常涉及到设置特定的目录权限、启用目录索引以及配置适当的访问控制。

首先,我们需要确定一个目录用于文件共享。这个目录可以是现有的,也可以是新创建的。例如,在本实验中我选择使用Apache的默认文档根目录/var/www/html

打开Apache的主配置文件(通常是 httpd.conf,位置可能因安装方式和操作系统而异),进行以下配置:

<Directory "/var/www/html">Options Indexes FollowSymLinksAllowOverride NoneRequire all granted
</Directory>
  • Options Indexes FollowSymLinks: 这一行启用了目录索引,允许用户浏览目录下的文件列表,并允许Apache跟随符号链接。
  • AllowOverride None: 禁止.htaccess文件覆盖此目录块的设置。
  • Require all granted: 允许所有用户访问此目录 

我将之前关于文件夹的配置打了3个#,以便后续需要时恢复。修改保存了配置文件后,需要重新加载Apache服务使其生效。可以通过直接重启或重新加载Apache配置使其生效

sudo systemctl reload httpd
或
sudo systemctl restart httpd

现在,我在html(默认发布路径)下再建一个文件夹,并将用户和密码拷贝到此文件夹下(这里做演示使用,现实中不推荐!)


现在在来访问 端口号/你新建的共享文件夹名称,发现可以共享访问了


当然,你现在访问shadow是拒绝访问的,这是因为,即使打开了共享,我们从web服务器是以匿名用户的身份访问的,而匿名用户是没有读写执行权限的


想要解决这个问题也很方便,我们已知,apache的默认启动用户和启动组名为apache,你并不需要直接赋予shadow文件Other用户rwx权限,可以将所属者root改为apache,再赋予权限chmod 700(只赋予所有者权限,在一定程度上保护了安全),这样就可以访问了(不推荐!!!)

1.1.6 Apache访问控制

Apache Web服务器提供了强大的访问控制功能,允许管理员限制对特定资源的访问。这些控制可以通过修改Apache的配置文件来实现。

关于访问控制,有一些常用的方法:其一就是基于IP地址的访问控制,这个设置仍是在.conf配置文件中修改,将Require修改为允许访问的ip地址(此方法不推荐),或者拒绝特定的IP地址。

<Directory "/var/www/html">Options Indexes FollowSymLinksAllowOverride NoneRequire ip 192.168.1.0/24
</Directory>
这将只允许192.168.1.0/24网段内的IP地址访问该目录
Require not ip 192.168.1.100

 当然,你也可以通过主机名来控制访问:

<Directory "/var/www/html">Options Indexes FollowSymLinksAllowOverride NoneRequire host example.com
</Directory>
这将只允许从example.com域名访问该目录

这里我们介绍另一种方法(其实大同小异)。首先我们需要安装Apache手册

sudo yum install httpd-manual

在手册中我们可以看到有两种方法执行访问控制,老版本他提示我们即将弃用,新版本本质上也是在配置文件中修改执行访问控制(新版本的RequireAll应该写在/var/www/html下)。

下载手册,之后重启apache服务,访问manual,可以看到手册页面,我们选择Access Control

将新版本中给我们的代码粘贴到conf配置文件中,例如在这里,我不想让我们kali机访问,那就把kali机的IP封掉,保存并重启apache服务。现在我们再用kali去访问是无法显示页面的。

1.1.7 Apache虚拟主机技术

 Apache 虚拟主机技术允许你在一台服务器上托管多个网站。每个网站都有自己的域名,但它们共享同一个 IP 地址。Apache 支持两种类型的虚拟主机:基于名称的虚拟主机(Name-Based Virtual Hosts)和基于 IP 地址的虚拟主机(IP-Based Virtual Hosts)。这里介绍基于名称的虚拟主机。

在基于名称的虚拟主机配置中,多个域名共享同一个服务器 IP 地址。Apache 通过 HTTP 请求中的 Host 头部来区分不同的网站。

首先我们来为每个网站创建一个独立的目录

sudo mkdir -p /var/www/site1.com/public_html
sudo mkdir -p /var/www/site2.com/public_html

编辑Apache配置文件,为每个网站添加一个<VirtualHost> 块。

<VirtualHost *:80>ServerAdmin webmaster@site1.comServerName site1.comServerAlias www.site1.comDocumentRoot /var/www/site1.com/public_htmlErrorLog /var/www/site1.com/logs/error.logCustomLog /var/www/site1.com/logs/access.log combined
</VirtualHost>

对第二个网站也是一样的操作,更改域名和路径

创建了新的配置文件后,确保启用他们,并重新加载Apache使配置生效

sudo systemctl enable site1.conf
sudo systemctl enable site2.confsudo systemctl reload httpd


现在虚拟主机配置完成了,可以通过site1和site2访问,当然,我没有在其发布路径下编写html文件所以展示了默认页面,如果你想进一步操作可以为站点配置不同的index.html

1.2 MySQL环境搭建
1.2.1 MySQL下载及初始配置

对于数据库,这里推荐MariaDB,MariaDB是MySQL的一个替代品,它与MySQL兼容,并且通常被认为在某些方面性能更好。CentOS 7默认仓库中包含MariaDB

使用yum命令安装Maria DB服务器

sudo yum install mariadb-server


​​​​​​​下载完成后启动服务,检查是否已经启动成功

sudo systemctl start mariadb

在首次启动MySQL或MariaDB时,通常需要设置root用户的密码。使用mysqladmin -u 用户名 -p password "新密码"来设置管理员和密码。这里你可以直接选择初始化MariaDB:

首先确保MariaDB服务已启动,运行初始化命令,运行 mysql_secure_installation 脚本来初始化数据库并增强安全性。这个脚本会引导你完成几个步骤

sudo mysql_secure_installation

首先要求你设置root密码。输入一个强密码并记住它。如果默认密码为空,你可以直接按回车键

脚本会询问你是否要删除匿名用户。建议选择 Yes

询问你是否禁止 root 用户远程登录。建议选择 Yes

脚本会询问你是否要删除测试数据库。建议选择 Yes

询问你是否要重新加载权限表。建议选择 Yes

初始化完成后,你可以验证是否成功。使用新设置的 root 密码尝试登录 MariaDB,输入密码后,如果成功登录,说明初始化成功

1.2.2 MySQL使用

进入MariaDB后,我们可以执行多种命令来对其进行操作

查看当前有多少库
> show databases;

MariaDB [(none)]>,这意味着你已经成功登录到 MariaDB 服务器,并且当前没有选中任何特定的数据库。上面的显示表示现在有三个数据库

  • information_schema:这是一个特殊的数据库,它包含了关于其他所有数据库的元数据(如表结构、列、索引等)。这是每个 MariaDB 服务器自带的系统数据库。
  • mysql:这也是一个系统数据库,用于存储用户账户、权限、MariaDB 的系统配置等信息。在初始化过程中,你可能会修改这个数据库中的信息,例如设置 root 密码、删除匿名用户等。
  • performance_schema:这是一个可选的系统数据库,用于收集和存储数据库性能相关的信息。它可以帮助数据库管理员监控和优化数据库的性能


进入库
> use mysql;

这表示你已经成功地切换到了 mysql 数据库。mysql 数据库是一个特殊的系统数据库,它存储了关于用户账户、权限、MariaDB 服务器的系统配置等信息


查看表
> show tables;


在 MariaDB 中,执行 SHOW TABLES; 命令会列出当前选定数据库(在这个例子中是 mysql 数据库)中所有的表。根据你提供的输出,mysql 数据库包含多个表,每个表都有特定的用途。

查看表内容
> select * from mysql.user \G;

查看表结构
desc user;

1.2.3 创建数据库

了解了基本的查看命令后,我们可以试着自己创建一个数据库

CREATE DATABASE JIUye;
//首先创建一个数据库,选择此数据库以便在其中创建表
USE JIUye;//创建一个简单的员工表
CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),position VARCHAR(100)
);//向其中插入数据
INSERT INTO employees (name, position) VALUES ('111', 'employer');
INSERT INTO employees (name, position) VALUES ('222', 'employee');

现在,我们就得到了一个员工表

如果我们要修改表结构,可以使用:

ALTER TABLE employees ADD COLUMN age INT;  //添加列
ALTER TABLE employees DROP COLUMN age;  //删除列
ALTER TABLE employees CHANGE old_column_name new_column_name INT;  //修改列名
ALTER TABLE employees MODIFY COLUMN name VARCHAR(150);  //修改数据类型

要更改表的数据内容,可以使用:

UPDATE employees SET position = 'xxx' WHERE name = 'xxx'; //更新数据
DELETE FROM employees WHERE name = 'xxx';  //删除数据
1.3.4 数据库查询

在上面我们一直使用* 来查,这表示查询所有内容,但有时候我们想要特定查询,那就需要下面的命令

如果你只对表中的特定列感兴趣,你可以指定列名,而不是使用星号。例如,如果你只想显示员工的名字和职位,可以执行:

SELECT name, position FROM employees;

你可以使用 WHERE 子句来过滤结果,只显示符合特定条件的记录。例如,如果你只想显示职位为“经理”的员工记录,可以执行:

SELECT * FROM employees WHERE position = 'employer';

此外,还可以选择从几行几列开始检索:

select name from userlist limit 0,2;
//这里的0,2表示从第0行开始检查,显示2列
1.3.5 备份及还原数据库

注意,备份数据库不是在mysql数据库里面运行的命令,首先我们退出数据库,在外面进行数据库备份。在外面备份好的位置可以看到一个备份文件。


 我们可以使用file命令查看一下备份出来的文件格式。

输出结果显示 JIUye.employees.sql 是一个 ASCII 文本文件。这意味着该文件是一个文本文件,可以用任何文本编辑器打开和编辑。这也就意味着我们可以直接在备份文件中添加一些信息,我们使用vim编辑器来添加一个用户

我们可以看到在备份文件中记录了我们对数据库的操作,现在如果我们想再添加一个“经理”,那我们就可以在insert语句后继续添加数据。

现在我们来还原数据库,使用命令导入备份文件

mysql -u root -p JIUye < /tmp/JIUye.employees.sql

现在,我们可以验证一下是否导入成功了,登陆我们的数据库,选择JIUye,然后使用SELECT * FROM your_table_name;来查询一下数据是否符合预期

可以看到,多了一个“经理”,确实已经更新成功。

1.3.6 数据库配置文件

数据库的配置文件在/etc下,我们使用vim打开 my.cnf ,这就是数据库的配置文件

  • datadir=/var/lib/mysql:这行指定了数据库文件存储的目录。默认情况下,MariaDB/MySQL 将所有数据库文件存储在 /var/lib/mysql 目录下
  • socket=/var/lib/mysql/mysql.sock:这行定义了 Unix 套接字文件的路径,用于本地进程间通信。当客户端和服务器在同一台机器上时,它们可以通过这个套接字文件进行通信。
  • symbolic-links=0:这行表示禁用符号链接。出于安全考虑,建议关闭符号链接,因为它们可能会导致安全风险,例如允许访问不属于数据库文件的其他文件系统部分。
  • [mysqld_safe]:这是一个配置段,专门用于 mysqld_safe 脚本,该脚本用于启动数据库服务器。包括错误日志的路径等。
1.3.7 数据库密码修改

对数据库的密码修改需要注意以下几点:

  1. 首先必须是root用户
  2. 关闭mysql
  3. 以安全模式启动mysql

如果你忘记了数据库的密码,现在想要重新修改密码,应该怎么做?

首先我先停止掉mariadb的服务,以安全模式启动MariaDB,安全模式启动通常意味着跳过一些检查和加载的模块,你可以使用 --skip-grant-tables 选项来启动 

在安全模式下,你可以直接使用mysql客户端工具登陆到数据库,而不需要密码

mysql -u root

可以看到,此时我们可以直接使用mysql -u root登陆,不再需要输入密码了。使用 --skip-grant-tables 参数启动数据库时,你确实可以查看和修改数据库中的任何数据,但是这种状态下的数据库服务器是不安全的,因为任何能够连接到数据库的人都可以执行任何操作,包括删除数据或执行其他潜在的危险操作。

通常,我们只有在以下情况下才会使用 --skip-grant-tables 参数:

  • 重置忘记的密码:如果你忘记了 root 用户或其他用户的密码,可以使用这个参数启动数据库,然后重置密码。
  • 修复权限问题:如果权限表损坏或配置错误,可能需要以无权限检查的方式启动数据库来进行修复。
  • 恢复数据:在数据丢失或损坏的情况下,可能需要绕过权限检查来恢复数据。

在执行完必要的操作后,你应该立即关闭数据库服务器,并以正常模式重新启动,以恢复权限检查和保护数据库的安全。记住,以 --skip-grant-tables 参数启动数据库时,应该确保数据库不会暴露在公共网络中,以避免潜在的安全风险。

我们进入到mysql数据库,show tables,来查看mysql库中的所有表,可以看到在其中有一个user表,相关的密码和权限就存储在这里。

其实现在,我们可以使用SELECT Host, password, User FROM mysql.user;命令来查看user中的信息,如权限,密码等。或者直接将所有用户的所有信息列出来,我们可以在password列中看到加密后的密码,这里的密码是采用了哈希加密,我们可以在一些网站中破解这个加密的密码,如cmd5等,这里暂不演示


这里的host表示的是:允许哪些用户登陆,因为我之前在初始化的时候禁止了匿名用户登陆,所以这里经过筛选后只有三个用户可登陆。

当然,允许匿名用户登陆是不安全的,我这里没有匿名用户是因为我在初始化的时候禁止了匿名用户,如果你保持了数据库的初始配置,那你在上面的页面中应该还会有密码为空的用户,如果你想删除他们,可以使用命令

>delete from user where password='';
//删除空白账号

至此,其实你已经得到了旧的数据库密码,但如果你仍想执行更改密码的操作,可以使用

UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root' AND Host='localhost';对于MariaDB 10.1.20之后的版本使用
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

之后刷新权限使更改生效

FLUSH PRIVILEGES;

完成密码更改后,使用exit退出mysql客户端,停止安全模式下的MariaDB服务,重新启动

exit;
sudo systemctl stop mysql
sudo systemctl start mysql
1.3.8 数据库权限设置

1、要求对class1数据库中employees表,zhq用户具有查看权限,但是没有修改权限,同时要求tom用户必须只能从127.16.130.141(这里是我win2019的地址,你可以根据具体情况具体设置你允许登陆的地址)中登陆。登陆的时候密码是123456

首先我们以root用户登陆到MariaDB服务器,如果zhq用户还不存在,你需要先创建这个用户。可以使用如下命令:

CREATE USER 'zhq'@'127.16.130.141' IDENTIFIED BY '123456';

接下来我们使用GRANT 命令授予 zqh 用户对 class1 数据库中 employees 表的查看(SELECT)权限。之后同样刷新一下使权限生效

GRANT SELECT ON class1.employees TO 'zhq'@'172.16.130.141' IDENTIFIED BY '123456';


现在,在远程机器上,你可以尝试使用以下命令来验证 tom 用户的登录和权限:

mysql -u zhq -p -h 172.16.130.174

注意:当你执行这个命令时,系统会提示你输入密码。输入密码 123456 后,你应该能够登录到 MySQL/MariaDB 服务器

请注意,你提供的远程登录命令中的主机地址是 172.16.130.141,但是在授权命令中使用的主机地址是 172.16.130.174。确保 zhq 用户只能从 172.16.130.141 这个 IP 地址登录(从win2019登陆),如果你尝试从其他 IP 地址登录,包括 172.16.130.174,将会失败。

登录后,你可以尝试查询表来验证 zhq 用户是否具有查看权限:

USE class1;
SELECT * FROM employees;

能够成功执行查询,说明查看权限已经正确设置。如果尝试修改表(如 INSERTUPDATEDELETE)的操作失败,说明没有修改权限,这也是预期的结果。

之后如果想要撤销用户的权限,我们需要用到revoke命令,我们使用help revoke查看一下格式要求


根据它上面给我们的格式,我们来试着撤销用户的权限


或者,我们也可以使用非交互式命令(即不在mysql中撤销权限)

撤销用户权限后,我们应该还可以使用远程登录到数据库,但是已经没有查看的权限了。

如果想要删除用户,可以使用drop user命令

​​​​​​​

至此,关于数据库的知识大致讲解完毕

对于LAMP,还有php没有讲解,关于php和平台的整体搭建,我们留到下节再说。


http://www.ppmy.cn/news/1524733.html

相关文章

TimedRotatingFileHandler 修改 suffix 后 backupCount 设置失效无法自动删除文件

本文主要分析 TimedRotatingFileHandler 在实际使用中 backupCount 设置未生效的问题。源码分析显示&#xff0c;文件删除依赖于后缀 suffix 的正则匹配&#xff0c;如果自定义了 suffix 格式&#xff0c;必须同步更新 extMatch 的正则表达式&#xff08;保证正则表达式可以正常…

RK3568平台开发系列讲解(LCD篇)Framebuffer开发

🚀返回专栏总目录 文章目录 一、FrameBuffer 应用编程二、LCD 基础2.1、分辨率2.2、像素格式2.3、LCD 成像步骤2.4、LCD 屏幕时序2.4.1、行显示时序2.4.2、帧显示时序三、FrameBuffer 操作步骤四、LCD 应用编程实验沉淀、分享、成长,让自己和他人都能有所收获!😄 line di…

性能测试:Locust使用介绍(三)

配置 Locust的配置&#xff0c;可以通过三种方式进行。第一种是命令行执行选项&#xff0c;第二种是将配置写到环境变量中&#xff0c;第三种是通过配置文件进行配置。 命令行选项 locust --helpUsage: locust [options] [UserClass ...]常用选项:-h, --help 显示…

VSCode 创建Python 项目(最简单,最少步骤,无痛从pycharm迁移项目)

第一步&#xff1a;下载 下载地址&#xff1a;https://code.visualstudio.com/docs/?dvwin64user 第二步&#xff1a;配置 2.1&#xff1a;VsCode设置中文 按住键盘上的“CtrlShiftP”组合键&#xff0c;打开命令面板。 在命令面板中输入“Configure Display Language”。点击…

LSS可视化分析

1 完整 2 去掉plt.imshow(img_show) 3 去掉plt.axis(‘off’) 4 去掉plt.annotate(cams_text[img_id].replace(‘_’, ’ ), (0.01, 0.92), xycoords=‘axes fraction’)

【自然语言处理】第二章现代语言学基础

【自然语言处理】第二章现代语言学基础 文章目录 【自然语言处理】第二章现代语言学基础1. 语言学与人类的语言1.1 现代语言学的源起及学科分支概况1.2 人类语言的符号性与层级性2. 语言系统及其知识模型2.1 语音系统2.2 词汇系统2.3 句法系统2.4 语义系统2.5 语用系统3. 语言的…

1、https的全过程

目录 一、概述二、SSL过程如何获取会话秘钥1、首先认识几个概念&#xff1a;2、没有CA机构的SSL过程&#xff1a;3、没有CA机构下的安全问题4、有CA机构下的SSL过程 一、概述 https是非对称加密和对称加密的过程&#xff0c;首先建立https链接需要经过两轮握手&#xff1a; T…

SpringMVC基于注解使用:JSON

01-json处理--介绍 json数据格式回顾&#xff1a; 在pom.xml导入依赖 在web.xml里面导入配置文件 ResponseBody 注解是将返回值作为文本返回到客户端了而不是字符串了 当我们想返回bean对象的json数据的时候我们需要先导入jackson依赖在pom.xml里面 然后创建User类&#xff0c…

分享一个基于微信小程序的医院挂号就诊一体化平台uniapp医院辅助挂号应用小程序设计(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

前端开发的单例设计模式

一、什么是单例模式 单例模式&#xff08;Singleton Pattern&#xff09;是一种常见的设计模式&#xff0c;它确保在整个应用程序的生命周期中&#xff0c;一个类只能创建一个实例。无论你在代码的任何地方尝试创建该类的新实例&#xff0c;它都会返回已经存在的唯一实例。这在…

计算机网络分层结构解析:OSI与TCP/IP模型

文章目录 计算机网络分层结构解析&#xff1a;OSI与TCP/IP模型一、引言二、OSI七层模型1、模型介绍1.1、层次功能 2、模型特点 三、TCP/IP四层模型1、模型介绍1.1、层次功能 2、模型特点 四、总结 计算机网络分层结构解析&#xff1a;OSI与TCP/IP模型 一、引言 计算机网络的分…

【前端UI框架】VUE ElementUI 离线文档 可不联网打开

【前端UI框架】VUE ElementUI 离线文档 可不联网打开 Element - The worlds most popular Vue UI framework Element - The worlds most popular Vue UI framework 离线文档下载地址 https://download.csdn.net/download/G971005287W/89742895 文档制作 第一步: 克隆源代码 …

oceanbase(ob)基于备份集搭建备租户方式

一、搭建备租户方式&#xff08;基于备份的方式&#xff09; 注意事项&#xff1a;要有一个源端OB集群和目标端OB集群。 1、新建主租户&#xff08;如果原来有主租户可是省略&#xff09; #创建unit create resource unit ut_2c2g max_cpu2, memory_size2G, max_iops10000,l…

网络安全实训七(MSF与CS互相连接)

1 MSF连接CS 1.1 生成木马上传到/var/www/html中 1.2 开启apache服务 1.3 设置监听模组并运行 1.4 在靶机上打开网页运行木马 1.5 kali机中获取反弹的shell 1.6 运行CS服务器 1.7 windows端作为客户端连接CS 1.8 新建一个监听器 1.9 返回kali机中使用载荷注入模块&#xff0c;…

【Linux网络】详解TCP协议(1)

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux网络 &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解 TCP协议 的相关内容。 如果看到最后您觉得这篇文章写得不错&am…

前端开发的观察者模式

什么是观察者设计模式 观察者模式&#xff08;Observer Pattern&#xff09;是前端开发中常用的一种设计模式。它定义了一种一对多的依赖关系&#xff0c;使得当一个对象的状态发生改变时&#xff0c;其所有依赖对象都能收到通知并自动更新。观察者模式广泛应用于事件驱动的系…

如何在 Visual Studio Code 中反编译具有正确行号的 Java 类?

优质博文&#xff1a;IT-BLOG-CN 问题 我在 macOS 中使用 vscode 版本 1.92.2&#xff0c;并安装了Java 扩展包v0.29.0。当我打开command click或right click->Go to definition一个没有源代码的类时&#xff0c;vscode 会使用 FernFlower 反编译器打开 .class 文件。但…

python-古籍翻译

题目描述 小理跑到外星人的图书馆去读书。有一本外星古籍&#xff0c;里面的内容是用八进制写成的&#xff1b;但小理只能处理十六进制的数据。请你帮忙写一个翻译软件&#xff0c;帮小理把八进制串翻译成十六进制串。 输入 仅一行&#xff0c;一个八进制字符串 s&#xff0…

Linux下进程间的通信--信号量

前言&#xff1a; 资源竞争&#xff1a; 资源竞争&#xff08;Race Condition&#xff09;是多线程或多进程环境中的一种常见问题&#xff0c;它发生在多个进程或线程并发访问和修改同一资源&#xff08;如内存位置、文件、数据库记录等&#xff09;时&#xff0c;而最终结果…

Aloudata AIR :国内首个 Data Fabric 逻辑数据平台

AIR 的寓意是“极致轻盈的数据交付”&#xff1a;A - Adaptive 自适应&#xff0c;I - Integration 集成&#xff0c;R - Resilience 弹性 News&#xff1a;Aloudata AIR 发布 作为国内首个 Data Fabric 逻辑数据平台&#xff0c;Aloudata AIR 通过自研的数据虚拟化技术&#…