问题描述
我正在研究数据库中的行级安全性。我有两张桌子。基于行的安全性是在data_table上实现的,并且仅返回用户可以看到的行。
数据表:
data_id name role
-----------------------------
1 test USER
2 another ADMIN
3 yep USER
type_table:
type_id name
-----------------
1 this
2 is
3 a
4 type
EXECUTE AS USER = 'USER';
SELECT * FROM data_table;
仅返回第1行和第3行。如果以ADMIN执行,则返回所有行。这在我的数据库中正常工作。
但是,我的问题是我的桥接表。
数据类型表:
data_type_id data_id type_id
1 1 2
2 1 3
3 2 1
4 2 2
5 3 1
6 3 4
截至目前
EXECUTE AS USER = 'USER';
SELECT COUNT(data_type_id) FROM data_type_table;
返回6,因为它正在查看表中的所有6行。我正在尝试以这样的方式进行设置:用户USER将只看到data_type_table中的行,这些行引用的是data_table.role ='USER'的行(这意味着选择计数查询将返回4)。实现这样的最简单的方法是什么?
我的data_table很可能包含数十万行。效率可能会成为问题。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)