我想知道是否有任何方法可以阻止SQL数据库执行不包含任何聚合函数的查询。原因是阻止用户获取特定记录的数据(例如个人信息),但是给他提供查询群体的选项(例如平均年龄)。如果有任何开箱即用的解决方案,我不想写任何包装器/处理器/解析器。
答案 0 :(得分:1)
没有真正的(或至少是简单的)方法。
建议是限制对basetables的访问,但在顶部创建一个或多个提供聚合数据的视图,然后允许访问它。
或者,创建一对一映射视图,只从基本表中选择非个人数据。这样,您可以让某人使用这些视图来运行聚合函数,而无需担心暴露个人或敏感信息。
视图的wiki page说明:
视图可以表示表中包含的数据的子集。因此,视图可以限制基础表暴露给外部世界的程度:给定用户可能有权查询视图,而拒绝访问基表的其余部分。
和
视图可以作为聚合表,数据库引擎聚合数据(总和,平均值等),并将计算结果显示为数据的一部分。