MySQL知识小结

发布于:2023-01-06 ⋅ 阅读:(489) ⋅ 点赞:(0)


一、知识小结

1.MySQL配置文件

  • Windows 操作系统中 MySQL 的配置文件 my.ini。Linux 操作系统中 MySQL 的配置文件是my.cnf,一般会放在 /etc/my.cnf 或 /etc/mysql/my.cnf 目录下。Linux 下安装的 mysql,配置文件位置 /etc/my.cnf
  • cat /etc/my.cnf
  • port=12345是我自己加的,默认没有。
    在这里插入图片描述

2.修改端口

  • (1))编辑 vi /etc/my.cnf在[mysqld]选项下增加 port=12345,然后:wq保存退出。
    在这里插入图片描述

  • (2)setenforce 0 关闭 selinuc

  • (3)service mysqld restart重新启动 mysql 服务

  • (4) netstat -ano|grep 12345查看修改端口
    在这里插入图片描述

  • 也可以用mysqladmin -uroot -p variables |grep 'port'查看修改端口
    在这里插入图片描述

  • (5)防火墙

  • firewall-cmd --zone=public --add-port=12345/tcp --permanent放行12345端口

  • firewall-cmd --zone=public --remove-port=3306/tcp --permanent关闭3306端口

  • systemctl restart firewalld重启防火墙使配置生效

  • firewall-cmd --list-all查看防火墙列表
    在这里插入图片描述


二、赋权练习与总结

1、symbolic-links 配置项具体解释及安全的相关性

  • symbolic-links 软链接,所在位置位置 /etc/my.cnf,软链接可以看作是Windows中的快捷方式,可以让你快速链接到目标档案或目录。在这里插入图片描述
  • symbolic-links=0禁止软连接,MySQL官方帮助文档介绍如下MySQL官方帮助文档介绍
  • 一般在生产环境中,数据库data文件所在分区和系统分区是分开的,而使用软连接的情况下多数是保存在系统分区。而针对数据库加固的重要思想就是将系统分区和数据分区分开,防止数据库写入数据影响系统性能,也防止系统用户修改数据库数据。当使用软连接,尤其是用root运行mysqld时,攻击者将可以通过数据库获得root权限,又由于数据同时存储在系统分区,将导致攻击者可以修改系统分区的任意文件;当使用mysql命令修改软连接对应的数据库,会修改存储在系统分区的实际文件,可能对系统内的其他文件进行删除和重命名。同时,在数据库加固中会对整个data文件夹进行权限加固,使用软连接的数据库文件将不会被加固到。

2、创建2个用户1,用户2,可对demo数据库aaa(cmd text)表和bbb(cmd text)表有所有权限

  • create user zyh1@‘%’ identified by ‘root’; 在这里插入图片描述

  • create user zyh2@‘%’ identified by ‘root’;
    在这里插入图片描述

  • create database demo创建数据库demo
    在这里插入图片描述

  • use demo;使用库,对demo数据库创建aaa(cmd text)表和bbb(cmd text)表

  • create table aaa(cmd text);

  • create table bbb(cmd text);
    在这里插入图片描述

  • grant all privileges on demo.aaa to 'zyh1'@'%' identified by 'root' with grant option;为用户zyh1单表赋权,使其拥有表aaa的所有权限

  • flush privileges;刷新权限

  • grant all privileges on demo.bbb to 'zyh1'@'%' identified by 'root' with grant option;

  • flush privileges;为用户zyh1单表赋权,使其拥有表bbb的所有权限
    在这里插入图片描述

  • show grants for 'zyh1'@'%';查看用户zyh1的权限
    在这里插入图片描述

  • grant all privileges on demo.* to 'zyh2'@'%' identified by 'root' with grant option;我给zyh2赋予单数据库权限,因为我demo数据库下只有这两个表,依据题意也可以这样赋权,但是注意单数据库赋权要比单表赋权权限高

在这里插入图片描述


3、zyh1 用户 读取外部的 /etc/passwd 文件,读到aaa表 select user()

  • 首先修改配置文件my.cnf在其中添加以下命令
  • secure_file_priv=
  • local-infile=1
  • [mysql]
  • local-infile=1
    在这里插入图片描述在这里插入图片描述

在这里插入图片描述

  • setenforce 0关闭 selinu修改完后重启MySQL服务!!!
    在这里插入图片描述

  • use demo;记得先使用demo数据库!!!

  • insert into aaa(cmd) values (load_file('/etc/passwd'));
    在这里插入图片描述在这里插入图片描述

  • 出现问题我这里zyh1赋予的是单表权限,但是导入不进去/etc/passwd文件里的内容,然后重新给zyh1赋予root权限后成功导入了命令如下

  • grant all privileges on *.* to 'zyh1'@'%' identified by 'root' with grant option;给zyh1赋予root权限

  • flush privileges;刷新权限,然后从aaa表中读到passwd内容

在这里插入图片描述

4、zyh2用户读取外部的/etc/my.cnf 文件 ,读到bbb表中

  • 同上一步先修改配置文件my.cnf在其中添加以下命令

  • secure_file_priv=

  • local-infile=1

  • [mysql]

  • local-infile=1

  • setenforce 0关闭 selinu修改完后重启MySQL服务!!!

  • use demo;记得先使用demo数据库!!!

  • 出现问题,然后我将配置文件my.cnf中的skip-grant-tables=1加上,使用无密码登录就可写入bbb在这里插入图片描述
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

5、安全相关的配置

  • grant all privileges on *.* to 'zyh1'@'%' identified by 'root' with grant option;这条命令就是赋予用户root权限,避免root权限的完全开放,应给将重要的权限赋给指定的主机
  • 禁止以root账号运行mysqld,检查进程属主和运行参数是否包含–user=mysql类似语句
  • 按照用户分配权限,避免不同用户共享账号
  • 创建用户 设定指定ip地址登陆mysql数据库
  • 定期检查必要账户,删除无用户或过期账户
  • 在数据库权限配置能力内,根据用户的需要,配置其所需的最小权限。
  • 定期用show grants 来查看用户权限例如:show grants for 'zyh1'@'%';
  • 修改管理员root用户的用户名
  • 禁止远程连接,禁止使用软连接symbolic-links
  • 禁止读取本地文件比如读linux中的/etc/passwd。先在配置文件my.cnf或my.ini中找到[mysqld],再往下一行添加一句set-variable=local-infile=0,然后重启mysql服务即可。(所有修改配置的操作都需要重启服务)

网站公告

今日签到

点亮在社区的每一天
去签到