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

news2024/11/7 21:44:42

在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 FollowSymLinks
    AllowOverride None
    Require 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 FollowSymLinks
    AllowOverride None
    Require 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 FollowSymLinks
    AllowOverride None
    Require 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 FollowSymLinks
    AllowOverride None
    Require 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.com
    ServerName site1.com
    ServerAlias www.site1.com
    DocumentRoot /var/www/site1.com/public_html
    ErrorLog /var/www/site1.com/logs/error.log
    CustomLog /var/www/site1.com/logs/access.log combined
</VirtualHost>

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

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

sudo systemctl enable site1.conf
sudo systemctl enable site2.conf

sudo 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.coloradmin.cn/o/2130194.html

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

相关文章

11Python的Pandas:可视化

Pandas本身并没有直接的可视化功能&#xff0c;但它与其他Python库&#xff08;如Matplotlib和Seaborn&#xff09;无缝集成&#xff0c;允许你快速创建各种图表和可视化。这里是一些使用Pandas数据进行可视化的常见方法&#xff1a; 1. 使用Matplotlib Pandas中的plot()方法…

YoloV10改进策略:BackBone改进|注意力改进|HCANet全局与局部的注意力模块CAFM|二次创新|即插即用

摘要 在CAFM模型的基础上进行二次创新,我成功地开发了一个性能显著提升的改进版模型。这一创新不仅优化了特征提取和融合的方式,还极大地提高了模型的泛化能力和准确性。为了验证其有效性,我们将这一改进应用于流行的目标检测算法YoloV10,并取得了显著的精度提升。这一改进…

【笔记】二维DP

文章目录 例题lanqiao1536数字三角形题目描述输入描述输出描述解题思路选取状态1代码1选取状态2代码2 lanqiao 389摆花题目描述输入描述解题思路输出描述代码 lanqiao3711选数异或题目描述输入描述输出描述解题思路 lanqiao3348可构造的序列总数 二维DP和普通DP本质相同&#x…

ios 用JXCategoryView 库实现tab滑动切换viewController

先Pod导入安装 pod JXCategoryView.m文件 // // OrderViewController.m // scxhgh2 // // Created by xmkjsoft on 2024/9/9. //#import "OrderViewController.h" #import "NavigationBarUtils.h" #import <JXCategoryView/JXCategoryView.h>#im…

《深度学习》深度学习 框架、动态展示即推导

目录 一、深度学习 1、什么是深度学习 2、特点 3、神经网络构造 1&#xff09;单层神经元 • 推导 • 示例 2&#xff09;多层神经网络 3&#xff09;小结 4、感知器 神经网络的本质 5、多层感知器 6、动态图像示例 1&#xff09;一个神经元 相当于下列状态&…

Redis入门 - C#|.NET Core封装Nuget包

经过前面章节的学习&#xff0c;可以说大家已经算Redis开发入门了。已经可以去到项目上磨砺了。 但是今天我还想和大家分享一章&#xff1a;封装自己的Redis C#库&#xff0c;然后打包成Nuget包。 首先要说明的是&#xff1a;不是要自己开发一个Redis客户端库&#xff0c;而是…

【Linux】Linux常见指令以及权限理解(下)

【Linux】Linux常见指令以及权限理解&#xff08;下&#xff09; &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;Linux&#x1f34a; &#x1f33c;文章目录&#x1f33c; 3. Linux下基本指令 3.9 mv 指令&#xff08;重点&#xff0…

借助ChatGPT撰写学术论文的10条规则

在撰写学术论文时,利用ChatGPT等人工智能工具可以显著提高写作效率和质量。以下是结合ChatGPT功能,为构建学术论文提出的10条规则,包括详细的专业说明和格式化的GPT提示词。 规则1:明确论文目标与核心问题 专业说明:确定研究的核心问题和目标是撰写论文的第一步。这有助…

如何通过可视化大屏,助力智慧城市的“城市微脑”建设?

在智慧城市的宏伟蓝图中&#xff0c;常常面临着一个关键挑战&#xff1a;如何确保这些理念和技术能够真正地惠及城市的每一个角落&#xff0c;每一个产业&#xff0c;以及每一位市民。问题的核心在于城市的具体应用场景&#xff0c;无论是横向的社区、园区、镇街、学校、酒店、…

PCB绘制

01-2-PCB的通孔、盲孔、埋孔_哔哩哔哩_bilibili 通孔&#xff1a;起点和终点肯定是最后一层和第一层 盲孔&#xff1a;起点永远是第一层&#xff08;或最后一层&#xff09;&#xff0c;终点肯定不是最后一层&#xff08;或第一层&#xff09; 埋空&#xff1a;起点和终点肯…

建筑物检测系统源码分享

建筑物检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

Python | Leetcode Python题解之第401题二进制手表

题目&#xff1a; 题解&#xff1a; class Solution:def readBinaryWatch(self, turnedOn: int) -> List[str]:ans list()for i in range(1024):h, m i >> 6, i & 0x3f # 用位运算取出高 4 位和低 6 位if h < 12 and m < 60 and bin(i).count("1&…

C# USB通信技术(通过LibUsbDotNet库)

文章目录 1.下载LibusbDotNet库2.引入命名空间3. 实例化USB设备4.发送数据5.关闭连接 1.下载LibusbDotNet库 右击项目选择管理NuGet程序包在弹出的界面中搜索LibusbDotNet&#xff0c;然后下载安装。 2.引入命名空间 using LibUsbDotNet; using LibUsbDotNet.Main;3. 实例化…

细数H.264 H.265 H.266区别

H.264、H.265&#xff08;HEVC&#xff09;和H.266&#xff08;VVC&#xff09;是三种不同的视频编码标准&#xff0c;它们在压缩效率、图像质量、支持的分辨率以及技术特性等方面存在显著差异。以下是对这三种编码标准的详细比较&#xff1a; 概述 H.264&#xff1a;也称为AV…

TCP全连接队列和tcpdump抓包

全连接队列 listen第二个参数 服务器在调用listen的时候&#xff0c;listen的第二个参数 1&#xff0c;就是TCP全连接队列的长度。 当客户端的连接进入established 状态后&#xff0c;如果服务器没有调用accept将连接取走&#xff0c;那么该连接就会待在TCP全连接队列中&a…

Edge浏览器设置夜间模式/深色模式

问题背景 普通白色背景感觉有点刺眼&#xff0c;想改成深色背景&#xff0c;但是默认的设置里面只能修改边框的颜色&#xff1a; 这里虽然设置界面和边框变成了黑色的&#xff0c;但是实际上打开网页还是白色的。 全局配置 在Edge浏览器打开edge://flags/&#xff0c;然后搜索D…

海垦集团养殖场分布式光伏发电项目中的案例分享

1客户需求 海南农垦集团&#xff0c;原海南省农垦总公司&#xff0c;是中央直属三大垦区之一。集团在海南有多个养殖场&#xff0c;包括红华养猪场、红华肉牛繁育场等&#xff0c;计划在这些养殖场的屋顶安装分布式光伏系统&#xff0c;用于自发自用和余电上网。红华养猪场和红…

基于ESP32S3的链接大语言模型对话模块

本实物模块从实物外观、模块组成、API申请及功能说明四部分来介绍这款基于ESP32S3的大语言模型对话模块。 1、实物外观 2、模块介绍 本硬件平台主要由三个模块组成&#xff0c;包括MAX9814录音模块、MAX98357音频功放模块和ESP32S3模块。如下图所示。 MAX9814录音模块&#…

mac 如何开启指定端口供外部访问?

前言 需要 mac 上开放指定端口&#xff0c;指定 ip 访问 解决 在 macOS 上开放一个端口&#xff0c;并指定只能特定的 IP 访问&#xff0c;可以使用 macOS 内置的 pfctl(Packet Filter)工具来实现。 1、 编辑 pf 配置文件&#xff1a; 打开 /etc/pf.conf 文件进行编辑。 可以使…

深度解读MySQL意向锁的工作原理机制与应用场景

意向锁 意向锁的概念 意向锁是InnoDB自动添加的一种锁&#xff0c;不需要用户去干预。 是数据库中的一种表级锁&#xff0c;一个事务要给一个资源加锁时&#xff0c;必须要先获取到对应类型的意向锁之后&#xff0c;才可以给这个资源加上自己想要的共享锁或者排他锁&#xff0…