MySQL管理——网络传输安全


prtyaa
prtyaa 2024-01-08 22:48:07 52239 赞同 0 反对 0
分类: 资源 标签: 运维
数据库会遭受多种攻击方式,例如,SQL注入、利用缓冲区错误、暴力破解、及网络窃听等等。这一篇主要介绍关于MySQL如何防止网络窃听的方法。
  • MySQL防止网络窃听主要的方法是在所有的连接和传输时都要进行加密,使用SSL/TLS(Secure Socket Layer/ Transport Layer Security)。加密后的传输内容无法被窃听者读取。MySQL的SSL/TSL基于 OpenSSL API实现。MySQL中的许多选项和变量都涉及SSL,但实际上它使用的是更为安全的TLS,包括验证身份、检测传输中的更改及防止重放等机制在内。

    TLS通过加密算法保证从公共网络接收到的数据是可信的,并能够检查数据是否有更改、丢失或被重放,此外,TLS还结合了使用X509标准提供身份验证的算法。

    X509可以通过使用证书CA识别来自互联网的用户,证书依赖于具有公钥和私钥的非对称加密算法,证书的持有者可以向另一方出示证书作为身份证明,证书包含所有者的公钥,通过公钥加密的数据,仅能够给通过对应的私钥进行解密,私钥仅保存在证书的持有者手中。

    MySQL包含OpenSSL库用以支持 TLSv1,TLSv1.1,TLSv1.2 及TLSv1.3。用户可以通过查看“Ssl_version”和“Ssl_cipher”状态变量确认MySQL当前使用哪种加密协议及密码。

    一些应用程序需要使用安全连接提供的额外安全性,因此,MySQL可以基于每个连接决定是否启用安全连接方式,并可以对每个用户强制或作为选项启用。

    MySQL建立安全连接的过程如下:

    1. 客户端发起一个连接至服务器的安全连接

    2. 服务器提供数字证书给客户端用以识别服务器及提供服务器的公钥

    3. 客户端决定会话密钥,并使用服务器的公钥加密传输到服务器

    4. 服务器用私钥解密客户端传至服务器的会话密钥

      • 此时,该会话密钥仅客户端和服务器持有

      • 其他会话使用该会话密钥进行加密解密传输内容

      • SSL包括检测修改并防止回放的机制

     

    生成数字证书

    使用SSL时,服务器必须具有一个由凭据管理中心CA发行,基于X509格式的数字证书。CA验证服务器并提供用于非对称加密的公钥/私钥,CA可以是一个第三方组织,或者由服务器充当CA提供自签名的数字证书。MySQL可以作为CA并生成自签名的证书。如果MySQL启用了SSL,并且服务器满足OpenSSL的要求,当服务器启动时,会自动检查数字证书,如果证书不存在,会生成新的证书。用户也可以使用”mysql_ssl_rsa_setup”生成数字证书文件,通过使用不同的选项,满足用户对证书的需求。

    默认情况下,服务器开启了SSL,用户可以通过“SHOW VARIABLES LIKE ‘have_ssl’”查看是否开启。如果需要禁用MySQL服务器的SSL,在启动MySQL时,需要执行选项”–ssl=0″或“–skip-ssl”。

    当客户端使用TCP/IP协议连接MySQL服务器时,默认开启了SSL。可以在mysql shell下执行“\status”查看当前SSL状态,例如,

    MySQL  127.0.0.1:3350 ssl  SQL > \status
    MySQL Shell version 8.0.28-commercial


    Connection Id: 47
    Current schema:
    Current user: root@localhost
    SSL: Cipher in use: TLS_AES_256_GCM_SHA384 TLSv1.3
    Using delimiter: ;
    Server version: 8.0.30-commercial MySQL Enterprise Server - Commercial
    Protocol version: Classic 10
    Client library: 8.0.28
    Connection: 127.0.0.1 via TCP/IP
    TCP port: 3350
    Server characterset: utf8mb4
    Schema characterset: utf8mb4
    Client characterset: utf8mb4
    Conn. characterset: utf8mb4
    Result characterset: utf8mb4
    Compression: Disabled
    Uptime: 104 days 21 hours 31 min 22.0000 sec


    Threads: 2 Questions: 984 Slow queries: 36 Opens: 623 Flush tables: 4 Open tables: 328 Queries per second avg: 0.000

    此外,客户端可以通过“–ssl-mode”选项设定不同的安全连接,该选项值包括如下:

    • PERFERRED:可能的情况下建立一个安全连接,否则建立一个非安全连接

    • DISABLED:建立非安全连接

    • REQUIRED:建立一个安全连接,无法建立时,则失败。

    • VERIFY_CA:包含“REQUIRED”的要求,但是需要验证服务器的CA数字签名

    • VERIFY_IDENTITY:包含“VERIFY_CA”的要求,但是需要验证签名是否匹配MySQL服务器的主机

    例如,关闭SSL

    $  mysqlsh --ssl-mode=DISABLED root@127.0.0.1:3350
    MySQL 127.0.0.1:3350 JS > \sql
    Switching to SQL mode... Commands end with ;
    MySQL 127.0.0.1:3350 SQL > SHOW VARIABLES LIKE 'have_ssl';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | have_ssl | YES |
    +---------------+-------+
    1 row in set (0.0023 sec)
    MySQL 127.0.0.1:3350 SQL > \status
    MySQL Shell version 8.0.28-commercial


    Connection Id: 49
    Current schema:
    Current user: root@localhost
    SSL: Not in use.
    Using delimiter: ;
    Server version: 8.0.30-commercial MySQL Enterprise Server - Commercial
    Protocol version: Classic 10
    Client library: 8.0.28
    Connection: 127.0.0.1 via TCP/IP
    TCP port: 3350
    Server characterset: utf8mb4
    Schema characterset: utf8mb4
    Client characterset: utf8mb4
    Conn. characterset: utf8mb4
    Result characterset: utf8mb4
    Compression: Disabled
    Uptime: 104 days 21 hours 45 min 48.0000 sec


    Threads: 2 Questions: 996 Slow queries: 36 Opens: 627 Flush tables: 4 Open tables: 332 Queries per second avg: 0.000

    从输出的内容可以看出,当前客户端并没有使用SSL。

    配置安全连接的加密算法

    为服务器和客户端配置复杂的算法及足够长的密钥可以增加安全性,可以通过“–ssl-cipher”选项指定允许使用的加密算法,选项值可以包含多个,用“:”分割。例如,

    --ssl-cipher=DHE-RSA-AES256-SHA:AES128-SHA

    “–ssl-cipher”选项配置包括一个全局系统变量及两个会话状态变量,例如,

    MySQL 127.0.0.1:3350 ssl SQL > SHOW GLOBAL VARIABLES LIKE 'ssl_cipher';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | ssl_cipher | |
    +---------------+-------+
    1 row in set (0.0020 sec)
    MySQL 127.0.0.1:3350 ssl SQL > SHOW SESSION STATUS LIKE 'Ssl_cipher';
    +---------------+------------------------+
    | Variable_name | Value |
    +---------------+------------------------+
    | Ssl_cipher | TLS_AES_256_GCM_SHA384 |
    +---------------+------------------------+
    1 row in set (0.0012 sec)

    全局系统变量“ssl_cipher”表示允许使用的加密算法,如果未指定该选项,则显示空白,意味着可以使用MySQL支持的任何加密算法。“Ssl_cipher”会话状态变量显示当前会话使用的加密算法。

    按用户配置客户端选项

    在创建用户或者更改用户语句里,使用“REQUIRE语句”可以为不同的用户指定是否使用SSL/TLS。选项值包括如下:

    • NONE:默认值,用户没有SSL或X509要求,可以使用安全连接或不安全连接

    • SSL:用户必须使用安全连接

    • X509:用户从客户端必须使用数字证书进行安全连接

    • ISSUER:用户从客户端必须使用有指定CA发行的证书进行连接

    • SUBJECT:用户必须使用安全连接从客户端连接,并要求数字前面指定的“subjecg”区域识别证书的所有者

    • CIPHER:用户必须使用指定加密算法的安全连接

    例如,

    ALTER USER user1@localhost REQUIRE SSL;
    ALTER USER user2@localhost REQUIRE X509;
    ALTER USER user3@localhost REQUIRE CIPHER 'DHE-RSA-AES256-SHA';

    以上内容是关于创建MySQL安全连接的介绍,安全连接可以避免MySQL遭受网络窃听,防止数据信息泄露。感谢您关注“MySQL解决方案工程师”。

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
prtyaaL2
粉丝 1 资源 1949 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  130
统信桌面专业版【全盘安装UOS系统】介绍  128
银河麒麟桌面操作系统安装佳能打印机驱动方法  120
银河麒麟桌面操作系统 V10-SP1用户密码修改  108
麒麟系统连接打印机常见问题及解决方法  25
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
麒麟系统连接打印机常见问题及解决方法 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益210.13元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!