首先,我有两个项目:ASP.NET和Silverlight 两者都使用一个类(库类项目中的QueryServiceClass),它具有使用ADO.NET访问数据库的操作数据库的查询方法。 (打开与数据库的连接,添加客户,编辑,更新等。)
因此我将它们存储到C#类库中,并与ASP.Net和Silverlight共享。 ASP.NET项目和Silverlight的Web项目将引用QueryServiceClass项目。
但是如果我发布了ASP.NET/Silverlight项目,那么也应该发布QueryServiceClass项目的dll文件(此时dll应该位于服务器端)。
因为QueryServiceClass的方法必须是公共的,所以ASP.NET/Silverlight项目可以使用它。 那么有人可能能够使用该DLL访问数据库?那会安全吗?
====== 修改
在Silverlight的Web项目中,我使用WCF inhert QueryServiceClass和Interface来访问数据库,因此在Silverlight Client上,它将通过WCF访问数据库。 我更担心有人可能会从服务器上获取dll文件并将其提供给某人。
提前致谢。
景
答案 0 :(得分:2)
您可以将您的成员设置为内部而不是公共,并修改AssemblyInfo.cs类,并使内部对特定组件可见。
[assembly: InternalsVisibleTo("OtherLib.Domain.Stuff")]
这不会阻止某人反汇编您的DLL以获取信息,但会阻止他们在代码中使用您的dll。
答案 1 :(得分:1)
公开与否,不安全。如果您的东西在没有适当访问限制的情况下访问数据库,以任何方式从不可信赖的计算机访问,那么您的数据库将是全开放的。
执行此操作的正确方法是在Silverlight事物和数据库之间放置Web服务,并在服务中执行彻底访问检查。
答案 2 :(得分:1)
防止任何问题的最安全方法可能是不允许从公共互联网远程访问您的数据库。这通常通过在Web服务器上运行服务(该服务可以是网站)然后使用该服务连接到数据库来处理。基本上,您应该确保不能从网络外部的计算机直接连接到数据库服务器。
答案 3 :(得分:0)
通过将数据库登录凭据存储在配置文件中并对其进行加密,可以使此安全。然后他们可以访问dll,但没有有效的凭据就无法连接到数据库。
这里描述了加密web.config文件中的值的an article。
编辑:将此与Chris的建议相结合,您就拥有了一个良好,安全的解决方案。
答案 4 :(得分:0)
即使您将方法设为私有,也可以使用反射或反编译DLL来获取代码,然后访问数据库。