【问题标题】:Controlling access to SQL server database file with C# desktop application使用 C# 桌面应用程序控制对 SQL Server 数据库文件的访问
【发布时间】:2012-09-24 22:37:59
【问题描述】:

我正在使用 C# 和 SQL Server Express 2008 开发一个会计应用程序,该应用程序只在本地访问数据库。我希望客户在安装应用程序时输入用户名和密码,这样他是唯一可以运行应用程序的人,我的问题是:
1. 我应该将登录凭据存储在本地文件中,还是使用这些凭据创建一个 sql server 用户帐户并依靠数据库对其保密?
2.如果第二个选项可行,如何从安装包中进行?

【问题讨论】:

  • 您是否考虑过使用 SQL CE 而不是 Express?这是一个不错的比较:erikej.blogspot.com/2011/01/…
  • 我已经阅读了足够多的 SQL CE 知识,知道它是正确的使用方法,非常感谢。
  • 很高兴为您提供帮助...似乎可能更适合您的场景,但不太确定。我知道你之前问过关于在实体框架中使用它的问题,我可以证明我已经在 EF 中使用它并且效果很好。

标签: c# sql-server sql-server-2008 desktop-application


【解决方案1】:

还有很多。 如果安装 sql server 的人选择了 sql server security,则该用户 (sa) 将被定义并可以访问所有内容。

如果只有windows,那么安装sql server的就是windows用户,他们可以访问所有东西

如果混合使用,则两者都可以访问所有内容

然后是哪个用户在服务器上创建了数据库,他们默认是 dbo 并且拥有对其数据库的完全访问权限。

所以这一切都取决于谁在做什么。

您的应用程序是否会调用 sql server 安装? 它会创建数据库吗?

Admin 和 dbo 都可以向他们喜欢的任何人授予对所述数据库的访问权限。

添加安装应用程序的 Windows 用户只需让安装程序执行一两个 sql 命令即可。此时您已启用单点登录。无需密码即可添加 Windows 用户并将其映射到数据库角色/用户。

如果您想要一个任何用户都知道的用户名和密码,那么也许只有 sql/混合模式是要走的路。再次从您选择的安装程序执行几个 sql 命令来获取用户 fred 密码?,工作完成。

要记住的一点是,为了执行添加登录名和用户、角色等的说明,您需要以其他人的身份进行连接,并获得执行此操作的权限,例如windows admin 或 sa。

此外,托管网络上的大多数应用程序用户都没有管理员权限,因此您也可以从中获得一些乐趣。

我建议您阅读一下有关 sql server 安全性的信息,有几种方法可以给这只猫剥皮,只有您有足够的信息来选择最佳选项。

您甚至可能想考虑基于应用程序的安全性,如果您的应用程序的每次安装都会创建它自己的数据库和角色......

【讨论】:

  • 感谢您的详细解释,我想我会选择安装程序应在本地设置 SQL 服务器以及数据库并设置权限的选项,这意味着我将不得不阅读有关 SQL Server 的信息数据库安全。
【解决方案2】:

您可以执行类似的操作,将数据库设置(例如 IP、端口、用户名和密码登录尝试凭据)存储在本地(可能在 XML 文件中),然后将程序的登录凭据存储在数据库中。

注意:显然我不知道您对安全性了解多少,但这里有一些提示:

1) 不要将密码直接存储在数据库中。使用哈希和某种加密方法。 2)检查用户尝试登录的给定密码的哈希值,以及您为程序创建的数据库存储变量,该变量也应该是哈希值。

基本上,数据库绝不应该知道实际密码是什么,只知道您传递给它的给定哈希值,并且可以在程序本身中进行比较。

关于数据库访问,我将创建一个用户,该用户只能访问您想要的模式。从那里,让您的应用程序/程序中的登录用户使用例如 XML 文件中的凭据登录数据库。将这些细节也加密到 XML 文件中也是一个想法,这样它们就不能在本地被篡改。

【讨论】:

  • 谢谢,是的,我知道您所说的安全性,但我之前没有将它应用到真正的桌面应用程序中。所以我想我应该阅读有关数据库与应用程序级别安全性的信息。
猜你喜欢
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 2013-08-18
相关资源
最近更新 更多