1

我正在创建一个产品软件,许多人将自己安装在他们的机器上。

它是一个 VB.Net - SQL Server 应用程序。

我当然不希望用户安装一些 SQL Server GUI 工具,例如 SQL Server Management Studio,然后直接摆弄数据库值/定义。

但是,当我的客户使用他自己的(很可能是系统管理员)帐户安装应用程序(以及数据库 - 和 SQL Server 实例,如果没有的话)时,该帐户显然将被授权访问、读取和修改数据库。

有什么办法可以预防吗?

我们尝试.mdf使用应用程序保存文件,但可以手动附加。

我们尝试使用.sdf文件,它允许创建自己的密码,我们最初喜欢这个想法,但这对于单项目 .net 解决方案来说是可以的。对于具有多个项目的 .net 解决方案(例如,一个用于用户信息和身份验证,一个用于员工工资单等),每个项目需要该文件的 1 个副本,从而使该想法毫无用处。

4

2 回答 2

3

管理应用程序/数据库权限的标准方法是创建数据库架构和角色,并为这些角色分配权限,例如 ReportViewer(仅限数据阅读者访问)、SensitiveDataViewer(用于薪水等),并删除数据库访问的所有默认访问权限。

然后,您使用域组(最好)或用户创建登录,并将它们添加到角色。如果您在域中并使用域组,则可以通过 Active Directory 用户组成员身份管理访问。

但是,您无法阻止系统管理员查看/更改数据。如果您通过角色管理访问,您将安全责任转移给系统管理员,这是一件好事。

你可以加密你的整个数据库,但如果系统管理员真的想要的话,他们仍然可以绕过这个。

数据库引擎权限基础

使用 Transact-SQL (T-SQL) 命令管理访问和角色

了解 SQL Server 中所有者和架构之间的区别

MS SQL 中对象的模式、所有者

于 2013-06-08T06:19:31.743 回答
1

我认为无论如何都不会阻止数据库用户查看或以其他方式更改安装在他们具有管理访问权限的 SQL Server 实例上的数据库。但是,查看或修改存储过程可能会变得非常困难(但并非不可能)。Microsoft 将这种方法与他们的 GP 会计软件一起使用。

要创建无法轻松进行逆向工程的存储过程,请使用ENCRYPTION选项创建它们。有关更多详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms187926.aspx

于 2013-06-08T05:57:05.657 回答