MariaDB在Linux上的权限管理指南
MariaDB作为Linux环境下常用的关系型数据库,其权限管理需结合数据库层命令与系统层配置,确保数据库安全与功能可用性。以下是具体操作流程与关键注意事项:
所有权限操作需以root用户(数据库管理员)身份登录MariaDB。使用以下命令登录:
mysql -u root -p
输入root用户在MariaDB中的密码即可进入命令行界面(提示符为MariaDB [(none)]>)。
使用CREATE USER命令创建用户,需指定用户名、主机限制(决定用户可从哪些主机连接)和密码:
-- 创建仅能从本地连接的用户
CREATE USER 'username'@'localhost' IDENTIFIED BY 'StrongPassword123!';
-- 创建可从任意主机连接的用户(生产环境需谨慎)
CREATE USER 'username'@'%' IDENTIFIED BY 'StrongPassword123!';
通过ALTER USER命令修改用户密码(适用于MariaDB 10.4及以上版本):
ALTER USER 'username'@'localhost' IDENTIFIED BY 'NewSecurePassword456!';
旧版本可使用UPDATE命令直接修改mysql.user表(需刷新权限):
UPDATE mysql.user SET Password = PASSWORD('NewSecurePassword456!')
WHERE User = 'username' AND Host = 'localhost';
FLUSH PRIVILEGES;
使用DROP USER命令彻底删除用户(同时清除其所有权限):
DROP USER 'username'@'localhost';
权限分配是核心环节,需遵循最小权限原则(仅授予用户完成工作所需的最少权限)。
全局权限(管理整个数据库服务器):
GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'localhost' WITH GRANT OPTION;
WITH GRANT OPTION允许用户将自身权限授予其他用户(慎用)。
数据库级权限(针对特定数据库):
GRANT ALL PRIVILEGES ON mydb.* TO 'db_user'@'localhost';
仅允许用户管理mydb数据库的所有表。
表级权限(针对特定表):
GRANT SELECT, INSERT, UPDATE ON mydb.orders TO 'report_user'@'%';
允许用户从任意主机查询、插入、更新mydb.orders表。
特定权限(如仅查询):
GRANT SELECT ON mydb.products TO 'viewer'@'localhost';
权限更改后,需执行FLUSH PRIVILEGES使更改立即生效(MariaDB 10.4+版本会自动刷新,但显式执行更安全):
FLUSH PRIVILEGES;
使用SHOW GRANTS命令查看用户的当前权限:
SHOW GRANTS FOR 'username'@'localhost';
示例输出:
+--------------------------------------------------------------+
| Grants for username@localhost |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'username'@'localhost' |
| GRANT SELECT, INSERT ON `mydb`.`orders` TO 'username'@'localhost' |
+--------------------------------------------------------------+
使用REVOKE命令撤销用户的特定权限(语法与GRANT相反):
-- 撤销表的插入权限
REVOKE INSERT ON mydb.orders FROM 'report_user'@'%';
-- 撤销数据库的所有权限
REVOKE ALL PRIVILEGES ON mydb.* FROM 'db_user'@'localhost';
FLUSH PRIVILEGES;
MariaDB的数据目录(通常为/var/lib/mysql)和配置文件(/etc/mysql/my.cnf或/etc/mysql/mariadb.conf.d/50-server.cnf)需设置正确权限:
# 数据目录归mysql用户所有(确保数据库进程可访问)
sudo chown -R mysql:mysql /var/lib/mysql
# 配置文件归root所有(防止未授权修改)
sudo chown root:root /etc/mysql/my.cnf
# 设置合理权限(数据目录755,配置文件644)
sudo chmod -R 755 /var/lib/mysql
sudo chmod 644 /etc/mysql/my.cnf
开放MariaDB默认端口(3306),允许合法主机访问:
# CentOS(firewalld)
sudo firewall-cmd --permanent --add-service=mysql
sudo firewall-cmd --reload
# Ubuntu(ufw)
sudo ufw allow 3306/tcp
禁止root用户从任意主机连接,降低被攻击风险:
ALTER USER 'root'@'%' DISABLE;
安装后删除默认的test数据库(无实际用途且存在安全风险):
DROP DATABASE IF EXISTS test;
GRANT ALL PRIVILEGES,根据用户角色分配所需权限(如报表用户仅需SELECT权限)。SELECT User, Host, authentication_string FROM mysql.user;查看用户列表,清理闲置账户。GRANT命令的主机限制(如'user'@'特定IP'),而非'%'。通过以上步骤,可实现MariaDB在Linux环境下的精细化权限管理,平衡数据库的可用性与安全性。