- 首页 >
- 问答 >
-
云计算 >
- Linux SQLAdmin权限管理如何实现
Linux SQLAdmin权限管理如何实现
小樊
35
2025-12-21 19:36:08
Linux 上 SQLAdmin 权限管理实现
一 概念与目标
- 在 Linux 环境中,SQLAdmin 通常指用于管理数据库的账户或角色,核心目标是:
- 按“最小权限原则”授予能力,避免滥用 WITH GRANT OPTION 或 SUPERUSER。
- 区分 本地管理 与 远程维护,细化到 主机(host) 与 库/表/模式 级别。
- 保障传输与系统层安全:启用 SSL/TLS、限制来源 IP、加固系统与数据库日志审计。
二 MySQL MariaDB 权限管理
- 基本流程
- 登录数据库:mysql -u root -p
- 创建管理用户(示例限定本地):
- CREATE USER ‘sqladmin’@‘localhost’ IDENTIFIED BY ‘StrongPass!23’;
- 授予权限(示例为全局只读运维,不含 GRANT OPTION):
- GRANT SELECT, SHOW DATABASES, RELOAD, PROCESS, REPLICATION CLIENT ON . TO ‘sqladmin’@‘localhost’;
- 需要远程维护时,创建专用主机账户并限制来源网段:
- CREATE USER ‘sqladmin’@‘192.168.1.%’ IDENTIFIED BY ‘StrongPass!23’;
- GRANT SELECT, SHOW DATABASES, RELOAD, PROCESS, REPLICATION CLIENT ON . TO ‘sqladmin’@‘192.168.1.%’;
- 使权限生效:FLUSH PRIVILEGES;
- 典型场景模板
- 全局只读运维(不含写权限与授权能力):
- GRANT SELECT, SHOW DATABASES, RELOAD, PROCESS, REPLICATION CLIENT ON . TO ‘sqladmin_ro’@‘localhost’;
- 单库 DBA(可对指定库执行 DDL/DML,但不授予 GRANT OPTION):
- GRANT ALL PRIVILEGES ON mydb.* TO ‘sqladmin_mydb’@‘localhost’;
- 临时全权维护(任务完成后回收):
- GRANT ALL PRIVILEGES ON . TO ‘sqladmin_tmp’@‘localhost’ WITH GRANT OPTION;
- 完成后:REVOKE ALL PRIVILEGES, GRANT OPTION FROM ‘sqladmin_tmp’@‘localhost’;
- 撤销与查询
- 撤销:REVOKE ALL PRIVILEGES, GRANT OPTION FROM ‘sqladmin’@‘localhost’;
- 查询:SHOW GRANTS FOR ‘sqladmin’@‘localhost’;
- 远程与系统配置要点
- 开放端口(仅内网):firewall-cmd --permanent --zone=public --add-port=3306/tcp && firewall-cmd --reload
- 如启用 SELinux:setsebool -P httpd_can_network_connect_db 1(按需)
- 建议启用 SSL/TLS 并强制要求加密连接,限制来源 IP,避免使用 ‘%’ 通配主机。
三 PostgreSQL 权限管理
- 基本流程
- 登录数据库:sudo -u postgres psql
- 创建可登录的管理角色(避免直接赋予 SUPERUSER,按需授予 CREATEDB/CREATEROLE):
- CREATE ROLE sqladmin WITH LOGIN PASSWORD ‘StrongPass!23’ CREATEDB CREATEROLE;
- 授予库级权限(示例):
- GRANT ALL PRIVILEGES ON DATABASE mydb TO sqladmin;
- 授予模式与表权限(示例):
- GRANT USAGE ON SCHEMA public TO sqladmin;
- GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO sqladmin;
- 对未来表生效:ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO sqladmin;
- 撤销与查询
- 撤销:REVOKE ALL PRIVILEGES ON DATABASE mydb FROM sqladmin;
- 查询:\du sqladmin;\dp
- 安全建议
- 不建议将日常维护账户设为 SUPERUSER;仅在迁移/紧急维护时临时提升并通过审计回收。
四 Linux 系统层安全与运维
- 系统账户与 sudo
- 创建系统管理用户:sudo useradd -m -s /bin/bash sqladmin
- 设置密码:sudo passwd sqladmin
- 加入管理员组(CentOS 常见为 wheel):sudo usermod -aG wheel sqladmin
- 使用 visudo 安全编辑 sudoers,按需授予特定命令的免密执行(如备份脚本)
- 日志与审计
- 系统日志:journalctl -u mysqld/mariadb -f(实时),/var/log/mysqld.log
- 安全日志:/var/log/secure(SSH、sudo 等)
- 防火墙与网络
- 仅开放必要端口(如 3306/5432)到受控网段
- 备份与恢复
- MySQL:mysqldump -u root -p --single-transaction --routines --triggers --databases mydb > backup.sql
- PostgreSQL:pg_dump -U postgres -h localhost -F c -b -v -f mydb.dump mydb
- 安全加固
- 强密码策略、定期轮换;限制数据库账户来源 IP;启用 SSL/TLS;定期审查用户与权限。
五 快速命令清单
- MySQL/MariaDB
- 创建只读运维账户:CREATE USER ‘sqladmin_ro’@‘localhost’ IDENTIFIED BY ‘StrongPass!23’;
- 授权只读运维:GRANT SELECT, SHOW DATABASES, RELOAD, PROCESS, REPLICATION CLIENT ON . TO ‘sqladmin_ro’@‘localhost’; FLUSH PRIVILEGES;
- 授权单库 DBA:GRANT ALL PRIVILEGES ON sales.* TO ‘sqladmin_sales’@‘localhost’; FLUSH PRIVILEGES;
- 撤销:REVOKE ALL PRIVILEGES, GRANT OPTION FROM ‘sqladmin’@‘localhost’;
- PostgreSQL
- 创建管理角色:CREATE ROLE sqladmin WITH LOGIN PASSWORD ‘StrongPass!23’ CREATEDB CREATEROLE;
- 授权库:GRANT ALL PRIVILEGES ON DATABASE sales TO sqladmin;
- 授权模式与表:GRANT USAGE ON SCHEMA public TO sqladmin; GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO sqladmin;
- 未来表默认授权:ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO sqladmin;