温馨提示×

Ubuntu MariaDB权限管理指南

小樊
50
2025-11-02 17:33:08
栏目: 云计算

Ubuntu MariaDB权限管理指南

1. 登录MariaDB

首先需要以root用户(或具有sudo权限的用户)登录MariaDB服务器。打开终端,输入以下命令:

sudo mysql -u root -p

输入密码后,进入MariaDB命令行界面(提示符为MariaDB [(none)]>)。

2. 创建用户

创建用户时,需指定用户名主机名(决定登录来源)和密码。常见场景如下:

  • 本地登录用户(仅允许从本机访问):
    CREATE USER 'username'@'localhost' IDENTIFIED BY 'StrongPassword123!';
    
  • 远程登录用户(允许从特定IP访问,推荐):
    CREATE USER 'username'@'192.168.1.100' IDENTIFIED BY 'StrongPassword123!';
    
  • 任意主机登录用户(谨慎使用,仅测试环境推荐):
    CREATE USER 'username'@'%' IDENTIFIED BY 'StrongPassword123!';
    

注:username为自定义用户名,StrongPassword123!需替换为包含大小写字母、数字和符号的复杂密码。

3. 分配权限

权限分配需遵循最小权限原则(仅授予用户完成任务所需的最小权限),常见权限类型及示例:

  • 授予特定数据库的所有权限(适用于需要完全管理某数据库的用户):
    GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
    
  • 授予特定权限(适用于仅需读写数据的用户,推荐):
    GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.* TO 'username'@'localhost';
    
  • 授予全局管理权限(仅用于管理员账户,如创建数据库、用户):
    GRANT CREATE USER, CREATE DATABASE ON *.* TO 'admin'@'localhost';
    
  • 使用角色简化权限管理(MariaDB 10.2+支持,适用于多用户共享权限场景):
    -- 创建角色并授予权限
    CREATE ROLE 'read_only_role';
    GRANT SELECT ON database_name.* TO 'read_only_role';
    -- 将角色授予用户
    GRANT 'read_only_role' TO 'report_user'@'localhost';
    

分配权限后,需执行以下命令使更改生效:

FLUSH PRIVILEGES;

4. 查看用户权限

验证用户权限是否正确分配,可使用以下命令:

  • 查看指定用户的权限
    SHOW GRANTS FOR 'username'@'localhost';
    
    示例输出:
    +--------------------------------------------------------------+
    | Grants for username@localhost                                |
    +--------------------------------------------------------------+
    | GRANT USAGE ON *.* TO `username`@`localhost`                 |
    | GRANT SELECT, INSERT, UPDATE, DELETE ON `mydb`.* TO `username`@`localhost` |
    +--------------------------------------------------------------+
    
  • 查看所有用户及主机信息
    SELECT User, Host FROM mysql.user;
    

5. 撤销权限

撤销权限时,需明确指定权限范围(如特定数据库、表),避免误操作:

  • 撤销特定权限(如撤销SELECT权限):
    REVOKE SELECT ON database_name.* FROM 'username'@'localhost';
    
  • 撤销所有权限(仅撤销指定范围的权限,不影响其他范围):
    REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'localhost';
    

撤销后需执行FLUSH PRIVILEGES;使更改生效。

6. 删除用户

删除用户前,需先撤销其所有权限(避免权限残留),再执行删除命令:

-- 撤销用户所有权限
REVOKE ALL PRIVILEGES ON *.* FROM 'username'@'localhost';
-- 删除用户
DROP USER 'username'@'localhost';
-- 刷新权限
FLUSH PRIVILEGES;

注:直接删除用户表中的记录不会回收权限,必须使用DROP USER命令。

7. 安全建议

  • 密码安全:使用强密码(混合大小写字母、数字、符号),定期更换密码。
  • 最小权限原则:仅授予用户完成任务所需的最低权限(如报表用户仅需SELECT权限,避免使用ALL PRIVILEGES)。
  • 限制远程登录:优先使用localhost,若需远程访问,明确指定IP范围(如192.168.1.%),避免使用%
  • 定期清理用户:移除无用账户(如离职员工的账户),降低安全风险。

8. 防火墙设置(可选)

若需允许远程访问,需开放MariaDB默认端口(3306):

sudo ufw allow 3306/tcp

建议仅允许可信IP访问(如公司IP),提高安全性:

sudo ufw allow from 192.168.1.100 to any port 3306

0