SQL数据库安全配置

6 篇文章 4 订阅
5 篇文章 0 订阅

🛢️SQL安全配置

一、关于SQL密码

修改SQL密码

1、使用mysqladmin命令修改密码
mysqladmin -uroot password [SQL Password]

如果有旧密码这么修改

mysqladm –uroot -p [Old SQL Password] password [New SQL Password]
2、用set password修改密码
set password for root@localhost=password('[SQL Password]');
3、直接修改user表里面的密码
mysql> use mysql;
mysql> update user set password=password('[SQL Password]') where user='root';
mysql> flush privileges;
4、直接使用mysql_secure_installation配置密码
mysql_secure_installation

忘记SQL密码后的恢复

1、关闭sql
systemctl stop XXsql.service
2、修改配置文件
# cd /usr/local/mysql/bin
# ./mysqld_safe  --user=mysql --skip-grant-tables --skip-networking &
3、配置SQL
# mysql –uroot
mysql> use mysql;
mysql> update user set password=PASSWORD('mysql') where user='root';
mysql> flush privileges;
mysql> exit;
4、修改SQL配置文件
# vim  /etc/my.cnf

写入配置文件

[mysqld]
skip-grant-tables
5、重启SQL
systemctl restart XXsql.service
6、重新进入SQL
# mysql -uroot –p

二、更改SQL默认的root用户名

mysql> use mysql;
mysql> update user set user='[New SQL Administrator Name]' where user='root';
mysql> flush privileges;

PS:更改完成默认的root用户名以后,可以加入一个虚假的(没有任何权限的)root用户,当蜜罐,让黑客来攻击,即使黑客拿下了这个虚假的"root"用户,但是并没有任何权限对数据库进行任何操作。

mysql> create user 'root' identified by '[虚假的SQL Password]';
mysql> lush privileges;
mysql> exit

三、删除默认的数据库和用户

mysql> drop database test;
mysql> use mysql;
mysql> delete from db;
mysql> delete from user where not(host="localhost" and user="root");
mysql> flush privileges;

四、删除命令历史记录

# rm .bash_history .mysql_history
# ln -s /dev/null .bash_history
# ln -s /dev/null .mysql_history

PS:命令记录数量可修改

echo "HISTSIZE=666" >> /etc/profile
echo "HISTFILESIZE=666" >> /etc/profile
# 设置输出条数和储存条数,数值可自行更改
source /etc/profile
# 使更改生效

五、更改SQL配置文件my.cnf

# vim  /etc/my.cnf

1、防止SQL对本地文件的存取

[mysqld]部分加上一个参数

set-variable=local-infile=0

2、关闭SQL远程连接

[mysqld]部分加上一个参数

skip-networking

3、限制连接用户的数量

[mysqld]部分加上一个参数

max_user_connections [连接数]

4、禁止服务器重写密码

[mysqld]部分加上一个参数

log-raw=OFF

5、阻止grant语句自动创建用户

[mysqld]部分加上一个参数

sql_mode = NO_AUTO_CREATE_USER

6、设置用户密码生存周期

[mysqld]部分加上一个参数

default_password_lifetime=[密码有效天数]

7、防止通过共享对象文件加载存在威胁的UDFs函数

有下列值或参数直接删除

allow-suspicious-udfs=TRUE

8、防止开启权限表的限制

[mysqld]部分加上一个参数

skip-grant-tables=FALSE

9、禁止数据库用户删除或重名数据文件目录之外的文件

[mysqld]部分加上一个参数

skip-symbolic-links=yes

10、禁用memcached协议访问

运行如下命令删除插件

mysql> uninstall plugin daemon_memcached;

11、加入处理非法与丢失的数值

[mysqld]部分加上一个参数

sql_mode = STRICT_ALL_TABLES

12、使用独立的普通用户运行SQL

[mysqld]部分加上一个参数

user=mysql

PS:绝对不要作为使用root用户运行SQL服务器。除非使用–user=root选项明显指定。应该用普通非特权用户运行SQL服务器。

13、SQL的端口

[mysqld]部分加上一个参数

port = [端口号]

更多详细配置文件参考:CSDN博客-mysql安全配置

六、控制数据库访问权限

对于使用php脚本来进行交互,最好建立一个用户只针对某个库有 update、select、delete、insert、drop table、create table等权限,这样就很好避免了数据库用户名和密码被黑客查看后最小损失。

创建一个数据库为db1,同时建立一个用户test1能够访问该数据库。

mysql> create database db1;
mysql> grant select,insert,update,delete,create,drop privileges on db1.* to test1@localhost identified by 'admindb';

以上SQL是创建一个数据库db1,同时增加了一个test1用户,口令是admindb,但是它只能从本地连接mysql,对db1库有select,insert,update,delete,create,drop操作权限。

七:示例my.cnf配置文件

[client]
port = 3306
socket=/home/mysql/data/mysql.sock
[mysqld]
lower_case_table_names=1
user = mysql
#--- 表示MySQL的管理用户
port = 3306
#--- 端口
#basedir=/usr/local/mysql
socket=/home/mysql/data/mysql.sock
#-- 启动的sock文件
datadir=/home/mysql/data
log-bin=/home/mysql/mysql-bin
log-error=/home/mysql/log/mysqld.log
pid-file =/home/mysql/mysqld.pid
bind-address = 0.0.0.0
server-id = 1
#表示是本机的序号为1,一般来讲就是master的意思
skip-grant-tables
skip-name-resolve
# 禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,
# 则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求
#skip-networking
back_log = 600
# MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,
# 然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。
# 如果期望在一个短时间内有很多连接,你需要增加它。也就是说,如果MySQL的连接数据达到max_connections时,新来的请求将会被存在堆栈中,
# 以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。
# 另外,这值(back_log)限于您的操作系统对到来的TCP/IP连接的侦听队列的大小。
# 你的操作系统在这个队列大小上有它自己的限制(可以检查你的OS文档找出这个变量的最大值),试图设定back_log高于你的操作系统的限制将是无效的。
max_connections = 500
# MySQL的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。可以过'conn%'通配符查看当前状态的连接数量,以定夺该值的大小。
max_connect_errors = 6000
# 对于同一主机,如果有超出该参数值个数的中断错误连接,则该主机将被禁止连接。如需对该主机进行解禁,执行:FLUSH HOST。
open_files_limit = 65535
# MySQL打开的文件描述符限制,默认最小1024;当open_files_limit没有被配置的时候,比较max_connections*5和ulimit -n的值,哪个大用哪个,
# 当open_file_limit被配置的时候,比较open_files_limit和max_connections*5的值,哪个大用哪个.
table_open_cache = 128
# MySQL每打开一个表,都会读入一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才会去磁盘上读取。默认值64
# 假定系统有200个并发连接,则需将此参数设置为200*N(N为每个连接所需的文件描述符数目);
# 当把table_open_cache设置为很大时,如果系统处理不了那么多文件描述符,那么就会出现客户端失效,连接不上
max_allowed_packet = 1000000000
# 接受的数据包大小;增加该变量的值十分安全,这是因为仅当需要时才会分配额外内存。例如,仅当你发出长查询或MySQLd必须返回大的结果行时MySQLd才会分配更多内存。
# 该变量之所以取较小默认值是一种预防措施,以捕获客户端和服务器之间的错误信息包,并确保不会因偶然使用大的信息包而导致内存溢出。
binlog_cache_size = 1M
# 一个事务,在没有提交的时候,产生的日志,记录到Cache中;等到事务提交需要提交的时候,则把日志持久化到磁盘。默认binlog_cache_size大小32K
max_heap_table_size = 67108864
# 定义了用户可以创建的内存表(memory table)的大小

📣特别声明

原文地址:SQL安全配置 - 开摆工作室博客 (kbai.cc)

此文章全部都是依靠自己的学习理解来写的原创文章,难免可能会出现有错误的地方,

如果大家以后阅读的时候发现有问题,那就麻烦到下方评论区来进行错误指出,使错误尽快做出改正,

在此,感谢大家的阅读与支持!🤝💦🎉

🍻支持一下

觉得我写的好的话可以支持一下我哦~持续关注我,会更新其他好玩且实用的项目。

👋如果我能帮助到你,那就请我喝杯🧋呗~👇👇👇

我的博客链接:blog.kbai.cc

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开摆工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值