C#创建一个文件,以便只有创建该文件的用户才能访问它

时间:2011-05-03 17:54:08

标签: c# file

我需要创建一个用于存储机密数据的文件;目标是最终使用ACL来限制对创建时运行的域\用户的访问。但是默认似乎也允许对SYSTEM和管理员进行无限制的访问。

两个问题:首先,如果系统和管理员被拒绝访问文件,Windows或.NET中是否存在可怕的破坏?

其次,从C#我如何实际获得所需的权限?我现在正在做一个File.Create(“myFile.dat”);很明显,API的版本不是我应该使用的版本。我找到了一个非常复杂的替代方案,但它似乎假设我知道当前的域名和用户名;这实际上是唯一的方法吗?

谢谢!

4 个答案:

答案 0 :(得分:2)

据我所知,这是不可能的。

除非我误以为SYSTEM可以访问所有内容,期限。我很确定这是重点。管理员的容量相似,如果他们甚至无法访问权限较少的文件(当然存在例外),他们就不能是非常好的管理员。但是如果SYSTEM无法访问该文件,那么如何在其上完成任何操作?

从逻辑上思考,我不得不说“不,这是不可能的”。虽然也有可能,但我不对。

答案 1 :(得分:2)

据我所知,管理员可以访问任何内容,无论您在其上设置什么保护。您可以加密文件,并在应用程序中对密钥进行硬编码。

查看System.Io.File.Create的第四个重载。第四个参数是System.Security.AccessControl.FileSecurity对象。这应该可以解决问题。

答案 2 :(得分:1)

我建议您查看加密文件系统。它内置于XP专业版,Vista和Windows 7中。(以及服务器产品。)

它可以让您完全按照自己的意愿行事。只有您使用加密文件的用户(即与正在运行的应用程序关联的凭据)才能访问相关文件。无论文件系统权限如何,甚至本地管理员都无法读取该文件。

您可以使用System.IO.File.Encrypt / Decrypt来执行操作。最棒的是,用户仍然只需双击该文件即可将其打开。没有密码。无需自定义应用程序。

请注意,拥有恢复证书的人(通常是域管理员)仍然可以解密该文件,但除非您创建自己的加密机制并提示用户注意,否则您无法做任何事情。每次尝试密码并打开密码。

答案 3 :(得分:0)

为什么不使用对称加密技术并为数据库或注册表中的每个用户保存密钥?