MySQL是一个开源的、使用标准SQL语言的、可运行于多个系统的、支持多语言的、支持大型数据库的关系型数据库管理系统。由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下产品。我们通常使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
什么是数据库?
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
数据表可以简单看做一个Excel表:
url: jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
url | 统一资源定位符 |
---|---|
jdbc:mysql | 是协议名称 是指JDBC连接方式 |
localhost:3306 | 是主机:端口 还可以写作127.0.0.1:3306 |
test | 是数据库名 |
useSSL=true | MySQL在高版本需要指明是否进行SSL连接 在mysql连接字符串url中加入ssl=true或者false即可 SSL |
useUnicode=true | 是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true |
characterEncoding | 当useUnicode设置为true,给定编码,常用utf8,默认是:autodetect |
serverTimezone | 设置时区 例如 serverTimezone=UTC(统一标准世界时间)或serverTimezone=Asia/Shanghai(中国时区) |
zeroDateTimeBehavior | 所有零组件的日期时间处理 |
allowPublicKeyRetrieval | 允许客户端从服务器获取公钥 |
zeroDateTimeBehavior处理策略,有3种
设置AllowPublicKeyRetrieval=True参数以允许客户端从服务器获取公钥。
AllowPublicKeyRetrieval=True可能会导致恶意的代理通过中间人攻击(MITM)获取到明文密码,所以默认是关闭的,必须显式开启。
问题一
当使用数据库查询第一条数据的时候,发现报了这个Public Key Retrieval is not allowed(不允许检索公钥)。出现这个问题原因是:mysql8以上版本默认使用 sha256_password 认证,密码在传输过程中必须加密保护,如果无法使用 TLS,就需要使用 RSA 公钥加密。
解决办法:设置AllowPublicKeyRetrieval=True即可解决此问题。
问题二
Access denied for user ‘root’@‘172.17.0.1’ (using password: YES)
此异常和问题一一样,从MySQL8.0 开始,默认的验证方式是caching_sha2_password。