【发布时间】:2018-08-14 09:26:00
【问题描述】:
我在 SQLServer 中的 Person 表中实现了行级安全性(以满足 GDPR 要求),因此基本用户只能看到个人记录的子集。这 人员表有一些数据(RFID 标签)在系统中必须是唯一的。所以我的应用程序检查没有重复的 RFIDtag。
当 RLS 开启时如何做这个检查,因为查询只看到行的子集,但 RFID 必须是全局唯一的?在暂时禁用 RLS 的情况下运行此查询的最佳方法是什么?
我的第一个想法是使用存储函数来执行检查。作为“sa”用户 sa 执行的函数可以看到所有行。还有其他(更简单)的想法吗?
【问题讨论】:
-
永远不需要在数据库中以
sa的身份执行。EXECUTE AS是这里的解决方案,但您最好作为仅具有所需权限的特定用户(CREATE USER ... WITHOUT LOGIN)这样做。 -
也许我想得太简单了,但
UNIQUE索引不会也能处理好事情吗?您可以捕获重复错误以向用户呈现更有意义的错误消息。作为奖励,这也比插入前检查模式更安全。
标签: sql-server row-level-security