本文最后更新于:2021年12月8日 凌晨
🛢️SQL安全配置
一、关于SQL密码
修改SQL密码
1、使用mysqladmin
命令修改密码
| mysqladmin -uroot password [SQL Password]
|
如果有旧密码这么修改
1
| mysqladm –uroot -p [Old SQL Password] password [New SQL Password]
|
2、用set password
修改密码
1
| set password for root@localhost=password('[SQL Password]');
|
3、直接修改user
表里面的密码
1 2 3
| mysql> use mysql; mysql> update user set password=password('[SQL Password]') where user='root'; mysql> flush privileges;
|
4、直接使用mysql_secure_installation
配置密码
1
| mysql_secure_installation
|
忘记SQL密码后的恢复
1、关闭sql
1
| systemctl stop XXsql.service
|
2、修改配置文件
1 2
| # cd /usr/local/mysql/bin # ./mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
|
3、配置SQL
1 2 3 4 5
| mysql> use mysql; mysql> update user set password=PASSWORD('mysql') where user='root'; mysql> flush privileges; mysql> exit;
|
4、修改SQL配置文件
写入配置文件
1 2
| [mysqld] skip-grant-tables
|
5、重启SQL
1
| systemctl restart XXsql.service
|
6、重新进入SQL
二、更改SQL默认的root用户名
1 2 3
| mysql> use mysql; mysql> update user set user='[New SQL Administrator Name]' where user='root'; mysql> flush privileges;
|
PS:更改完成默认的root用户名以后,可以加入一个虚假的(没有任何权限的)root用户,当蜜罐,让黑客来攻击,即使黑客拿下了这个虚假的”root”用户,但是并没有任何权限对数据库进行任何操作。
1 2 3
| mysql> create user 'root' identified by '[虚假的SQL Password]'; mysql> lush privileges; mysql> exit
|
三、删除默认的数据库和用户
1 2 3 4 5
| 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;
|
四、删除命令历史记录
1 2 3
| # rm .bash_history .mysql_history # ln -s /dev/null .bash_history # ln -s /dev/null .mysql_history
|
PS:命令记录数量可修改
1 2 3 4 5
| echo "HISTSIZE=666" >> /etc/profile echo "HISTFILESIZE=666" >> /etc/profile
source /etc/profile
|
五、更改SQL配置文件my.cnf
1、防止SQL对本地文件的存取
在[mysqld]
部分加上一个参数
1
| set-variable=local-infile=0
|
2、关闭SQL远程连接
在[mysqld]
部分加上一个参数
3、限制连接用户的数量
在[mysqld]
部分加上一个参数
1
| max_user_connections [连接数]
|
4、禁止服务器重写密码
在[mysqld]
部分加上一个参数
5、阻止grant
语句自动创建用户
在[mysqld]
部分加上一个参数
1
| sql_mode = NO_AUTO_CREATE_USER
|
6、设置用户密码生存周期
在[mysqld]
部分加上一个参数
1
| default_password_lifetime=[密码有效天数]
|
7、防止通过共享对象文件加载存在威胁的UDFs函数
有下列值或参数直接删除
1
| allow-suspicious-udfs=TRUE
|
8、防止开启权限表的限制
在[mysqld]
部分加上一个参数
9、禁止数据库用户删除或重名数据文件目录之外的文件
在[mysqld]
部分加上一个参数
10、禁用memcached协议访问
运行如下命令删除插件
1
| mysql> uninstall plugin daemon_memcached
|
11、加入处理非法与丢失的数值
在[mysqld]
部分加上一个参数
1
| sql_mode = STRICT_ALL_TABLES
|
12、使用独立的普通用户运行SQL
在[mysqld]
部分加上一个参数
PS:绝对不要作为使用root用户运行SQL服务器。除非使用–user=root选项明显指定。应该用普通非特权用户运行SQL服务器。
13、SQL的端口
在[mysqld]
部分加上一个参数
更多详细配置文件参考:CSDN博客-mysql安全配置
六、控制数据库访问权限
对于使用php脚本来进行交互,最好建立一个用户只针对某个库有 update、select、delete、insert、drop table、create table等权限,这样就很好避免了数据库用户名和密码被黑客查看后最小损失。
创建一个数据库为db1,同时建立一个用户test1能够访问该数据库。
1 2
| 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
配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| [client] port = 3306 socket=/home/mysql/data/mysql.sock [mysqld] lower_case_table_names=1 user = mysql
port = 3306
socket=/home/mysql/data/mysql.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
skip-grant-tables skip-name-resolve
back_log = 600
max_connections = 500
max_connect_errors = 6000
open_files_limit = 65535
table_open_cache = 128
max_allowed_packet = 1000000000
binlog_cache_size = 1M
max_heap_table_size = 67108864
|
📣特别声明
此文章全部都是依靠自己的学习理解来写的原创文章,难免可能会出现有错误的地方,
如果大家以后阅读的时候发现有问题,那就麻烦到下方评论区来进行错误指出,使错误尽快做出改正,
在此,感谢大家的阅读与支持!🤝💦🎉
🍻支持一下
觉得我写的好的话可以支持一下我哦~持续关注我,会更新其他好玩且实用的项目。
👋如果我能帮助到你,那就请我喝杯🧋呗~👇👇👇