MySQL5.7模拟role,5.6添加审计功能,SSL连接,多实例

mysql5.7可以模拟role

1、创建tom,junior_dba用户
2、将tom加入

grant proxy on 'junior_dba'@'localhost' to 'tom'@'localhost';

3、授予junior_dba权限后,tom将拥有和junior_dba相同的权限。
grant select on *.* to 'junior_dba'@'localhost';

4、登陆测试
show database;
SELECT USER(), CURRENT_USER();

note:

开启支持用户映射,默认check_proxy_users,mysql_native_password_proxy_users是禁用的。
用户本身会被proxy,原来权限都不起作用。
myql5.7 支持锁定用户,alter user tom account lock;


mysql增加审计插件

1、下载server_audit的包
server_audit包
百度云地址,密码: hvtg

2、 查看mysql5.6插件安装目录

SHOW VARIABLES LIKE 'plugin_dir';
+---------------+------------------------------+
| Variable_name | Value                        |
+---------------+------------------------------+
| plugin_dir    | /usr/local/mysql/lib/plugin/ |
+---------------+------------------------------+

3、解压server_audit包,复制linux-64/server_audit.so文件到/usr/local/mysql/lib/plugin/
4、安装server_audit插件
(root@localhost:mysql.sock) [(none)]>install plugin server_audit SONAME 'server_audit.so';
show plugins;
| SERVER_AUDIT               | ACTIVE   | AUDIT              | server_audit.so    | GPL     |
说明server_audit插件安装成功。

5、默认server_audit关闭,set the server_audit_logging variable to ON.
(root@localhost:mysql.sock) [(none)]>show variables like "%audit%";
+-------------------------------+-----------------------+
| Variable_name                 | Value                 |
+-------------------------------+-----------------------+
| server_audit_events           |                       |
| server_audit_excl_users       |                       |
| server_audit_file_path        | server_audit.log      |
| server_audit_file_rotate_now  | OFF                   |
| server_audit_file_rotate_size | 1000000               |
| server_audit_file_rotations   | 9                     |
| server_audit_incl_users       |                       |
| server_audit_logging          | OFF                   |
| server_audit_mode             | 1                     |
| server_audit_output_type      | file                  |
| server_audit_syslog_facility  | LOG_USER              |
| server_audit_syslog_ident     | mysql-server_auditing |
| server_audit_syslog_info      |                       |
| server_audit_syslog_priority  | LOG_INFO              |
+-------------------------------+-----------------------+

6、使用tom用户登陆,测试。
server_audit日志记录
tail -f server_audit.log 
20151121 15:10:58,ubuntu,tom,localhost,2,0,FAILED_CONNECT,,,1045
20151121 15:10:58,ubuntu,tom,localhost,2,0,DISCONNECT,,,0
20151121 15:11:01,ubuntu,tom,localhost,3,0,CONNECT,,,0
20151121 15:11:01,ubuntu,tom,localhost,3,15,QUERY,,'select @@version_comment limit 1',0
20151121 15:11:01,ubuntu,tom,localhost,3,16,QUERY,,'select USER()',0

general_log日志记录
tail -f /data/mysql56/ubuntu.log
151121 15:13:09     4 Connect   tom@localhost on 
                    4 Connect   Access denied for user 'tom'@'localhost' (using password: NO)
151121 15:13:12     5 Connect   tom@localhost on 
                    5 Query     select @@version_comment limit 1
                    5 Query     select USER()

更多设置


mysql5.6增加SSL

1、生成所需证书和keys文件

CA
shell> openssl genrsa 2048 > ca-key.pem
shell> openssl req -new -x509 -nodes -days 3600 \
         -key ca-key.pem -out ca.pem
Server
shell> openssl req -newkey rsa:2048 -days 3600 \
         -nodes -keyout server-key.pem -out server-req.pem
shell> openssl rsa -in server-key.pem -out server-key.pem
shell> openssl x509 -req -in server-req.pem -days 3600 \
         -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
Client
shell> openssl req -newkey rsa:2048 -days 3600 \
         -nodes -keyout client-key.pem -out client-req.pem
shell> openssl rsa -in client-key.pem -out client-key.pem
shell> openssl x509 -req -in client-req.pem -days 3600 \
         -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
Verify
shell> openssl verify -CAfile ca.pem server-cert.pem client-cert.pem
server-cert.pem: OK
client-cert.pem: OK

2、配置server端,修改my.cnf配置
[mysqld]
ssl-ca=ca.pem
ssl-cert=server-cert.pem
ssl-key=server-key.pem

3、设置client端,复制生成的clent文件,并修改用户认证方式。
mysql5.6使用grant语法,mysql5.7可以直接alter。
grant select on *.* to tom_ssl@'115.182.83.36' require ssl; 
shell> mysql --ssl-ca=ca.pem \
       --ssl-cert=client-cert.pem \
       --ssl-key=client-key.pem

4、判断是否通过SSL连接
SHOW STATUS LIKE 'Ssl_cipher';

note:
Whatever method you use to generate the certificate and key files, the Common Name value used for the server and client certificates/keys must each differ from the Common Name value used for the CA certificate
CA的Country Name要与server/client的Country Name不同,不然会报错。
详细配置


mysql多实例

1、重新初始化数据目录
scripts/mysql_install_db –datadir=/data/mysql56_2 –user=mysql
不推荐直接复制数据目录。
例如:auto.cnf,mysql库中存在innodb表,直接cp会存在问题。
2、修改my.cnf配置
–port,–socket,–pid-file,–datadir,–tmpdir (提高性能)
如果有日志,添加日志相关参数
general_log_file,log-bin,slow_query_log_file,log-error

[mysqld_multi]
mysqld     = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = multi_admin
pass = admin123
log = /var/log/mysqld_multi.log

[mysqld2]
server-id = 1111
basedir    = /usr/local/mysql56  mysql56做个软链接
socket     = /tmp/mysql.sock2
port       = 3307
pid-file   = /data/mysql56_2/mysql56_2.pid2
datadir    = /data/mysql56_2
language   = /usr/local/mysql/share/english
performance_schema=0

....

3、启动、查看mysql实例
mysqld_mulit report 查看
mysqld_mulit start 2 启动实例2

note:

1、mysqld_multi管理不同版本要指定server-id,basedir,plugin-dir等(如mysql5.6&mysql5.7)
2、管理多实例,必须保证每个实例同样的用户和密码

Make sure that the MySQL account used for stopping the mysqld servers (with the mysqladmin
program) has the same user name and password for each server.
shell> mysql -u root -S /tmp/mysql.sock -p
Enter password:
mysql> CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY 'multipass';
mysql> GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost';

3、mysqld_multi tag下 password修改成pass 才能停止mysql,mysqld_multi的工具的bug


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!