数据库访问控制(Access Control)是指只允许被授权的用户/应用,以被允许的方式访问被授权的数据。下面从策略设计 → 技术实现 → 常见方案 → 最佳实践四个层面说明。
GRANT 权限reader:SELECTwriter:INSERT/UPDATEadmin:ALL以 MySQL 为例:
-- 创建只读用户
CREATE USER 'report'@'%' IDENTIFIED BY 'pwd';
GRANT SELECT ON db.* TO 'report'@'%';
-- 创建读写用户
CREATE USER 'app'@'%' IDENTIFIED BY 'pwd';
GRANT SELECT, INSERT, UPDATE ON db.* TO 'app'@'%';
✅ 原则:
GRANT SELECT (id, name) ON user TO 'hr';
CREATE VIEW v_finance AS
SELECT * FROM orders WHERE dept = 'finance';
GRANT SELECT ON v_finance TO 'finance_user';
CREATE POLICY p1 ON orders
FOR SELECT
USING (dept = current_user_dept());
示例(PostgreSQL):
CREATE VIEW v_user AS
SELECT id, mask_phone(phone) FROM user;
数据库权限 ≠ 业务权限
if (!user.hasRole("ADMIN")) {
sql += " AND owner_id = " + user.getId();
}
✅ 原因:
适合大型系统:
✅ 使用强密码 + 定期轮换
✅ 禁用公网数据库端口
✅ 启用 SSL / TLS
✅ 开启审计日志
✅ 定期权限复审
✅ 生产 / 测试环境权限隔离
✅ 敏感操作多因素认证
用户
↓
API 网关(认证)
↓
应用服务(RBAC + 数据过滤)
↓
数据库(最小权限 + RLS)
如果你能说明:
我可以给你更具体的实现方案或 SQL 示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。