最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
服务器数据库访问控制权限如何配
时间:2026-08-15 20:17:49 编辑:袖梨 来源:一聚教程网
数据库访问控制需完成“身份验证+授权+网络与系统级放行”三步闭环,依次检查监听配置、防火墙规则、用户主机限制、最小权限授予及四层校验(网络、服务、认证、授权)。
服务器数据库访问控制权限配置,核心是“身份验证 + 授权 + 网络与系统级放行”三步闭环。配错任意一环,连接都会失败或被拒绝。
确认数据库监听和网络可达
权限再全,连不上等于零。先确保数据库服务对外暴露:
- MySQL:检查 my.cnf 中 bind-address 是否设为
0.0.0.0或注释掉,默认只监听127.0.0.1;改完重启服务(sudo systemctl restart mysql) - SQL Server:在 SQL Server 配置管理器中启用 TCP/IP 协议,确认 IP 地址选项卡里对应 IP 的 TCP 端口已填(如 1433),且“已启用”打钩
- PostgreSQL:检查 postgresql.conf 的 listen_addresses 设为
'*',并确认 pg_hba.conf 中有类似host all all 0.0.0.0/0 md5的允许规则 - 防火墙必须放行对应端口(如 MySQL 3306、SQL Server 1433),Linux 可用
sudo ufw allow 3306/tcp,Windows 防火墙需新建入站规则
创建用户并绑定可访问来源
MySQL 和 PostgreSQL 使用 用户名@主机 组合标识访问者,这个“主机”就是权限边界:
- 只允许某台应用服务器连接:用具体 IP,例如
'appuser'@'192.168.10.5' - 允许局域网段:用 CIDR 格式,例如
'appuser'@'192.168.10.%'(MySQL 支持通配符,PostgreSQL 需写完整网段) - 生产环境避免用
'%'(代表任意 IP),除非配合强密码+SSL+前置网关 - SQL Server 不依赖 @host 语法,但需在登录名属性中确认“状态 → 登录 → 已启用”,且默认实例对应
NT SERVICEMSSQLSERVER服务 SID 有文件系统权限
按需授予最小必要权限
不给 ALL PRIVILEGES,除非是 DBA 账户。常规应用账号应严格限定范围:
- 只读应用:执行
GRANT SELECT ON database_name.* TO 'user'@'host'; - 增删改应用:补充
INSERT, UPDATE, DELETE,但避开DROP TABLE或CREATE DATABASE - 跨库操作?明确指定库名,别用
*.*—— 全局权限风险极高 - SQL Server 中,优先把用户加入
db_datareader/db_datawriter固定数据库角色,而非直接 GRANT 对象权限 - 记得执行
FLUSH PRIVILEGES;(MySQL)或ALTER ROLE ... ADD MEMBER(SQL Server)使变更即时生效
验证权限链是否完整
一个连接请求要通过四层校验,缺一不可:
- 网络层:目标 IP + 端口能 ping 通、telnet 通
-
服务层:数据库进程正在监听该地址端口(
netstat -tuln | grep :3306) - 认证层:用户名密码正确,且该账号的 host 匹配客户端真实来源 IP
- 授权层:账号拥有 CONNECT 权限(MySQL 自动赋予)、目标库/表的对应 DML 权限