权限全靠管理员拍脑袋?聊聊数据平台里的ABAC和RBAC到底该怎么落地

简介: 权限全靠管理员拍脑袋?聊聊数据平台里的ABAC和RBAC到底该怎么落地

权限全靠管理员拍脑袋?聊聊数据平台里的ABAC和RBAC到底该怎么落地

作者:Echo_Wish

很多企业在建设大数据平台的时候,最容易忽略的一个问题,不是计算性能,也不是存储成本,而是——权限管理

我见过不少公司,数据平台已经上百TB了,Hive、Spark、Flink、ClickHouse、Lakehouse全都上了,结果权限体系还停留在Excel表格管理阶段。

张三离职了权限没收回;

李四调岗了还能看原来的数据;

外包人员居然能访问核心经营数据;

更离谱的是,有些企业数据库账号直接共用。

很多数据泄露事件,并不是黑客有多厉害,而是权限设计从一开始就有问题。

今天我们就聊聊数据平台权限控制领域最经典的两种模型:

  • RBAC(Role-Based Access Control)
  • ABAC(Attribute-Based Access Control)

它们到底有什么区别?

为什么越来越多的大厂开始从RBAC走向ABAC?

又该如何在大数据平台中真正落地?


先说个真实场景

假设你们公司有这样几个部门:

  • 财务部
  • 研发部
  • 运营部
  • 市场部

数据平台中有以下数据:

订单数据
用户数据
员工薪资
运营报表
研发日志

传统做法通常是:

给张三开订单权限
给李四开薪资权限
给王五开报表权限

人数少的时候没问题。

当企业发展到:

500人
2000人
10000人

以后会发生什么?

权限爆炸。

管理员每天干的事情变成:

开权限
删权限
查权限
补权限
改权限

根本停不下来。

于是RBAC诞生了。


RBAC:角色决定权限

RBAC全称:

Role-Based Access Control

基于角色的访问控制。

核心思想特别简单:

用户 -> 角色 -> 权限

而不是:

用户 -> 权限

例如:

角色:
    财务经理
    财务专员
    数据分析师
    运维工程师

权限:
    查看订单
    查看薪资
    查看报表

关系如下:

张三 -> 数据分析师

数据分析师:
    查看订单
    查看运营报表

用代码实现一个简单RBAC

class RBAC:

    def __init__(self):
        self.roles = {
   
            "analyst": ["read_order", "read_report"],
            "finance": ["read_salary", "read_order"],
            "admin": ["*"]
        }

    def has_permission(self, role, permission):

        perms = self.roles.get(role, [])

        return "*" in perms or permission in perms


rbac = RBAC()

print(
    rbac.has_permission(
        "analyst",
        "read_order"
    )
)

print(
    rbac.has_permission(
        "analyst",
        "read_salary"
    )
)

输出:

True
False

逻辑非常清晰。


RBAC为什么受欢迎

原因就两个字:

简单。

例如企业有1000个员工。

实际上可能只有:

10个角色

管理员只需要维护角色。

新员工来了:

赋予角色

员工离职:

移除角色

结束。

运维成本极低。


但RBAC有一个致命问题

现实世界远比角色复杂。

举个例子。

公司有:

华东销售经理
华南销售经理
华北销售经理

要求:

只能看自己区域数据

怎么办?

RBAC通常这样做:

销售经理_华东
销售经理_华南
销售经理_华北

继续增加:

销售经理_华东_一级
销售经理_华东_二级
销售经理_华东_三级

再增加:

白班
夜班
临时工
外包

很快就变成:

几百个角色

这就是著名的:

Role Explosion(角色爆炸)

很多企业做到后期,角色数量比员工还多。

这时候RBAC开始失控。


ABAC登场

ABAC全称:

Attribute-Based Access Control

基于属性的访问控制。

核心思想:

用户属性
+
资源属性
+
环境属性
=
是否允许访问

不再依赖角色。


什么叫属性

用户属性:

{
   
  "department":"sales",
  "region":"east",
  "level":"manager"
}

资源属性:

{
   
  "table":"order",
  "region":"east"
}

环境属性:

{
   
  "time":"09:00",
  "ip":"10.1.1.1"
}

策略:

销售经理
只能访问
自己区域订单

系统自动计算。


一个简单ABAC实现

def check_permission(user, resource):

    if (
        user["department"] == "sales"
        and
        user["region"] == resource["region"]
    ):
        return True

    return False


user = {
   
    "department": "sales",
    "region": "east"
}

resource = {
   
    "table": "order",
    "region": "east"
}

print(
    check_permission(
        user,
        resource
    )
)

输出:

True

ABAC为什么越来越火

因为大数据平台越来越复杂。

以前权限控制的是:

库
表
字段

现在控制的是:

行权限
列权限
数据标签
敏感等级
数据血缘

例如:

普通员工
只能看到手机号后4位

主管
看到完整手机号

运营
只能看自己区域用户

这种需求RBAC几乎无法优雅解决。

ABAC却非常适合。


大数据平台中的典型落地方案

很多企业会采用:

RBAC + ABAC

混合模式。

而不是二选一。

架构通常如下:

用户
 ↓
RBAC角色校验
 ↓
ABAC策略校验
 ↓
数据访问

例如:

角色:
    数据分析师

RBAC负责:
    是否允许访问订单表

ABAC负责:
    是否允许查看华东区域数据

这样就把:

粗粒度控制
+
细粒度控制

结合起来。


Spark中的数据过滤

假设用户访问:

select * from order_info

系统自动改写SQL:

select *
from order_info
where region='east'

对应实现:

def rewrite_sql(user_region):

    sql = f"""
    SELECT *
    FROM order_info
    WHERE region='{user_region}'
    """

    return sql

这就是很多数据平台常见的:

Row Level Security
行级权限

字段脱敏也是ABAC的重要应用

例如手机号。

数据库原始数据:

13812345678

普通员工看到:

138****5678

管理员看到:

13812345678

实现示例:

def mask_phone(phone):

    return (
        phone[:3]
        + "****"
        + phone[-4:]
    )


role = "user"

if role == "user":
    print(mask_phone("13812345678"))
else:
    print("13812345678")

这实际上也是属性驱动的权限控制。


Apache Ranger为什么这么受欢迎

现在很多企业级数据平台都会引入:

Apache Ranger

原因很简单。

它天然支持:

RBAC
ABAC
数据脱敏
审计日志
策略中心

并且能够统一管理:

Hive
HBase
Kafka
Spark
Trino
Presto

对于大型数据平台来说,几乎已经成为标配。


我的一个观点:未来权限管理拼的不是角色,而是标签

过去企业管理权限:

人 -> 角色 -> 权限

未来越来越像:

人标签
+
数据标签
+
环境标签
+
风险标签

例如:

员工等级=L3

数据等级=敏感

访问地点=公司内网

时间=工作时间

满足条件:

允许访问

否则:

拒绝访问

这种模式更符合零信任架构的发展方向。


写在最后

很多团队建设数据平台时,总把精力放在:

计算快不快
存储省不省
查询稳不稳

却忽略了最关键的问题:

谁能看数据?
谁不该看数据?
看到了以后能不能追溯?

事实上,一个真正成熟的数据平台,最核心的能力从来不是算得快,而是管得住

RBAC解决的是:

你是谁

ABAC解决的是:

你在什么情况下可以访问什么数据

前者让权限管理变得简单,后者让权限管理变得智能。

对于今天的大数据平台而言,最合理的选择已经不是RBAC还是ABAC,而是:

用RBAC构建骨架,用ABAC填充血肉。

只有这样,数据才能真正做到“可用、可控、可追溯”,而不是成为企业数字化道路上的定时炸弹。

目录
相关文章
|
JSON 自然语言处理 Java
【AgentScope Java新手村系列】(4)结构化输出
结构化输出 — JSON Schema 约束 LLM 输出格式,直接反序列化为 Java POJO,打通文本到对象的转换。
212 0
|
22天前
|
数据采集 人工智能 编解码
YOLO不是“魔法”,是你自己也能跑通的一条工程流水线:Python从标注到训练全实战
YOLO不是“魔法”,是你自己也能跑通的一条工程流水线:Python从标注到训练全实战
251 2
YOLO不是“魔法”,是你自己也能跑通的一条工程流水线:Python从标注到训练全实战
|
22天前
|
人工智能 缓存 弹性计算
阿里云服务器2核4G5M199元解析:独享型u1实例,性能、适用场景、购买和续费规则介绍
阿里云通用算力型u1实例(ecs.u1-c1m2.large)2核4G、5M带宽、80G ESSD Entry云盘,活动特惠价仅199元/年(官网价3498.36元),企业新老用户同享,续费同价至2027年3月31日,每人限购1台。该实例采用独享型架构,搭载Intel至强可扩展处理器,内网带宽1Gbit/s、收发包30万PPS、云盘IOPS 1万,性能稳定,适合企业官网、中小Web应用、轻量数据库及开发测试等场景。
|
21天前
|
Web App开发 iOS开发
苹果自带浏览器展示不了钉钉二维码
使用window.DTFrameLogin函数,在safari不展示二维码
246 122
|
6天前
|
弹性计算 5G 云计算
2026年阿里云秒杀活动抢购攻略:轻量应用服务器2核4G200M峰值带宽,秒杀价38元/年!
阿里云2026年秒杀活动每日两场(10:00/15:00),主打轻量服务器:2核2G仅38元/年、2核4G低至9.9元/月。新用户实名后可抢,需拼手速。文内含直达入口、抢购技巧及68元起备选方案,助力大家低成本上云!
161 3
|
4月前
|
消息中间件 Prometheus 监控
你还在“出问题才查日志”?用 Prometheus + Grafana,把大数据平台变成“会说话”的系统!
你还在“出问题才查日志”?用 Prometheus + Grafana,把大数据平台变成“会说话”的系统!
288 9
|
22天前
|
人工智能 JSON 定位技术
GEO站内优化深度指南:内容、JSON-LD与知识地图FAQ
本文将围绕于磊老师的这一理论框架,深入探讨GEO站内优化的核心策略,特别是内容设置、JSON-LD应用以及知识地图构建等关键环节,以FAQ形式为读者提供专业、可信、有深度的指导。
135 2
|
22天前
|
Web App开发 开发工具 iOS开发
小书匠:一款本地优先、去中心化的全能笔记软件
小书匠是一款**本地优先、去中心化、支持选择性同步**的全平台笔记软件。它不依赖任何中心服务器,所有数据都保存在用户本地,真正做到了"我的数据我做主"。
217 6
小书匠:一款本地优先、去中心化的全能笔记软件
|
22天前
|
人工智能 数据可视化 测试技术
【教程】阿里云轻量云服务器一键配置OpenClaw
如果你还没有部署自己的 OpenClaw,还可以通过购买腾讯的轻量云服务器,一键秒级部署指南一键秒级部署指南,一键即可在几秒内完成部署。
362 9
|
10天前
|
人工智能 监控 安全
阿里云千问大模型入门到精通:Qwen3.7系列能力、计费与落地实战详解
千问,官方名称通义千问,代号Qwen,是阿里云完全自主研发的全栈大模型家族,并非单一模型,而是覆盖纯文本、代码、图像、音频、视频、行业垂直场景的完整模型产品矩阵,统一依托阿里云百炼大模型服务平台对外提供能力调用、微调、智能体开发、知识库构建、应用部署等全链路服务。2026年主力迭代版本为Qwen3.7系列,相比前代产品大幅强化长上下文、自主智能体执行、多模态统一推理三大核心能力,原生适配国内中文语境、办公流程、企业业务规范,同时兼容国际主流接口标准,可无缝对接各类AI编程工具、智能体框架、业务系统。
1588 1