jk2K's 窝

休息,是为了更好的前行

哈喽, 我是叶萌(@jk2K), 一名来自中国的 PHP / iOS 开发者


windows 下配置一个更安全的 MySQL

环境

  • MySQL 版本:mysql-5.6.16-winx64.zip
  • windows 版本:Microsoft Windows Server 2008 R2 Enterprise

安装步骤

  1. 解压mysql-5.6.16-winx64.zip至e:\software\mysql
  2. 将e:\software\mysql\bin添加至系统变量path中,使得cmd中可以直接运行bin文件夹下的程序
  3. 修改mysql目录下的my-default.ini为my.ini,按情况修改配置
  4. 将mysql安装为windows服务,然后启动mysql

将mysql安装为windows服务

C:\Users\Administrator> mysqld --install mysql --defaults-file=e:\software\mysql\my.ini

去除mysql服务

C:\Users\Administrator> mysqld --remove

启动mysql

C:\Users\Administrator> net start mysql

关闭mysql

C:\Users\Administrator> net stop mysql

mysql配置

[mysqld]
# 设置mysql的安装目录
basedir = e:/software/mysql
# 设置mysql的数据存放目录
datadir = e:/software/mysql/data
# 允许的最大连接数,设置过小会出现Too many connections错误
max_connections = 2000
# 设置mysql接收的数据包大小,设置过小会出现mysql has gone away错误
max_allowed_packet = 10M
# 设置SQL mode为严格
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 设置默认字符集
character-set-server=utf8

mysql安全加固

  • 修改root用户口令,删除空口令
    默认安装的MySQL的root用户是空密码的,为了安全起见,必须修改为强密码,所谓的强密码,至少8位,由字母、数字和符号组成的不规律密码。使用MySQL自带的命令mysaladmin修改root密码,同时也可以登陆数据库,修改数据库mysql下的user表的字段内容,修改方法如下所示:

    # 使用mysqladmin
    C:\Users\Administrator> mysqladmin -u root password "upassword"
    # 登录mysql
    C:\Users\Administrator> use mysql;
    C:\Users\Administrator> update user set password=password('upassword') where user='root';
    C:\Users\Administrator> flush privileges;// 强制刷新内存授权表,否则用的还是在内存缓冲的口令
  • 删除默认数据库和数据库用户
    一般情况下,MySQL数据库安装在本地,并且也只需要本地的php脚本对mysql进行读取,所以很多用户不需要,尤其是默认安装的用户。MySQL初始化后会自动生成空用户和test库,进行安装的测试,这会对数据库的安全构成威胁,有必要全部删除,最后的状态只保留单个root即可,当然以后根据需要增加用户和数据库。

    C:\Users\Administrator> show databases;
    C:\Users\Administrator> drop database test;// 删除数据库test
    C:\Users\Administrator> use mysql;
    C:\Users\Administrator> delete from db;// 删除存放数据库的表信息,因为还没有数据库信息。
    C:\Users\Administrator> delete from user where user='';// 删除空用户
    C:\Users\Administrator> delete from user where user='root' and password='';// 删除空密码的root,尽量重复操作
    Query OK, 2 rows affected (0.00 sec)
    C:\Users\Administrator> flush privileges; //强制刷新内存授权表。
  • 改变默认mysql管理员帐号
    系统mysql的管理员名称是root,而一般情况下,数据库管理员都没进行修改,这一定程度上对系统用户穷举的恶意行为提供了便利,此时修改为复杂的用户名,请不要在设定为admin或者administraror的形式,因为它们也在易猜的用户字典中。

    C:\Users\Administrator> update user set user="newroot" where user="root";// 改成不易被猜测的用户名
    C:\Users\Administrator> flush privileges;
  • 给数据库schema分配用户

    GRANT SELECT, INSERT, UPDATE, DELETE on schema.* to mysql@localhost identified by 'password'
comments powered by Disqus