MYSQL 8.0之安全篇

本文详细介绍了MYSQL 8.0的安全特性,包括密码认证策略的修改与卸载、密码加密方式的选择,以及访问控制和账户管理的各个方面。重点讲解了连接验证和请求验证的两个阶段,以及如何创建、修改和管理账户权限。文章还提到了账户锁定、密码过期策略、重用限制和验证要求,强调了安全管理和密码管理在数据库安全中的重要性。
摘要由CSDN通过智能技术生成

欢迎关注笔者的微信公众号


本文是笔者基于MYSQL8.0官方手册并结合自身实际经验编写,不足之处欢迎指出。编写不易,欢迎署名转载。

密码认证组件

MYSQL是一个组件式架构,MYSQL 8.0+默认启用了密码校验组件validate_password,它强迫你设置很复杂的密码以保证数据库安全,对于个人来说,你不能设置如123456这样的密码,当你在设置这样的密码的时候会报如下错误:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

笔者认为这对于个人学习而言非常碍事,解决方案有两种:

  • 修改密码认证策略

  • 卸载密码认证组件

修改密码认证策略

官方文档

  1. 查看当前认证策略

    mysql> SHOW VARIABLES LIKE 'validate_password.%';
    

在这里插入图片描述
这几个认证策略就不一一解释了,就是字面意思。

  1. 修改认证策略

    • 设置密码长度为4个字符

      mysql> SET GLOBAL validate_password_length = 4;
      
    • 设置认证策略低级

      SET GLOBAL validate_password_policy=LOW;
      

    其他的参数照着改就行,最后最好重启一下服务器。

卸载密码认证组件

官方文档

笔者觉得MYSQL 8.0+默认的密码认证策略非常碍事,所以直接卸载掉了;

  • 卸载密码认证组件

    UNINSTALL COMPONENT 'file://component_validate_password';
    
  • 安装密码认证组件

    INSTALL COMPONENT 'file://component_validate_password';
    

密码加密方式

官方文档

问题

在MYSQL 8.0中包含了一下三种加密插件

  • caching_sha2_password

  • sha256_password

  • mysql_native_password

mysql_native_password插件相比,caching_sha2_passwordsha256_password身份验证插件提供了更安全的密码加密。且caching_sha2_password在性能上优于sha256_password,因此在MYSQL 8.0中caching_sha2_password成为了默认的加密插件。

  • 修改MYSQL配置文件:/etc/my.cnf

    vim /etc/my.cnf
    ...
    [mysqld]
    default_authentication_plugin=mysql_native_password
    ...
    
  • 也可以在服务器启动时添加命令行参数

     --default-authentication-plugin=mysql_native_password 加上  --initialize选项 或者 --initialize-insecure选项
    

这种方法是为了兼容那些旧版本客户端能连接到新版本的MYSQL服务器,最好的做法是不要更改服务端参数,而是升级客户端,对于Java程序员来说,升级MYSQL驱动到8.0.9或更高的版本。

修改现有账户的加密方式

在MYSQL安装的时候默认创建了'root'@'localhost'账号,因此只要修改了账户的加密方式旧版的客户端就可以通过此账号密码连接数据库。

ALTER USER 'root'@'localhost'  IDENTIFIED WITH mysql_native_password  BY 'password';

访问控制和账户管理

用户名和密码

官方文档

默认情况下,MYSQL将用户名和连接主机信息存储在user表,位于mysql系统数据库中。

注意

在MYSQL中,用户名相同,连接主机不同被认为是两个账号。

在这里插入图片描述
%表示这个账号可从任何IP地址连接到服务器端。

默认情况下MYSQL只创建了'root'@'localhost'这个账号,这只能从本地连接到数据库,如果要远程连接需要创建新的用户,连接主机IP设为%,笔者这里创建了replroot两个可从远程连接的账户。

下面是MYSQL关于用户名和账户的一些注意事项:

  • MYSQL的用户名最大长度限制为32字符长度,这是一种硬编码,无法更改。

  • MYSQL的账户密码通过加密插件加密后存储在user表中。

  • 如果用户名和密码使用了非ASCII字符,那么可以在连接时通过MYSQL_SET_CHARSET_NAME选项指定。

  • MYSQL不支持ucs2, utf16, utf32,这三种字符集。

  • 如果在命令行中通过--password-p选项指定密码,那么密码与选项之间不允许有空白。

    $ mysql -u finley -p db_name
    

    以上db_name会认为是连接的数据库名而不是密码。

    $ mysql -u finley -ppassword db_name
    

MYSQL特权

官方文档](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html)

MYSQL中的特权是MYSQL用来判断账户是否具有能执行某种操作的凭证。

MYSQL中特权分三类:

  • 管理员特权,这是全局特权,可以操作整个服务器资源,root用户就是管理员特权,可以操作所有资源

  • 数据库特权,适用于数据库及其中的所有对象。可以为特定数据库或全局授予这些特权,以便将它们应用于所有数据库。

  • 可以为数据库中的特定对象,数据库中给定类型的所有对象(例如数据库中的所有表)或所有对象的全局对象授予表,索引,视图和存储例程等数据库对象的特权。所有数据库中给定类型的对象。

特权分类

MYSQL特权分为静态特权和动态特权,特权是静态的(内置于服务器中)还是动态的(在运行时定义)对MYSQL行为有不同的影响。特权是静态还是动态会影响将其授予用户帐户和角色的可用性。

MYSQL的特权信息存储在mysql数据库中,具体的数据表下一章会介绍。

静态特权
特权 表中字段 上下文
ALL PRIVILEGES Synonym for “all privileges” Server administration
ALTER Alter_priv Tables
ALTER ROUTINE Alter_routine_priv Stored routines
CREATE Create_priv Databases, tables, or indexes
CREATE ROLE Create_role_priv Server administration
CREATE ROUTINE Create_routine_priv Stored routines
CREATE TABLESPACE Create_tablespace_priv Server administration
CREATE TEMPORARY TABLES Create_tmp_table_priv Tables
CREATE USER Create_user_priv Server administration
CREATE VIEW Create_view_priv Views
DELETE Delete_priv Tables
DROP Drop_priv Databases, tables, or views
DROP ROLE Drop_role_priv Server administration
EVENT Event_priv Databases
EXECUTE Execute_priv Stored routines
FILE File_priv File access on server host
GRANT OPTION Grant_priv Databases, tables, or stored routines
INDEX Index_priv Tables
INSERT Insert_priv Tables or columns
LOCK TABLES Lock_tables_priv Databases
PROCESS Process_priv Server administration
PROXY See proxies_priv table Server administration
REFERENCES References_priv Databases or tables
RELOAD Reload_priv Server administration
REPLICATION CLIENT Repl_client_priv Server administration
REPLICATION SLAVE Repl_slave_priv Server administration
SELECT Select_priv Tables or columns
SHOW DATABASES Show_db_priv Server administration
SHOW VIEW Show_view_priv Views
SHUTDOWN Shutdown_priv Server administration
SUPER Super_priv Server administration
TRIGGER Trigger_priv Tables
UPDATE Update_priv Tables or columns
USAGE Synonym for "no privileges" Server administration
动态特权
特权 上下文
APPLICATION_PASSWORD_ADMIN Dual password administration
AUDIT_ADMIN Audit log administration
BACKUP_ADMIN Backup administration
BINLOG_ADMIN Backup and Replication administration
BINLOG_ENCRYPTION_ADMIN Backup and Replication administration
CLONE_ADMIN Clone administration
CONNECTION_ADMIN Server administration
ENCRYPTION_KEY_ADMIN Server administration
FIREWALL_ADMIN Firewall administration
FIREWALL_USER Firewall administration
GROUP_REPLICATION_ADMIN
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值