当前位置: 首页 > news >正文

从0-1学习Mysql第九章: 分区与分库分表

第9章:安全与权限管理

在数据库管理中,安全性是至关重要的一个方面。随着应用程序的规模不断扩大,数据泄露和不当访问带来的风险也变得越来越严重。MySQL 提供了强大的用户和权限管理功能,可以确保只有经过授权的用户能够访问和操作数据库中的数据。本章将介绍 MySQL 的用户和权限管理,数据库安全配置,密码策略与安全最佳实践。

1. 用户与权限管理(GRANTREVOKE

MySQL 中的用户和权限管理用于控制哪些用户可以访问哪些数据库,并限制用户对数据的操作权限。常见的权限包括 SELECTINSERTUPDATEDELETE 等。

1.1 创建用户

在 MySQL 中,我们可以使用 CREATE USER 命令创建新用户。通常,我们还需要为该用户指定一个密码。

CREATE USER 'username'@'host' IDENTIFIED BY 'password';
  • 'username':用户的名字。
  • 'host':用户连接的主机,可以是 IP 地址、localhost%(表示任何主机)。
  • 'password':用户的密码。
示例:创建一个名为 john 的用户,并设置密码
CREATE USER 'john'@'localhost' IDENTIFIED BY 'password123';
1.2 授予权限(GRANT

GRANT 命令用于授予用户对某个数据库或表的访问权限。权限可以是 SELECTINSERTUPDATEDELETE 等操作。

GRANT privilege_type ON database_name TO 'username'@'host';
  • privilege_type:要授予的权限类型(如 SELECTALL PRIVILEGES 等)。
  • database_name:要授予权限的数据库名称,可以指定特定的表或数据库。
  • username:要授予权限的用户名。
  • host:用户连接的主机。
示例:授予 john 用户对 my_database 数据库的所有权限
GRANT ALL PRIVILEGES ON my_database.* TO 'john'@'localhost';

这条命令授予了用户 johnmy_database 数据库的所有权限(如 SELECTINSERTUPDATE 等)。

1.3 撤销权限(REVOKE

REVOKE 命令用于撤销用户的权限。

REVOKE privilege_type ON database_name FROM 'username'@'host';
示例:撤销 john 用户对 my_database 数据库的 INSERT 权限
REVOKE INSERT ON my_database.* FROM 'john'@'localhost';

这条命令撤销了 john 用户对 my_database 数据库的 INSERT 权限。

1.4 刷新权限

在授予或撤销权限后,执行 FLUSH PRIVILEGES 命令来重新加载权限表,使权限更改生效。

FLUSH PRIVILEGES;

2. 数据库安全配置

为了确保数据库的安全性,MySQL 提供了一些配置选项,用于限制访问和加密连接。常见的安全配置包括启用 SSL、IP 限制等。

2.1 启用 SSL

启用 SSL(Secure Sockets Layer)可以加密客户端与 MySQL 服务器之间的连接,确保数据在传输过程中不会被窃听或篡改。

  1. 生成 SSL 证书和密钥:

    openssl genpkey -algorithm RSA -out server-key.pem
    openssl req -new -key server-key.pem -out server-req.pem
    openssl x509 -req -in server-req.pem -out server-cert.pem -signkey server-key.pem -days 365
    
  2. 配置 MySQL 启用 SSL:
    编辑 MySQL 配置文件 my.cnfmy.ini,在 [mysqld] 部分添加以下配置:

    [mysqld]
    ssl-ca = /path/to/ca-cert.pem
    ssl-cert = /path/to/server-cert.pem
    ssl-key = /path/to/server-key.pem
    
  3. 重启 MySQL 服务:

    sudo systemctl restart mysql
    
  4. 验证 SSL 是否启用:
    使用 SHOW VARIABLES 命令查看 have_ssl 变量的值:

    SHOW VARIABLES LIKE '%ssl%';
    
2.2 IP 限制

为了防止未经授权的主机连接到数据库服务器,可以限制只有指定 IP 地址的客户端才能连接到 MySQL。

  • 通过 GRANT 命令设置 IP 限制:
GRANT ALL PRIVILEGES ON my_database.* TO 'john'@'192.168.1.100' IDENTIFIED BY 'password123';

这条命令表示用户 john 只能从 192.168.1.100 这台主机连接到数据库。

2.3 禁用远程 root 用户登录

为了增强安全性,通常建议禁用 root 用户通过远程主机连接。可以在创建用户时指定只允许 localhost 连接,或者修改现有的 root 用户配置。

UPDATE mysql.user SET host='localhost' WHERE user='root';
FLUSH PRIVILEGES;

3. 密码策略与安全最佳实践

确保数据库的安全性,密码策略至关重要。一个强密码可以有效地防止暴力破解攻击。

3.1 强密码策略

MySQL 提供了密码验证插件,可以设置密码的复杂度要求。可以使用 validate_password 插件来启用密码策略。

  1. 启用 validate_password 插件:
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
  1. 配置密码策略:
SET GLOBAL validate_password.policy = STRONG;  -- 设置为强密码策略
SET GLOBAL validate_password.length = 12;  -- 设置密码最小长度为 12
  1. 验证密码策略:
SHOW VARIABLES LIKE 'validate_password%';
3.2 密码加密与存储

MySQL 默认使用加密算法存储密码,确保密码在数据库中不以明文形式存储。在 MySQL 5.7 及以上版本,密码使用 SHA-256 加密。

  • 在创建或修改用户时,密码会自动加密:
CREATE USER 'john'@'localhost' IDENTIFIED BY 'password123';
3.3 定期更新密码

为了防止密码泄露,定期更新密码是数据库安全的一个重要措施。你可以设置过期时间来强制用户定期更改密码。

ALTER USER 'john'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;

这条命令表示 john 用户的密码每 90 天过期,需要更新。

3.4 审计和日志记录

MySQL 提供了日志功能,可以用来记录用户的操作,以便进行审计和追踪。常见的日志包括:

  • 错误日志:记录数据库启动、关闭和运行时的错误。
  • 查询日志:记录所有执行的 SQL 查询。
  • 慢查询日志:记录执行时间超过指定阈值的查询。

启用查询日志:

SET global general_log = 1;
SET global log_output = 'table';

启用慢查询日志:

SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 2;  -- 设置查询时间超过 2 秒的为慢查询

4. 常见错误示例与解释

4.1 没有使用加密连接
CREATE USER 'john'@'%' IDENTIFIED BY 'password123';

错误原因:默认情况下,这样的用户没有启用加密连接。建议启用 SSL 连接,确保数据传输安全。

4.2 给所有用户授予过多权限
GRANT ALL PRIVILEGES ON *.* TO 'john'@'%' WITH GRANT OPTION;

错误原因ALL PRIVILEGES 会授予用户对所有数据库的所有权限,WITH GRANT OPTION 允许用户将权限授予其他用户。这样可能导致权限滥用。应该根据实际需要最小化权限。

4.3 不定期更新密码

如果密码不定期更新,可能会被攻击者猜测或者暴力破解。建议启用密码过期策略,并要求用户定期更新密码。

5. 常见面试题及解答

  1. 如何在 MySQL 中创建一个只允许从某个 IP 连接的用户?
GRANT ALL PRIVILEGES ON my_database.* TO 'john'@'192.168.1.100' IDENTIFIED BY 'password123';
  1. 如何为用户设置密码过期策略?
ALTER USER 'john'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
  1. 什么是 GRANT OPTION

GRANT OPTION 允许用户将授予自己的权限再授予其他用户。它通常需要谨慎使用,以避免滥用。

  1. 如何启用 SSL 连接?

可以在 MySQL 配置文件中启用 SSL,并为 MySQL 服务器生成证书和密钥。然后,设置相关配置,确保加密连接。


小结

本章介绍了 MySQL 的安全与权限管理,包括如何管理用户和权限、如何配置数据库的安全设置、密码策略和最佳实践等。通过这些设置,可以确保数据库的安全性,防止未授权访问,减少数据泄漏的风险。掌握这些安全管理技巧,对于维护数据库的长期稳定运行至关重要。

相关文章:

  • 【网络安全 | 漏洞挖掘】利用文件上传功能的 IDOR 和 XSS 劫持会话
  • React(12)案例前期准备
  • PyQT6是干啥的?
  • 2.数据结构:1.Tire 字符串统计
  • PDF文档中表格以及形状解析
  • Electron一小时快速上手
  • 【Swift 算法实战】城市天际线问题解法
  • 231.跳跃游戏
  • 蓝桥杯备考:DFS剪枝之数的划分
  • React 组件基础介绍
  • 新一代跨境电商ERP系统:从订单到发货的全流程自动化管理
  • Git GitHub基础
  • Web Worker 使用教程
  • 执行yum -y install npt 报错解决
  • linux ununtu通过nginx-1.6.2.tar.gz安装nginx并安装在自定义目录XXX下 的步骤
  • 示波器探头衰减值:简单来说就是“信号缩小器
  • docker启动elasticsearch,挂载文件报错:Device or resource busy
  • ssh配置 远程控制 远程协作 github本地配置
  • 蓝桥杯备赛-前缀和-可获得的最小取值
  • 信号处理:互相关函数
  • 修改wordpress的站点地址/seo网站排名后退
  • 在线音乐制作网站/2022年五月份热点事件
  • 做业务不花钱的网站有哪些/网站设计模板
  • 图片发到哪些网站 seo/seo对网店推广的作用
  • 东道设计学院/seo是什么品牌
  • 企业网站托管如何更有效/论坛优化seo