一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

服务器数据库访问控制权限如何配

时间:2026-08-15 20:17:49 编辑:袖梨 来源:一聚教程网

数据库访问控制需完成“身份验证+授权+网络与系统级放行”三步闭环,依次检查监听配置、防火墙规则、用户主机限制、最小权限授予及四层校验(网络、服务、认证、授权)。

服务器数据库访问控制权限配置,核心是“身份验证 + 授权 + 网络与系统级放行”三步闭环。配错任意一环,连接都会失败或被拒绝。

确认数据库监听和网络可达

权限再全,连不上等于零。先确保数据库服务对外暴露:

  1. MySQL:检查 my.cnfbind-address 是否设为 0.0.0.0 或注释掉,默认只监听 127.0.0.1;改完重启服务(sudo systemctl restart mysql
  2. SQL Server:在 SQL Server 配置管理器中启用 TCP/IP 协议,确认 IP 地址选项卡里对应 IP 的 TCP 端口已填(如 1433),且“已启用”打钩
  3. PostgreSQL:检查 postgresql.conflisten_addresses 设为 '*',并确认 pg_hba.conf 中有类似 host all all 0.0.0.0/0 md5 的允许规则
  4. 防火墙必须放行对应端口(如 MySQL 3306、SQL Server 1433),Linux 可用 sudo ufw allow 3306/tcp,Windows 防火墙需新建入站规则

创建用户并绑定可访问来源

MySQL 和 PostgreSQL 使用 用户名@主机 组合标识访问者,这个“主机”就是权限边界:

  1. 只允许某台应用服务器连接:用具体 IP,例如 'appuser'@'192.168.10.5'
  2. 允许局域网段:用 CIDR 格式,例如 'appuser'@'192.168.10.%'(MySQL 支持通配符,PostgreSQL 需写完整网段)
  3. 生产环境避免用 '%'(代表任意 IP),除非配合强密码+SSL+前置网关
  4. SQL Server 不依赖 @host 语法,但需在登录名属性中确认“状态 → 登录 → 已启用”,且默认实例对应 NT SERVICEMSSQLSERVER 服务 SID 有文件系统权限

按需授予最小必要权限

不给 ALL PRIVILEGES,除非是 DBA 账户。常规应用账号应严格限定范围:

  1. 只读应用:执行 GRANT SELECT ON database_name.* TO 'user'@'host';
  2. 增删改应用:补充 INSERT, UPDATE, DELETE,但避开 DROP TABLECREATE DATABASE
  3. 跨库操作?明确指定库名,别用 *.* —— 全局权限风险极高
  4. SQL Server 中,优先把用户加入 db_datareader / db_datawriter 固定数据库角色,而非直接 GRANT 对象权限
  5. 记得执行 FLUSH PRIVILEGES;(MySQL)或 ALTER ROLE ... ADD MEMBER(SQL Server)使变更即时生效

验证权限链是否完整

一个连接请求要通过四层校验,缺一不可:

  1. 网络层:目标 IP + 端口能 ping 通、telnet 通
  2. 服务层:数据库进程正在监听该地址端口(netstat -tuln | grep :3306
  3. 认证层:用户名密码正确,且该账号的 host 匹配客户端真实来源 IP
  4. 授权层:账号拥有 CONNECT 权限(MySQL 自动赋予)、目标库/表的对应 DML 权限

热门栏目