【发布时间】:2014-12-20 07:33:50
【问题描述】:
首先,我使用以下工具:Java、JSF 2、Primefaces、JPA/Hibernate、PostgreSQL、Maven、Spring Framework。
我有一个大约有 100.000 行的表,并且可以增长更多。每条记录可以附加 1,2 或 3 张图像,因此我可以拥有大约 300.000 张应该由系统处理的图像。问题是我需要一个具有性能和安全性的最佳解决方案,但我找不到它。看看我的正面和负面的建议:
1ª - 将图像存储在如下目录中:'/usr/local/share/images_system_a/' 并仅将 imagem 的链接保存在表中。 PERFORMANCE (GREAT):这对 PERFORMANCE 来说非常有用,因为我不需要从数据库加载 10MB 的大图像,我只需从目录中获取图像。 SECURITY (BAD): 这对 SECURITY 不利,因为用户在任何时候都可以“清理”此目录,并且应用程序的所有图像都将丢失。
2ª - 将图像保存在表格中。 性能(不良):我认为这对性能非常不利,因为加载非常大的图像会锁定应用程序,我不能让这种情况发生。 安全(极好): 使用表格内的图像我感觉更安全,因为只有授权人员(我)有权在数据库中创建任何 DML 或 DDL,并且我可以使用 crontab 备份数据库(每天) 以进一步确保数据的安全性。
所以,我的大问题是我无法协调性能和安全性,我需要两者。希望有人能给我更好的建议。
【问题讨论】:
-
1.为什么要把它们放在用户的地方。 2. 对文件夹设置一些权限,这样用户在没有管理员权限的情况下不能删除它们。
-
这只是一个例子,我可以放在任何地方,但无论如何用户都可以清理(RM)这个目录。我需要保护这个目录不受所有人的影响,即使是管理员,但我做不到。
-
第一件事如果这个数据被放置在远程机器上,用户只能访问数据而不是整个文件系统共享给用户,所以在你允许之前没有人可以直接访问远程机器的文件系统。您还可以为用户设置权限/规则,不允许他们访问您想要保护的数据
-
机器是本地的,不是远程的。确保安全的唯一方法是为此目录设置一个特殊用户。那么,更好的解决方案是(1)对你来说?
-
好吧,如果用户可以删除图像文件,那么没有什么能阻止他删除数据库文件,所以在这个设置中,选项 1 的安全性 = 选项 2 的安全性。
标签: java hibernate postgresql jsf primefaces