我正在使用带有 SQL Server Express 2008 的 C# 开发一个会计应用程序,该应用程序仅在本地访问数据库。我希望客户在安装应用程序时输入用户名和密码,这样他是唯一可以运行应用程序的人,我的问题是:
1.我应该将登录凭据存储在本地文件中,还是使用这些凭据创建一个 sql server 用户帐户并依靠数据库对其保密?
2.如果第二个选项可行,如何从安装程序包中执行?
2 回答
您可以执行类似的操作,将数据库设置(例如 IP、端口、用户名和密码登录尝试凭据)存储在本地(可能在 XML 文件中),然后将程序的登录凭据存储在数据库中。
注意:显然我不知道您对安全性了解多少,但这里有一些提示:
1)不要将密码直接存储在数据库中。使用哈希和某种加密方法。2)检查用户尝试登录的给定密码的哈希值,以及您为程序创建的数据库存储变量,该变量也应该是哈希值。
基本上,数据库在任何时候都不应该知道实际密码是什么,只知道您传递给它的给定哈希值,并且可以在程序本身中进行比较。
关于数据库访问,我将创建一个用户,该用户只能访问您想要的模式。从那里,让您的应用程序/程序中的登录用户使用例如 XML 文件中的凭据登录数据库。在 XML 文件中加密这些细节也是一个想法,因此它们不能在本地被篡改。
这还有很多。如果安装 sql server 的人选择了 sql server security,则该用户 (sa) 将被定义并且可以访问所有内容。
如果只有 windows,那么它将是安装 sql server 的 windows 用户,他们将可以访问所有内容
如果混合,两者都可以访问所有内容
然后哪个用户在服务器上创建了数据库,默认情况下他们将是 dbo 并且可以完全访问他们的数据库。
所以这一切都取决于谁在做什么。
您的应用程序安装程序是否调用 sql server 安装?它会创建数据库吗?
管理员和 dbo 都可以向他们喜欢的任何人授予对所述数据库的访问权限。
添加安装应用程序的 Windows 用户只需让安装程序执行一两个 sql 命令即可。此时您已启用单点登录。无需密码即可添加 Windows 用户并将其映射到数据库角色/用户。
如果您想要任何用户知道的用户名和密码,那么也许只有 sql/混合模式是可行的方法。再次从您选择的安装程序执行几个 sql 命令来获取用户 fred 密码?,工作完成。
要记住的一点是,为了执行添加登录名和用户、角色等的指令,您需要以其他人的身份进行连接,例如 windows admin 或 sa。
此外,托管网络上的大多数应用程序用户都没有管理员权限,因此您也可以从中获得一些乐趣。
我建议您阅读有关 sql server 安全性的内容,有几种方法可以剥去这只猫的皮,只有您有足够的信息来选择最佳选项。
您甚至可能想考虑基于应用程序的安全性,如果您的应用程序的每次安装都会创建它自己的数据库和角色......