在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应用程序
目录
[1.1 Apache环境搭建](#1.1 Apache环境搭建)
[1.1.1 apache下载及基础配置](#1.1.1 apache下载及基础配置)
[1.1.2 Apache配置文件](#1.1.2 Apache配置文件)
[编辑1.1.3 Apache相关命令](#编辑1.1.3 Apache相关命令)
[1.1.4 Apache日志](#1.1.4 Apache日志)
[1.1.5 Apache文件共享](#1.1.5 Apache文件共享)
[1.1.6 Apache访问控制](#1.1.6 Apache访问控制)
[1.1.7 Apache虚拟主机技术](#1.1.7 Apache虚拟主机技术)
[1.2 MySQL环境搭建](#1.2 MySQL环境搭建)
[1.2.1 MySQL下载及初始配置](#1.2.1 MySQL下载及初始配置)
[1.2.2 MySQL使用](#1.2.2 MySQL使用)
[1.2.3 创建数据库](#1.2.3 创建数据库)
[1.3.4 数据库查询](#1.3.4 数据库查询)
[1.3.5 备份及还原数据库](#1.3.5 备份及还原数据库)
[1.3.6 数据库配置文件](#1.3.6 数据库配置文件)
[1.3.7 数据库密码修改](#1.3.7 数据库密码修改)
[1.3.8 数据库权限设置](#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_rewrite
、mod_ssl
、mod_proxy
等。 - 目录配置 :使用
<Directory>
指令设置特定目录的访问权限和行为。 - 虚拟主机:配置虚拟主机,允许单个 Apache 实例托管多个域名。
- 访问控制 :使用
<Limit>
、<Require>
、AllowOverride
等指令控制访问。 - 日志配置:设置日志文件的位置和格式。
- 性能调整 :调整服务器的性能参数,如
KeepAlive
、MaxClients
、Timeout
等。 - 安全设置 :配置安全相关的设置,如
ServerTokens
、ServerSignature
等
在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 服务的默认端口。User
和Group
:指定启动 Apache 服务的用户和用户组。在这个例子中,使用apache
用户和组。ServerAdmin
:指定服务器管理员的电子邮件地址,用于接收服务相关信息。<Directory />
:配置根目录(/
)的访问权限。在这个例子中,不允许任何覆盖(AllowOverride none
)并且拒绝所有访问(Require all denied
)。DocumentRoot
:指定 Apache 服务器的默认发布路径,通常是 Web 内容的根目录。在这个例子中,设置为/var/www/html
。<Directory "/var/www/html">
:配置默认发布路径的访问权限和行为。在这个例子中,允许索引视图(Indexes
),允许跟踪符号链接(FollowSymLinks
),并且授予所有访问权限(Require all granted
)。ErrorLog
和CustomLog
:指定错误日志和访问日志的存放位置。在这个例子中,错误日志存放在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 数据库密码修改
对数据库的密码修改需要注意以下几点:
- 首先必须是root用户
- 关闭mysql
- 以安全模式启动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;
能够成功执行查询,说明查看权限已经正确设置。如果尝试修改表(如 INSERT
、UPDATE
、DELETE
)的操作失败,说明没有修改权限,这也是预期的结果。
之后如果想要撤销用户的权限,我们需要用到revoke命令,我们使用help revoke查看一下格式要求
根据它上面给我们的格式,我们来试着撤销用户的权限
或者,我们也可以使用非交互式命令(即不在mysql中撤销权限)
撤销用户权限后,我们应该还可以使用远程登录到数据库,但是已经没有查看的权限了。
如果想要删除用户,可以使用drop user命令
至此,关于数据库的知识大致讲解完毕
对于LAMP,还有php没有讲解,关于php和平台的整体搭建,我们留到下节再说。