说明:从安装开始,完整的关于数据库使用RSA认证文档
1 安装
准备:
安装目录:/data/mysql
源码包目录:/data/soft/mysql-8.0.12.tar.gz
解压缩:
shell server> cd /data/soft
shell server> tar xf mysql-8.0.12.tar.gz
shell server> mv mysql-8.0.12 mysql
配置参数文件:
shell server> cd /data/soft/mysql
shell server> vim cmake.sh
cmake . \
-DCMAKE_INSTALL_PREFIX=/data/mysql \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/data/mysql/mysql \
-DSYSCONFDIR=/data/mysql/etc \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DMYSQL_TCP_PORT=3306 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local \
-DWITH_DEBUG=1 \
-DWITH_SSL=system #使用openSSL加密
写入配置文件:
shell server> yum instal cmake openssl-devel ncurses-devel
shell server> sh -x cmake.sh
编译安装:
shell server> make && make install
2 初始化
创建用户:
shell server> groupadd mysql
shell server> useradd mysql -s /bin/false -g mysql -r
MySQL配置文件:
shell server> cd /data/mysql
shell server> mkdir etc log
shell server> cd etc
shell server> vim my.cnf
[mysqld]
datadir=/data/mysql/data
basedir=/data/mysql/
socket=/data/mysql/log/mysql.sock
symbolic-links=0
[mysqld_safe]
log-error=/data/mysql/log/mysql-error.log
pid-file=/data/mysql/log/mysql.pid
!includedir /etc/my.cnf.d
初始化:
shell server> chown mysql. -R /data/mysql/
shell server> cd /data/mysql
shell server> bin/mysqld --initialize --user=mysql
2018-09-26T06:04:58.110546Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2018-09-26T06:04:58.110673Z 0 [System] [MY-013169] [Server] /data/mysql/bin/mysqld (mysqld 8.0.12-debug) initializing of server in progress as process 46039
2018-09-26T06:05:03.119182Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: d59,BqrKOiGP
2018-09-26T06:05:11.129668Z 0 [System] [MY-013170] [Server] /data/mysql/bin/mysqld (mysqld 8.0.12-debug) initializing of server has completed
启动数据库:
shell server> cp /data/mysql/support-files/mysql.server /etc/init.d/
shell server> mkdir /data/mysql/data /data/mysql/log
shell server> touch /data/mysql/log/mysql-error.log
shell server> /etc/init.d/mysql.server start
更新root初始密码:
shell server> ln -sf /data/mysql/bin/mysql /usr/bin
shell server> mysql -uroot -pd59,BqrKOiGP
mysql server > UPDATE USER 'root'@'localhost' IDENTIFIED BY '123';
注意:数据库启动之后会自动在数据目录下创建认证文件。目录在/data/mysql/data
3 测试
创建测试用户
mysql server> create user 'x509'@'%' require x509;
mysql server> create user 'test'@'%' ;
拷贝服务器数据目录下的客户端认证文件:
shell server> scp /data/mysql/data/ca.pem 10.0.0.4:/data/test
shell server> scp /data/mysql/data/client-cert.pem 10.0.0.4:/data/test
shell server> scp /data/mysql/data/client-key.pem 10.0.0.4:/data/test
shell server> scp /data/mysql/bin/mysql 10.0.0.4:/data/test
从客户端进行连接测试:
shell client> cd /data/test
shell client> ln -sf /data/test/mysql /usr/bin/
shell client> mysql -utest -h10.0.0.138
#登录成功
shell client> mysql -ux509 -h10.0.0.138
#登录失败
shell client> mysql -u509 -h10.0.0.138 --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem
#登录成功
注意:使用rsa认证登录大概有以下几点需要注意:
- 配置编译时需要加上参数
-DWITH_SSL=system
,如果没有加次参数,使用SSL连接报错如下:
shell cilent> ERROR 2026 (HY000): SSL connection error: SSL_CTX_set_default_verify_paths failed
-
创建用户需要添加认证方式,用户认证方式:官网链接
本例中使用的认证方式x509,要求客户端提供有效证书。 -
客户端连接数据库服务器端必须使用配置编译时添加了此参数
-DWITH_SSL=system
的连接命令,如:mysql、mysqldump等
遗留问题:
- server端秘钥对用途
- 不同用户使用不同秘钥对如何实现
- MySQL8.0的认证方式sha256_password与以往版本认证方式mysql_native_password对数据库的影响