我正在创建一个许多人将自己安装在他们的机器上的产品软件。
这是一个VB.Net - SQL Server应用程序。
我当然不希望用户安装SQL Server GUI工具,如SQL Server Management Studio,然后直接调整数据库值/定义。
但是当我的客户将使用他自己的(最可能是系统管理员)帐户安装应用程序(以及数据库 - 和SQL Server实例,如果没有)时,该帐户显然将被授权访问,读取并修改数据库。
有没有办法阻止它?
我们尝试将.mdf
文件保留为app,但可以手动附加。
我们尝试使用.sdf
文件,它允许创建自己的密码,我们最初喜欢这个想法,但这对于单个项目.net解决方案来说是可以的。对于具有多个项目的.net解决方案(例如,一个用于用户信息和身份验证,一个用于员工工资单等),每个项目需要该文件的一个副本,使该想法无用。
答案 0 :(得分:3)
管理应用程序/数据库权限的标准方法是创建数据库模式和角色,并为这些角色分配权限,例如ReportViewer(仅限数据读取器访问),SensitiveDataViewer(用于工资等)并删除您的所有默认访问权限数据库访问。
然后使用域组(最好)或用户创建登录,并将这些登录添加到角色。如果您在域中并使用域组,则可以通过组的Active Directory用户成员身份管理访问权限。
但是,您无法阻止系统管理员查看/更改数据。如果您通过角色管理访问权限,那么您将安全责任转移给系统管理员,这是一件好事。
你可以加密你的整个数据库,但如果他们真的想要,系统管理员仍然可以绕过这个。
Database Engine Permission Basics
Manage Access and Roles with Transact-SQL (T-SQL) Commands
Understanding the Difference between Owners and Schemas in SQL Server
答案 1 :(得分:1)
我不相信无论如何都要阻止数据库用户查看或以其他方式更改安装在他们具有管理访问权限的SQL Server实例上的数据库。但是,有可能使查看或修改存储过程变得非常困难(但并非不可能)。 Microsoft将此方法与其GP会计软件一起使用。
要创建无法轻松进行逆向工程的存储过程,请使用ENCRYPTION
选项创建它们。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms187926.aspx。