在开始权限管理前,需通过mysql_secure_installation脚本完成基础安全配置,包括设置root密码、删除匿名用户、禁止root远程登录及删除测试数据库。此步骤能有效降低初始环境的安全风险。
使用CREATE USER命令创建用户,语法格式为:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
username:用户名(如appuser);host:允许访问的主机(localhost表示仅本地访问,%表示允许远程访问,建议根据需求限制);password:用户密码(需使用强密码,避免弱口令)。示例:创建仅能从本地访问的appuser用户,密码为Password123:
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'Password123';
使用ALTER USER命令修改用户密码,语法格式为:
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';
示例:将appuser的密码修改为NewPassword456:
ALTER USER 'appuser'@'localhost' IDENTIFIED BY 'NewPassword456';
使用DROP USER命令删除用户,语法格式为:
DROP USER 'username'@'host';
示例:删除appuser用户:
DROP USER 'appuser'@'localhost';
权限分配是权限管理的核心,需遵循最小必要权限原则(仅授予用户完成工作所需的最低权限),避免过度授权。
使用GRANT命令授予权限,语法格式为:
GRANT privilege_type ON database_name.table_name TO 'username'@'host';
privilege_type:权限类型(如SELECT、INSERT、UPDATE、DELETE等,可组合使用);database_name:数据库名(*表示所有数据库);table_name:表名(*表示该数据库下的所有表)。常见场景示例:
mydatabase数据库的所有权限:GRANT ALL PRIVILEGES ON mydatabase.* TO 'appuser'@'localhost';mydatabase数据库的查询、插入、更新、删除权限:GRANT SELECT, INSERT, UPDATE, DELETE ON mydatabase.* TO 'appuser'@'localhost';GRANT CREATE ON *.* TO 'adminuser'@'localhost';执行GRANT命令后,需使用FLUSH PRIVILEGES;命令使权限更改立即生效(MariaDB 10.4及以上版本会自动刷新,但显式执行更安全)。
使用REVOKE命令撤销已授予的权限,语法格式与GRANT类似:
REVOKE privilege_type ON database_name.table_name FROM 'username'@'host';
示例:撤销appuser对mydatabase数据库的所有权限:
REVOKE ALL PRIVILEGES ON mydatabase.* FROM 'appuser'@'localhost';
修改root用户的访问主机为localhost,防止远程攻击:
ALTER USER 'root'@'%' DISABLE;
或通过配置文件(/etc/my.cnf)设置bind-address = 127.0.0.1,限制MariaDB仅监听本地连接。
MariaDB的数据目录(通常为/var/lib/mysql)需设置为仅mysql用户可访问,避免其他用户篡改数据:
sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod -R 700 /var/lib/mysql
通过防火墙(如firewalld或iptables)限制MariaDB默认端口(3306)的访问,仅允许可信IP地址连接:
# 允许192.168.1.0/24网段访问3306端口
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept' --permanent
sudo firewall-cmd --reload
通过SSL/TLS加密客户端与服务器之间的通信,防止数据泄露。需在/etc/my.cnf中配置证书路径,并启用加密:
[mysqld]
ssl-ca=/path/to/ca-cert.pem
ssl-cert=/path/to/server-cert.pem
ssl-key=/path/to/server-key.pem
require_secure_transport = ON # MariaDB 10.3及以上版本支持
使用SHOW GRANTS命令查看用户的权限信息:
SHOW GRANTS FOR 'username'@'host';
示例:查看appuser的权限:
SHOW GRANTS FOR 'appuser'@'localhost';
定期检查数据库用户及权限,删除闲置用户,调整过度授权:
-- 查看所有用户
SELECT User, Host FROM mysql.user;
-- 查看用户权限详情
SELECT * FROM mysql.db WHERE User='appuser';
通过以上步骤,可实现MariaDB在Linux环境下的精细化权限管理,兼顾安全性与可用性。