【问题标题】:Prevent windows admin user from reading a SQL Server database阻止 Windows 管理员用户读取 SQL Server 数据库
【发布时间】:2013-06-04 11:52:57
【问题描述】:

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

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

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

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

有什么办法可以预防吗?

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

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

【问题讨论】:

  • 如果用户要“破解”系统(或者更确切地说,如果这样的修改会损害系统完整性)那么微不足道,那么你已经失去了..
  • :) 嗯,这不是技术上的敏感信息,但软件应该管理数据库,这就是创建它的原因。否则我宁愿只部署数据库并要求他们手动管理和修改并插入它......怎么说?!嗯,这就是我可以说迷路的地方。
  • @MitchWheat,不是真的。我怎样才能让他手动编辑它?!我的意思是,如果他删除了自己上个月的工资记录,然后根据软件的结果,要么重新索赔,要么由于软件出错客户向我公司索赔工资?!

标签: database security sql-server-2005


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    管理应用程序/数据库权限的标准方法是创建数据库架构和角色并将权限分配给这些角色,例如 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

    Schema, Owner for objects in MS SQL

    【讨论】:

    • “但是,您无法阻止系统管理员查看/更改数据。如果您通过角色管理访问权限,您将把安全责任转移给系统管理员,这是一件好事。”太棒了。那么,似乎需要在 EULA 中提及这一点。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多