温馨提示×

Linux SQLAdmin权限管理如何实现

小樊
35
2025-12-21 19:36:08
栏目: 云计算

Linux 上 SQLAdmin 权限管理实现

一 概念与目标

  • Linux 环境中,SQLAdmin 通常指用于管理数据库的账户或角色,核心目标是:
    • 按“最小权限原则”授予能力,避免滥用 WITH GRANT OPTIONSUPERUSER
    • 区分 本地管理远程维护,细化到 主机(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;

0