在开始权限管理前,需通过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环境下的精细化权限管理,兼顾安全性与可用性。