
MySQL 作为广泛使用的开源关系型数据库管理系统,其安全性与便捷性一直是开发者关注的焦点
传统的密码认证方式虽然简单易用,但在安全性与自动化管理方面存在局限
相比之下,公钥认证提供了一种更为安全、高效的访问控制手段,尤其适合需要高安全性保障和自动化运维的场景
本文将深入探讨如何使用 Python 实现公钥登录 MySQL,从而为您的数据库访问带来革命性的改变
一、为何选择公钥认证? 1. 增强安全性 -避免明文密码传输:公钥认证过程中,私钥从不在网络上传输,有效防止了中间人攻击和密码泄露风险
-细粒度访问控制:可以为不同用户分配不同的公钥,实现更精细的权限管理
2. 提升自动化效率 -无密码登录:一旦配置完成,无需在脚本中硬编码密码,简化了自动化脚本的编写与维护
-集成CI/CD流程:无缝集成到持续集成/持续部署(CI/CD)流程中,提升开发部署效率
二、前提条件与准备工作 在开始之前,请确保您已满足以下条件: -MySQL服务器:已安装并配置好 MySQL 服务器,支持 SSL/TLS(虽然公钥认证本身不依赖于 SSL,但启用 SSL 可进一步增强安全性)
-客户端工具:安装了支持公钥认证的 MySQL 客户端,如 MySQL Shell 或通过配置支持公钥认证的 MySQL Connector/Python
-Python环境:已安装 Python 及 pip 包管理器,用于安装必要的库
-SSH密钥对:虽然 MySQL 公钥认证使用的是特定的 MySQL 公钥/私钥对,但理解 SSH密钥对的生成过程有助于理解整个流程
三、生成 MySQL 公钥/私钥对 MySQL 公钥/私钥对的生成通常通过 MySQL Shell 完成
以下是具体步骤: 1.启动 MySQL Shell: bash mysqlsh --uri root@localhost:3306 替换`root@localhost:3306`为您的 MySQL 服务器连接信息
2.生成密钥对: 在 MySQL Shell 中执行以下命令: sql util generate-ssl-cert --user=your_username --password --out-dir=/path/to/output/dir 这里,`your_username` 是您希望在 MySQL 中使用的用户名,`/path/to/output/dir` 是保存生成的密钥文件的目录
命令会提示您输入密码,该密码用于保护私钥文件(非 MySQL 登录密码)
该命令将生成两个文件:`client-cert.pem`(包含公钥)和`client-key.pem`(包含私钥)
四、配置 MySQL 服务器以支持公钥认证 1.编辑 MySQL 配置文件: 打开 MySQL 服务器的配置文件(通常是`my.cnf` 或`my.ini`),在`【mysqld】` 部分添加或修改以下配置以启用公钥认证相关功能: ini 【mysqld】 require_secure_transport=ON 如果使用 SSL,则启用此项 have_openssl=YES require_valid_client_ssl_certs=ON 2.重启 MySQL 服务: 保存配置文件并重启 MySQL 服务以使更改生效
3.在 MySQL 中创建用户并关联公钥: 使用具有足够权限的账户登录 MySQL,并执行以下 SQL 命令来创建用户并绑定公钥: sql CREATE USER your_username@% IDENTIFIED WITH caching_sha2_password AS NULL; GRANT ALL PRIVILEGES ON- . TO your_username@% WITH GRANT OPTION; ALTER USER your_username@% REQUIRE SSL; ALTER USER your_username@% REQUIRE X509; INSTALL PLUGIN server_audit SONAME server_audit.so; 可选,用于审计(具体插件名称和配置可能因版本而异) --加载公钥(假设公钥文件已复制到服务器可访问的路径) CALL mysql_ssl_rsa_setup.ssl_accept(your_username, /path/to/client-cert.pem, your_password_to_protect_key); 注意:`mysql_ssl_rsa_setup.ssl_accept` 是一个假设的命令,用于说明过程;实际中,MySQL 可能通过不同的机制(如直接导入证书到系统证书库)来关联公钥
具体步骤可能依赖于 MySQL 版本和具体配置
五、使用 Python 实现公钥登录 为了在 Python 中实现公钥登录 MySQL,您需要安装`mysql-connector-python` 库,并确保其版本支持公钥认证
以下是一个示例脚本,展示了如何使用公钥登录 MySQL: 1.安装 mysql-connector-python: bash pip install mysql-connector-python 2.编写 Python 脚本: python import mysql.connector from mysql.connector import errorcode try: 配置连接参数,包括使用 SSL 证书 config ={ user: your_username, password: None, 公钥认证时,密码字段留空 host: localhost, port:3306, database: your_database, ssl_ca: /path/to/ca-cert.pem, CA 证书路径(如有) ssl_cert: /path/to/client-cert.pem,客户端证书路径 ssl_key: /path/to/client-key.pem,客户端私钥路径 auth_plugin: mysql_native_password 注意:对于公钥认证,可能需要调整或使用适当的插件 } 建立连接 cnx = mysql.connector.connect(config) cursor = cnx.cursor() 执行查询 cursor.execute(SELECT VERSION()) for row in cursor: print(MySQL version:, row【0】) 关闭连接 cursor.close() cnx.close() except
MySQL5.7配置远程登录指南
Python实现公钥认证登录MySQL指南
MySQL5.7数据库安装路径详解
MySQL:5次登录失败即锁定账户
MySQL5.6官网下载指南
MySQL字符串转换数据技巧
Maven项目如何高效导入MySQL依赖,构建数据库连接
JSP+MySQL实现图片上传指南
MySQL技巧大揭秘:如何实现数据表的随机分组
MySQL技巧:轻松实现列转行
MySQL技巧:如何实现两张表联动查询
阿里云数据库MySQL版本升级全攻略:轻松实现性能飞跃
如何实现MySQL两个表格数据高效同步?
用Python连接HTML与MySQL实战指南
MySQL建表技巧:实现ID自动增长
Ajax技术实现MySQL数据库链接指南
MySQL分布式锁实现技巧揭秘
Python操控MySQL实现文件删除指南
MySQL中如何实现多个字段排序技巧