在客户端允许表名访问的合理安全方式

时间:2009-12-14 21:35:47

标签: ajax

我们需要在应用程序中出现以下情况:

  • 网页使用AJAX从服务器请求数据。
  • 直到运行时才能知道从服务器请求的数据规范(例如表名)。
  • 数据视图的配置本身是数据驱动的,可由管理员配置。
  • 必须支持数据更新和插入,而不仅仅是视图。

原型设计非常简单 - 我们可以将适当的信息(表名,变更集,等等)传递给通用数据服务,该数据服务刚刚完成了它所说的内容(使用JSON作为数据存储机制)。数据服务可以对参数进行基本验证,以确保当前用户可以执行请求的操作(读取数据,插入行,读取行)。

我们现在要解决的问题是安全的生产方式,传递表名和列名的想法令人恐惧。我们想到的处理这一切的一切都转化为以某种重要方式信任客户,或者似乎涉及服务器上的大量簿记。例如:

  1. 用户请求查看页面。
  2. 服务器记下表名,并在服务器端保存请求ID
  3. 服务器记下列名并保存,用“col1,col2”等替换它们,并将映射与请求ID数据一起存储。
  4. 客户端页面将请求ID发送到服务,该服务按ID
  5. 查找服务器存储
  6. 服务返回col1,col2等
  7. 我们认为这可行,但感觉非常混乱。

    有没有人有这种问题的经验并且可以提供解决方案?

2 个答案:

答案 0 :(得分:2)

您是否需要授予他们访问原始表的权限? 也许你可以去meta,并创建一个以安全的方式存储表格数据的元表(即,只有系统知道表/模式,但用户的模式/表的概念只是抽象,所有映射都返回到相同的架构/表格)...

同样,需要更多关于可以抽象的信息。最终用户允许DDL操作正在惹麻烦,正如您正确评估的那样,我只是抽象出来,以便“DDL”成为DML。

但是,如果需要,映射针对此数据编写的实际SQL将更难以抽象。

答案 1 :(得分:1)

如果我不得不向最终客户公开后端信息,我可能会使用元数据隐藏实际的物理表示,这些元数据会将表名和列重新映射为更加用户友好的文本,这也使我能够提供对于比普通表/列名称更高级的表的视图...正确建模表之间的关联等等...