windows - 访问应用程序的共享文件夹,但不访问用户
问题描述
我有一个应用程序(在纯 Windows 环境中)需要存储敏感数据,以便具有相同应用程序的其他工作站可以访问该数据。目前,这是使用具有 SMB 网络共享和加密文件的中央服务器完成的。使用我们的应用程序的所有(Windows)用户都必须对一个中央共享文件夹具有读/写访问权限,这样就可以存储和交换数据。
这种配置有一个很大的缺点:不仅应用程序而且我们应用程序的所有用户都可以完全访问该共享文件夹。
好的,他们无法读取敏感数据,因为它是加密的,但是 - 考虑到一些犯罪能量或愚蠢 - 他们可以简单地打开一个 Windows 资源管理器,导航到该共享文件夹并删除那里的文件。
我尝试但没有设法仅为我的应用程序打开 SMB 共享 - 一旦我的应用程序在那里进行身份验证,当前的 Windows 用户也可以访问。
(我尝试使用 WNetAddConnection2,但一旦发生身份验证,所有其他程序的连接也会打开。如果我不将 SMB 文件夹映射到驱动器号,我什至无法再次断开驱动器)
是否有可能仅对进程或线程进行身份验证,而不是对当前用户访问网络共享进行身份验证?
或者是否有 SMB 股票的高性能替代品?一个数据记录的大小在 100 到 900 MB 之间。因此我需要支持随机访问读/写文件。
打开时使用 SFTP 并将整个数据泵入工作站并在关闭时发送回所有数据不是一种选择。这会给网络带来压力,如果应用程序崩溃,所有更改都会丢失,而当使用“正常”访问时,只会丢失网络缓存中的数据。
有什么建议吗?
解决方案
是否有可能仅对进程或线程进行身份验证,而不是对当前用户访问网络共享进行身份验证?
不,Windows 的安全模型基于用户,而不是应用程序。要基于每个进程应用权限,您必须以给定用户身份运行应用程序。要在每个线程的基础上应用权限,您必须在执行工作之前模拟给定用户,然后在完成后恢复模拟。
推荐阅读
- firebase - Firebase Firestore 读取计数?
- sql - 如何在 SQL 中计算日期之间的天数/小时数
- unity3d - UI 在最终(构建)游戏中显示太小
- java - 将 HashMap 设置为 null 还是设置为新的 HashMap?
- sql - SQL Query 从不同的表中选择相同的数据,显示所有记录,但显示/显示匹配
- reactjs - 通过 Apollo 客户端在 React 中的 GraphQL 经历了加载阶段,但从不加载数据
- jquery - jQuery 复选框库选择
- javascript - Firebase 云函数 admin.messaging.send() 不是函数
- tensorflow - 序列的损失函数(在 Tensorflow 2.0 中)
- search - Solr 搜索结果不准确