Mysql的安全管理
数据库安全可以从多个方面去进行防护
- 用户账户管理:创建用户并为其分配合适的权限,设置强密码,定期更换密码。
- SSL/TLS加密:通过启用SSL/TLS加密,可以加密MySQL的客户端和服务器之间的通信,以防止数据在传输过程中被窃取或篡改。为MySQL配置和使用有效的SSL/TLS证书。
- 防火墙保护:通过配置网络防火墙,限制对MySQL服务器的访问。只允许来自受信任的IP地址或网络的连接,并阻止不必要的外部访问。
- 打补丁:定期更新数据库软件,确保MySQL服务器和相关软件保持最新的安全更新和补丁。
账户权限管理
Mysql先会校验当前用户是否允许连接到服务器,比如User如果是 root@localhost,表明它只允许root用户本机连接到Mysql服务器。如果都不能连接到服务器也就没有后续的权限管理了。
Mysql权限管理则涉及到多个表以及配置。关键的几个表有:
-
mysql.user:该表存储了MySQL服务器上的用户账号信息,包括用户名、密码和权限等。
-
mysql.db:该表记录了数据库级别的权限信息,指定了用户对于特定数据库的访问权限。
-
mysql.tables_priv:该表存储了表级别的权限信息,指定了用户对于特定表的操作权限,如SELECT、INSERT、UPDATE、DELETE等。
-
mysql.columns_priv:该表存储了列级别的权限信息,指定了用户对于特定列的操作权限。
此外,还有其他一些系统表用于存储更细粒度的权限信息,如mysql.procs_priv用于存储存储过程权限、mysql.proxies_priv用于存储代理权限等。
User表说明:
(1) Host表示该用户可以登录的ip, 如果是localhost表示只能本机登录,不能远程登录,注意在实际开发中,我们只能让用户本机登录mysql
(2) User字段;用户名 ,说明在mysql中,一个完整的用户名是有User和Host组成比如 ‘root’@‘localhost’;
(3) Password:用户密码, 使用password函数加密的.
创建账户并授予权限
use mysql;
#创建账户
CREATE USER 'root'@'%';
#修改密码
ALTER USER 'root'@'%' IDENTIFIED with mysql_native_password by '123456';
#给角色授权
grant all privileges on *.* to "root"@"%";
#刷新权限
flush privileges;
#修改主机
update mysql.user set host='具体要指定的主机ip' where user='root';
#刷新权限
flush privileges;
查看密码认证插件
注意示例中的sql均为mysql8,在修改密码时可能会提示密码强度不够,注意
vi /etc/my.cnf
添加 这行代码 修改 MySQL的密码认证插件
default_authentication_plugin=mysql_native_password
以上为账户权限涉及到的一些操作,后续会补充防火墙以及具体密码认证插件的升级