Debian MariaDB权限管理怎么做
导读:Debian 上 MariaDB 权限管理实操指南 一 基础准备与登录 安装与启动 执行:sudo apt update && sudo apt install mariadb-server mariadb-client...
Debian 上 MariaDB 权限管理实操指南
一 基础准备与登录
- 安装与启动
- 执行:
sudo apt update & & sudo apt install mariadb-server mariadb-client - 检查状态:
systemctl status mariadb
- 执行:
- 安全初始化
- 执行:
sudo mysql_secure_installation - 建议选择:启用 unix_socket 认证给 root、移除匿名用户、禁止 root 远程登录、删除 test 库、重载权限表。
- 执行:
- 登录数据库
- 本地:
sudo mysql -u root -p - 远程:
mysql -u < 用户> -p -h < 服务器IP>(需提前为用户授予远程来源主机权限)
- 本地:
二 核心概念与权限级别
- 账户由 ‘用户名’@‘主机’ 唯一确定,例如 ‘admin’@‘localhost’ 与 ‘admin’@‘%’ 是两个不同账户;主机可使用 localhost、IP、域名、%(任意主机) 及通配符(如 192.168.1.%)。
- 权限层级与作用域
- 全局:ON .(所有库与表)
- 数据库:ON db_name.*(某库下所有表)
- 表:ON db_name.tbl(某表)
- 列:在 GRANT 中指定列列表
- 常用权限类别
- 数据操作:SELECT、INSERT、UPDATE、DELETE
- 结构变更:CREATE、ALTER、DROP、INDEX、CREATE VIEW、TRIGGER
- 管理运维:CREATE USER、CREATE DATABASE、GRANT OPTION、RELOAD、SHUTDOWN、SUPER、PROCESS、REPLICATION CLIENT/SLAVE、SHOW DATABASES
- 角色(MariaDB 10.2+):可将一组权限打包为角色,再授予用户,便于批量授权与回收。
三 常用操作命令清单
- 创建与删除账户
- 创建本地账户:
CREATE USER 'app'@'localhost' IDENTIFIED BY 'StrongPass!'; - 创建远程账户:
CREATE USER 'app'@'192.168.10.%' IDENTIFIED BY 'StrongPass!'; - 删除账户:
DROP USER 'app'@'192.168.10.%';
- 创建本地账户:
- 授予权限
- 库级只读:
GRANT SELECT ON sales.* TO 'rep'@'%'; - 库级读写:
GRANT SELECT,INSERT,UPDATE,DELETE ON sales.* TO 'app'@'192.168.10.%'; - 全库全权(谨慎):
GRANT ALL PRIVILEGES ON app_db.* TO 'app'@'%'; - 全局管理(极谨慎):
GRANT CREATE USER, CREATE DATABASE, RELOAD, SUPER ON *.* TO 'admin'@'localhost'; - 授予角色(10.2+):
GRANT 'read_role' TO 'app'@'%';
- 库级只读:
- 撤销权限
- 撤销库级权限:
REVOKE ALL PRIVILEGES ON sales.* FROM 'app'@'192.168.10.%'; - 撤销全局管理权限:
REVOKE SUPER, RELOAD ON *.* FROM 'admin'@'localhost';
- 撤销库级权限:
- 查看与生效
- 查看某用户权限:
SHOW GRANTS FOR 'app'@'192.168.10.%'; - 列出所有账户:
SELECT User,Host FROM mysql.user; - 使变更生效:多数 DCL 会自动刷新;如有需要执行
FLUSH PRIVILEGES;
- 查看某用户权限:
- 修改密码
- 指定账户改密:
SET PASSWORD FOR 'app'@'%' = PASSWORD('NewPass!'); - 当前会话改密:
SET PASSWORD = PASSWORD('NewPass!');
- 指定账户改密:
- 角色管理(10.2+)
- 创建角色:
CREATE ROLE 'read_role'; - 给角色授权:
GRANT SELECT ON sales.* TO 'read_role'; - 回收角色:
REVOKE 'read_role' FROM 'app'@'%';
- 创建角色:
四 远程访问与防火墙
- 创建专用于远程的账户(示例仅允许网段 192.168.10.% 访问):
CREATE USER 'app'@'192.168.10.%' IDENTIFIED BY 'StrongPass!';GRANT SELECT,INSERT,UPDATE,DELETE ON app_db.* TO 'app'@'192.168.10.%';FLUSH PRIVILEGES;
- 服务端配置
- 编辑配置文件(Debian 常见路径):
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf - 注释或调整绑定地址:
#bind-address = 127.0.0.1(允许监听所有地址;如仅需内网,可改为内网地址) - 重启服务:
sudo systemctl restart mariadb
- 编辑配置文件(Debian 常见路径):
- 防火墙放行
- UFW:
sudo ufw allow 3306/tcp - nftables:
sudo nft add rule ip filter input tcp dport 3306 accept
- UFW:
- 连接测试
- 远程:
mysql -u app -p -h < 服务器IP>(确保来源 IP 在授权范围内)
- 远程:
五 安全与最佳实践
- 遵循最小权限原则:应用使用专用账户,避免使用 root;仅授予所需权限与库/表范围。
- 限制来源主机:优先使用 localhost 或明确网段(如 192.168.10.%),谨慎使用 %。
- 强密码策略:长度≥12,包含大小写字母、数字与符号;定期轮换。
- 定期审计:清理无用账户与过期权限,使用
SHOW GRANTS与SELECT User,Host FROM mysql.user;核查。 - 角色化管理(10.2+):按职能创建角色(如只读、读写、管理),提升授权与回收的可维护性。
- 安全初始化:首次部署务必运行
mysql_secure_installation,并按需禁用 root 远程登录。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian MariaDB权限管理怎么做
本文地址: https://pptw.com/jishu/762029.html
