聊聊数据权限那点事儿

金蝶云星空企业版初级认证:从核心模块到备考策略全解析 企业资源计划(ERP)作为企业数字化转型的核心系统,其核心价值在于实现财务、供应链、生产等核心业务流程的一体化集成与数据贯通。其基本原理是通过统一的平台和标准化的数据模型,打破部门墙,实现业务流、实物流、资金流和信息流的“四流合一”。掌握ERP系统,特别是面向中大型企业的云ERP平台,对于实施顾问、关键用户及财务业务人员而言,具有重要的技术价值,能直接提升其理解复杂业务场景和运用系统解决实际问题的能力。在应用场景上,ERP系统广泛应用于制造业、零售业等行业的业财一体化管理。本文聚焦于金蝶云星空企业版初级认证 阅读详情

序

一般来说,权限有许多种,我们经常用到的一般有操作权限和数据权限两种。

所谓操作权限就是有或者没有做某种操作的权限,具体表现形式就是你看不到某个菜单或按钮,当然也有的是把菜单或按钮灰掉的形式。实际上它的实现机制比表面上看到的要复杂得多,比如:我们从浏览器访问过一个地址之后,实际上这个URL就会在历史中存在,这时就会存在一种可能,有的人虽然没有权限,但是他知道怎么访问的URL,如果他再有一定的技术基础,那么通过猜测,有时候就可以得到真正的操作的URL,这个时候如果操作权限限制做得不到位,那么他就可能做他非授权的事项,所以操作权限一般都在显示界面做一次控制,过滤没有权限的操作菜单或按钮,另外在真正执行操作时,还要进行一次权限检查,确保控制非授权访问。

所谓数据权限,就是有或者没有对某些数据的访问权限,具体表现形式就是当某用户有操作权限的时候,但不代表其对所有的数据都有查看或者管理权限。数据权限有两种表现形式:一种是行权限、另外一种是列权限。所谓行权限,就是限制用户对某些行的访问权限,比如:只能对本人、本部门、本组织的数据进行访问;也可以是根据数据的范围进行限制,比如:合同额大小来限制用户对数据的访问。所谓列权限,就是限制用户对某些列的访问权限,比如:某些内容的摘要可以被查阅,但是详细内容就只有VIP用户才能查看。通过数据权限,可以从物理层级限制用户对数据的行或列进行获取,这种方式比把所有数据拿到之后再根据用户权限来限制某些行或列有诸多好处:


  • 性能提升:获取的数据量较少,节省了网络流量和数据库IO,一定程度上可以提升性能
  • 翻页处理更为准确:如果通过后续逻辑去掉某些行,就会导致一页显示的记录条数不足,或者采用这条记录只显示部分内容,但是操作权限方面做限制的方式,这个时候就产生一个悖论,你不想让我操作,为什么让我看到?你让我看到为什么不让我操作?
  • 安全风险提升:理论上让攻击者看到的信息越多,被攻击的风险也越大。通过后续业务逻辑限制的方式通过攻击控制层或展现层的代码,理论上就可以获取到所有的数据。
  • 代码编写工作量增加:由于数据是正常全部返回的,只是通过后期的逻辑进行了控制,这个时候就需要开发人员增加相关的代码来进行判断和控制,这个时候会把高层级的限制逻辑暴露给底层业务开发人员,并由他们来编写代码进行限制。
  • 代码重构工作量增加:当权限限制逻辑或范围有变化的时候,程序员们就需要对这部分逻辑进行重构,稍不注意就会出现数据安全问题。

操作权限相对来说比较简单,目前也有比较好的解决方案,因此今天的不讨论操作权限,今天重点来讨论数据权限的实现方案。

需求整理

一个好的数据权限方案要考虑哪些问题呢?我觉得要考虑以下方面:


  • 对程序员透明:整个方案对于程序员们来说,不论是前台还是后台的程序员们来说,越透明越好,他们最好不知道有这么回事情
  • 与不同的用户权限能较好集成:作为一个数据权限系统来说,肯定要和用户、角色、组织机构什么的数据打交道。如果这个方案只能和某一种用户权限系统集成,那么它充其量只能算是一个可用的解决方案,但是注定算不是上好的解决方案。
  • 性能损失最少:我们说,要增加新的功能或限制的过程中,肯定会对性能方面有一定影响的,怎么样能把性能损失降低,甚至能提升一定的性能是设计师们永恒的主题。
  • 对于分页能良好支持:上面有说到当采用了行权限时,有些行是不能显示给用户的,这个时候不能对分页有影响,比如本来是一页是10条的,现在忽然变成8条,甚至在极端情况下变成0条,这样的用户体验就非常差了。
  • 一次设定到处生效,哪怕是不同的ORMapping方案也都起作用:我们知道,现在采用唯一的一种ORMapping解决方案的场景已经越来越少了,不同的方案都有自己的优缺点,它可能只适应某种前置条件下的应用场景,实际应用的情况下根据场景不同使用不同的解决方案也是非常普遍的,这就要求解决方案有一定的普适定。
  • 跨数据库:一个项目,它的运行环境基本上是确定的。但是对于一个产品来说,根据用户的实际场景不同,可能对于数据库也有不同的要求,这个时候就需要对不同的数据库有支持,不能对于A数据库是支持的,对于B数据库的场景下,就出异常或者结果不正确了。

需求分析

由于要对程序员透明,因此解决方案不应该在DAO层实现。

由于要和不同的用户权限系统进行集成,因此确定了不能在DAO层实现。

对于分页有良好的支持,决定了不能在DAO层和显示层实现。

一次设计到处生效,对多种ORMapping方案生效,决定了不能在ORMapping层实现。

要求能跨数据库,进一步提升了方案的通用性和普适性,也提升了实现的难度。

数据行权限不是所有的过滤条件都是和用户、角色、岗位字段有关的,不是所有的表中,都有用户、角色、岗位字段,这个时候也要能良好支持。比如:人员信息表中:不同的级别的HR,可以看到不同级别的人员信息。总之过滤条件可能是数据表中的任意字段。

数据列权限是控制列的可见性的,也就是说,同样对这行数据有权限,但是可能对其中的几列没有权限,则这几列不可见。

比如表table1 有(a,b,c,d,e,f)字段,列权限控制可能控制c,d不可见。但是程序员写代码的时候可能写的是select * from table1,这种情况下也不能返回c,d字段。

实现思路

呵呵,估计现在已经把许多方案已经逼到垃圾堆了。说实际关于这个主题,我也思考了相当长的时间,一直没有好的解决办法。因为我自己给出了N个解决方案,又都被自己所推翻,因为这些方案距离我期望的方案都有相当的距离。

直到有一天,开一个无聊的会,然后就走神了,忽然之间冒出一个想法,然后仔细品味一下,貌似可以讲通,于是和开发人员进行了一下推演,技术实现上没有什么问题, 那就先做一版出来再说。

下面简单说一下思路,真正的实现思路将在真正实现之后再行补充。

归根到底,数据权限的实现思路就是个调整SQL的问题,直白点就是做加减法的问题。

对于行权限来说无非是把一部分SQL条件附加到程序员写的SQL语句中,对于列权限来说则是把程序员写的SQL语句一部分从SQL里减去的问题。

然后问题就转化为在哪一层里对程序员的SQL进行处理的问题,由于上面在提需求的时候附加了一系列的条件,因此也就确定了这一层不可能在DAO层,也不可能在ORMapping层来解决,这个时候可以添加层次就和分库分表方案一样了,只能在JDBC层或者协议代理层来解决,相对来说协议代理层离得太远了,因此在JDBC层就是一个合适的选项。

上面一段说离得太远,是指在应用中,这些 SQL的加减需要根据当前登录人员的身份进行判定,在代理层要获得当前登录人员的信息会非常复杂,因此会增加额外的复杂度,确实是离得太远。但是在JDBC层做起来就方便多了。

在JDBC层来进行处理,有几个好处,第一:所有的SQL语言,不论用得什么ORMapping方案,最后总是绕不过这一层的;第二、这一层实现的话,对于开发人员来说是全透明的;第三、这一次离业务实现足够近,可以比较方便的获得当前登录用户的相关信息。

故事讲到这里,整个实现方案已经没有什么悬念了:通过在JDBC层对要处理的SQL语言进行解析,然后根据定义好的数据权限规则对SQL进行处理,通过增减SQL片断,使之达成数据权限控制的目的。

总结

通过上面对问题的分析,需求的整理,需求的分析及设计思路的思考,我就对数据权限的来龙去脉及其解决方案进行了比较深入的分析,亲们可以根据我的思路自行实现,也可以期待我们实现。

注意:本方案只针对JavaEE场景,对于非JavaEE不能保持方案的可实现性。


围墙倒塌的那一天:苹果 Siri 的“谷歌换脑”手术 2026年1月,苹果正式宣布与谷歌达成合作,将 Gemini 模型作为 Siri 的底层驱动。这标志着苹果在“造车”失败后,在 AI 基础模型领域的又一次战略收缩。看似 10 亿美元的“保护费”换来了最强的 AI 基座,实则暴露了苹果在生成式 AI 时代的焦虑与无奈。本文深度拆解这场“世纪联姻”背后的商业逻辑、技术取舍以及对用户隐私的深远影响。 阅读详情

相关推荐

别等出事才补锅:聊聊数据安全和合规这事儿,到底该怎么做?

数据安全与合规是企业命脉,不能等问题发生才补救。数据安全管理(如加密、访问控制)和合规性(如GDPR、PIPL)需双管齐下。常见风险包括明文记录敏感信息、随意导出未脱敏数据、备份文件未加密等。解决方案包括:日志脱敏处理、建立数据导出审批系统、强制备份加密、完善审计追踪机制。最佳实践是将合规融入工程文化,通过技术手段(如自动化加密备份、权限管控)和流程规范(如定期恢复演练)持续保障安全。数据安全不是运维专属责任,而是全公司必须共同构建的防线。

Echo_Wish 172

聊聊数据权限哪些事儿

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34290000的博客 339

关于Kswapd的理解(一)

关于Kswapd的理解(一) 之前跟踪了MemAvailable的计算方式,其中watermark的计算花了很多精力,在学习的过程中看到一些资料中说watermark是给swapd使用的,于是乎,研究一下看看咯 本部分主要记录两个方面: 对于kswapd这个东西,从初学者(我)的角度出发会考虑哪些内容? 跟踪kswapd 初始化结构部分; 1. KSwapd机制 上图是还没有跟踪kswapd code的时候,对自己提出的一些疑问和自身的理解,主要是如下内容: kswapd 机制用来做什么:内存不足时

And乔的博客 2715

数据级的权限管理和功能级的权限管理的区别,不使用框架(shiro,springsecurity)做权限设计的思考

1 数据级的权限管理和功能级的权限管理  引自:http://www.iteye.com/problems/97374 功能级权限,有大有小。大的可以直接包括一个业务模块,小的可以是一个按钮。一般的功能级权限一般包括:菜单、url、按钮 。 数据级权限主要是针对访问数据的可见范围。一般包括以下几类:当前操作人可见、部门可见、部门及子部门可见……等。数据级权限目前常用的做法就是在业务模块的表中...

ice-wee的专栏 2万+

win10+conda+pytorch-gpu安装

pytorch 官网上只有linux和Mac的程序包,没有windows系统的,但是windows系统还是可以用pytorch的。  github: https://github.com/peterjc123/pytorch-scripts 首先要安装anaconda: 推荐清华镜像 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ ...

一摩尔自由的博客 1万+

WRF实战:自定义Vtable解析ECMWF海温数据的关键步骤与技巧

本文详细介绍了在WRF模型中自定义Vtable以解析ECMWF海温数据的关键步骤与技巧。通过解剖GRIB文件、编写自定义Vtable条目以及配置METGRID.TBL,解决了ECMWF数据与WRF模型对接的难题,为海洋气象和台风模拟研究提供了高精度数据输入方案。

weixin_29279101的博客 335

数据权限的设计与实现系列1——数据权限的设计与思考

权限控制是一个系统的核心功能,可以分为两类,一类是功能权限,一类是数据权限。数据权限又可以进一步分为行级权限和列级权限。功能权限,是指系统用户能进行哪些操作,通常是菜单和按钮权限,如打开订单菜单,查询订单列表,创建新订单。对于功能权限,有标准化的解决方案,也即RBAC,通过权限项、角色、用户三张主表,以及角色-权限项对应关系表和角色-用户对应关系表两张辅助表,一共5张库表即可实现功能权限的功能,系统管理员通过系统界面即可实现灵活的权限分配和维护。

学海无涯,行者无疆 7294

TMS320F280039 CMD文件配置避坑指南:从.map文件看懂内存分配与溢出排查

本文详细解析了TMS320F280039芯片的CMD文件配置问题,通过.map文件分析内存分配与溢出排查。文章提供了实用的诊断技巧和解决方案,帮助开发者有效应对段溢出、地址重叠和栈堆冲突等常见问题,优化DSP程序的内存管理。

weixin_29168813的博客 443

浅谈数据权限

数据权限参考

u013289746的博客 1万+

Labelme AI-Polygon闪退排查与修复指南

本文详细介绍了Labelme AI-Polygon功能闪退问题的排查与修复方法,包括环境配置检查、模型路径设置、依赖库版本控制等关键步骤。通过系统性的解决方案和实用技巧,帮助用户快速解决闪退问题,确保数据标注工作的高效进行。

weixin_29311017的博客 140

Wireshark时间分析实战:精准调试网络延迟与时间同步问题

本文深入探讨了Wireshark在网络延迟与时间同步问题分析中的核心应用。通过实战案例,详细讲解了如何设置时间显示格式、利用时间参考点量化关键路径延迟,以及运用时间平移功能校正错位时间轴。掌握这些时间分析技巧,能帮助网络工程师精准定位隐藏于数据包时序中的性能瓶颈与故障根源。

weixin_29290963的博客 262

权限管理之数据权限(若依框架)

数据权限设计 AOP + 自定义注解 实现数据权限

weixin_41842550的博客 2万+

轴承故障诊断领域的论文到底有多水

这个是最让人困惑的,就好像你说自己证明了某个方法更好,但是你却没有交代自己怎么做的,或者说你交代的过程有外行话或者逻辑上的缺陷,但是你就这么给出个结果完事了。由于自己没有足够大的学术交流圈子,为了尽量避免误判,我在原来13篇论文的基础上又读了18篇,这些论文至少都出自中文核心,有一些还有EI的title,事实上近几年能找到的文章也不算多,这些基本能说明问题了。当然,还有更多细节,比如说损失函数你得交代吧,模型超参数得介绍全吧,至少数据集是哪个工况下的得说吧,当你想复现这些论文,关注点在这些地方的时候。

weixin_50642818的博客 3052

基于JDBC层数据权限是如何设计的

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33794672的博客 420

ExpressLRS(ELRS)接收机技术全景:从历史演进、技术底层到产业生态全解析——上

ExpressLRS(ELRS)是一种由全球开源社区驱动的双向射频遥控链路协议栈,其接收机作为核心终端,承担信号接收解调、遥控指令解析、飞控数据交互与遥测回传等关键功能。自2018年问世以来,ELRS凭借极致性能、低成本、开放生态和强兼容性,从航模DIY方案发展为消费级无人机领域的事实标准,并逐步渗透工业级场景。 ELRS接收机采用模块化分层架构,支持2.4GHz和900MHz双频段,通过LoRa、FLRC、FSK多调制模式实现低延迟与远距离平衡。其核心技术包括自适应跳频抗干扰、TDD双向链路和极简数据包。

bother3000的博客 303

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

思考了几年的数据权限终于有解了

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33755649的博客 2020

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

2021-04-26

基于JDBC层数据权限是如何设计的 前面一篇博客聊聊数据权限哪些事儿介绍了数据权限配置文件和数据权限的几个示例,这篇文章来详细介绍下tiny版本的数据权限是如何设计的? Tiny版本的数据权限是基于jdbc底层实现的,可以把它理解为jdbc驱动的增强版实现,可以完全替代底层数据库的驱动。它是轻量级框架,以jar包形式提供服务,无proxy代理层,无需额外部署,只需依赖底层数据库的驱动,而且DBA也无需改变原有的运维方式。 它有以下特点: (1)、无侵入性,可以在任何java环境下运行...

u012466482的博客 382

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ThinkPHP8 实战:构建高效角色权限管理系统的关键技术与实现

本文详细介绍了基于ThinkPHP8框架构建高效角色权限管理系统的关键技术与实践。文章深入探讨了经典的RBAC模型设计,涵盖数据库结构、模型关联、权限验证中间件与服务层的实现,并提供了路由配置、前后端配合方案以及性能优化与安全防护等进阶指南,帮助开发者快速搭建灵活、可扩展的企业级权限控制解决方案。

pink7的博客 75

做后台最烦权限?XinServer 解决得很干净

不知道你们有没有这种感觉,每次接到一个后台管理系统的需求,心里就“咯噔”一下。倒不是功能有多难,而是那些绕不开的“基础建设”太磨人:用户表、角色表、权限表、部门表……光是设计这些表的关系,就得画半天ER图。更别提后面还要写一堆增删改查的接口,再配上复杂的权限验证逻辑。一个简单的业务需求,可能80%的时间都花在了这些“基建”上。特别是做外包项目或者创业初期,时间就是金钱,老板和客户可没耐心等你从零开始搭架子。我们前端兄弟更头疼,后端接口没出来,页面都没法联调,只能对着Mock数据干瞪眼。

全栈老李的博客 612

全栈工程师用 XinServer 实现多租户后台管理

说到底,XinServer这类零代码后端平台的出现,并不是要取代程序员,而是把我们从重复、繁琐的基础设施搭建中解放出来。它像一个强大的“后端乐高”,提供了所有标准化的积木块(数据表、API、权限、运维)。对于前端想拓展能力、小团队资源有限、需要快速迭代的项目来说,它是一个效率利器。你不需要懂Linux命令、不需要深究数据库优化、不需要部署复杂的K8s集群,也能获得一个稳定、可控、功能齐全的后端服务。如果你也受困于后台开发的效率瓶颈,或者下一个项目想尝试更快的启动方式,不妨花点时间了解一下。

全栈老李的博客 657

Apache Superset配置全攻略:从零搭建企业级BI平台

作为一名数据工程师或业务分析师,你是否曾为搭建一个功能完善的企业级BI工具而头疼?别担心,今天我们就来聊聊Apache Superset配置的那些事儿,让你从"小白"变身"配置达人"!😎 ## 为什么你的Superset总是"水土不服"? 很多人在初次接触Superset时都会遇到这样的困惑:为什么别人的Superset运行得风生水起,而我的却总是问题频出?其实关键在于配置!正确的Super

gitblog_00251的博客 323

GLM-OCR在网络安全中的应用:自动化识别验证码与敏感信息

本文介绍了GLM-OCR镜像在网络安全领域的自动化应用。通过星图GPU平台,用户可以一键自动化部署GLM-OCR镜像,快速构建智能识别服务。该方案能有效解决两大核心痛点:一是自动化识别复杂图形验证码,保障安全测试流程的连续性;二是高效筛查海量图片日志中的敏感信息,提升安全审计效率与合规性。

weixin_42611177的博客 374

和领导大吵一架,被裁员了。离职前月薪1.2万,一周后找了个1.8w的,没想到HR却发消息说不用来了,朋友很后悔…

所以啊,别把鸡蛋都放在一个篮子里,多找几家公司面试,多拿几个 offer,总有一个能落地。公司是老板的,不是咱的。找个合适的时机,私下跟领导聊聊,说说自己的想法。更惨的是,这哥们儿好不容易又找了个高薪工作,结果人家公司反悔了,offer直接打水漂。保持学习的态度,培养多元化的技能,拓展你的人际网络。这样,就算遇到了暂时的挫折,你也有足够的底气去面对。保持清醒的头脑,做好充分的准备,相信终有一天,你会找到属于自己的位置。我跟这哥们儿说,与其在这儿自怨自艾,不如利用这段时间学点新技能,去参加一些行业交流会。

芋艿V 78

外包项目快速交付,XinServer 技术方案详解

前端开发者/移动端开发者:想独立完成全栈项目,但被后端卡住。用它,你就能自己搞定服务和API。外包团队或个人开发者:追求快速交付和稳定可靠,降低开发成本。它能让你用更少的人天报价,却交付更完善的产品。创业团队:需要快速验证MVP(最小可行产品),时间紧迫,资源有限。它能让你在几天内就推出一个带后台的可用产品。传统行业软件开发者:需要开发大量内部管理系统。用它可以告别重复的增删改查开发,聚焦业务逻辑。说到底,XinServer就是一个“开箱即用的后端服务”平台。

全栈老李的博客 800

外包项目交付痛点,XinServer 是怎么帮忙的?

传统开发第一步是啥?打开 Navicat 或者敲 SQL 语句建表。字段类型、长度、索引、关联关系,都得自己琢磨。对于不常碰后端的朋友,光这一步就能劝退。在 XinServer 里,这事儿变得像搭积木。进入“数据表管理”,你可以直接可视化地创建表。比如我要建个userusername(字符串)、password(密码,它会自动加密)、avatar(图片,关联到文件存储)、(关联部门表)。整个过程都是点选,不用写一句 SQL。更省事的是它的“AI智能建表”和“模板市场”。

全栈老李的博客 1056
上一篇: 如何模仿人的学习模式来教计算机程序解数学题?
tinygroup
博客等级 码龄12年 13粉丝 13原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值