【问题标题】:Is it possible to password protect an SQL server database even from administrators of the server?即使是服务器管理员也可以对 SQL 服务器数据库进行密码保护吗?
【发布时间】:2010-12-29 07:50:27
【问题描述】:

我想在一些小公司的本地网络中安装一个应用程序(ASP.Net + SQL server 2005 express)来演示一段时间,但我也希望没有人甚至系统管理员有对此数据库没有权限,任何授予的权限都需要我拥有的安全通行证。 我只想隐藏我的表结构、关系和函数,加密数据没有任何优势

我需要花更多时间在这篇文章 Database Encryption in SQL Server 2008 Enterprise Edition 上,我从这个答案 is-it-possible-to-password-protect-an-sql-server-database 中找到

但是

1.我希望对此更加明确,因为此页面中的other answer 表示:

是的。你可以保护它免受所有人的伤害 除了的管理员 服务器。

2.如果可以,数据库必须是企业版?

3.是否有其他可能的解决方案和解决方法?

4.如果我使用自己的 sa 密码安装新实例,我可以限制其他实例管理员将 mdf 附加到他们自己的吗?

提前致谢

【问题讨论】:

  • 不能用sql 2008 express吗? 2008 拒绝所有用户的权限,除非您在安装期间或之后授予他们权限。
  • 是的,但是下面的答案说即使在 2008 年也是不可能的
  • @u07ch 这可能是真的,但是当在客户端服务器上设置数据库时,在该系统上具有管理员权限的系统管理员将能够访问数据库架构。
  • 作为非答案:切换到 FireBird,至少在那里您可以删除存储过程和视图定义(它以字节码的形式保留在数据库中)。至少通过这种方式,您可以让 95% 的尝试对您的数据库进行逆向工程的人无法(或没有回报)。您可以对表中的数据进行加密。

标签: sql database sql-server-2005 security


【解决方案1】:

无论你做什么,这些人都可以访问你的服务器或 SQL Server 实例

  • 对服务器有物理访问权限的任何人
  • 网络的域管理员
  • 任何拥有 sa 密码的人
  • 具有本地管理员和/或 sa 权限的 Windows 组(这意味着组策略等)

如果您不希望任何人登录,您必须将服务器托管在异地。

很简单

【讨论】:

    【解决方案2】:

    在 SQL Server 中,您不能“密码保护”数据库 - 您可以做的是限制给定用户或角色在您的数据库中拥有的权限。

    您可以DENY 任何人访问您的数据库 - 但这有点奇怪,因为没有人可以使用它......

    您可以对数据库表和登录名做各种事情——但系统管理员总是能够绕过这些事情并访问数据库。只要系统管理员可以亲自操作服务器,我认为没有任何方法可以完全将他们拒之门外。

    如果你连系统管理员都不信任,那你的问题就更大了.....

    【讨论】:

    • 你说我不可能只给 NetworkService 或 aspnet 读写权限?
    • 这不是信任的问题,我只想隐藏表格结构、功能和设计,如果可能的话并且可以访问
    • @imanabidi:要实现这一点,您需要自己托管 SQL Server(“在云中”)并且永远不要让任何人靠近它们......例如在笔记本电脑上(用于演示)或在您自己的数据中心中实际使用,并且不要让任何人直接访问您的数据库(“屏蔽”它,例如服务层)
    • @marc_s:最后一句话隐含地假设您信任您向其出售程序(和数据库)的所有人员(及其系统管理员),这并不十分明智。
    【解决方案3】:

    有几种不同的方法可以解决这个问题。

    1. 异地托管 - 我认为最简单的解决方案就是异地托管。有很多便宜的共享主机可供您使用。

    2. 从该服务器锁定系统管理员。假设您具有 root 访问权限并且只有您使用/需要该服务器,您可以更改 root 密码和服务器上的任何其他密码。

    3. 做您当前正在做的事情,并尝试确保某些东西的安全,即使不应该有访问权限的人拥有对服务器的 root 访问权限。即使充其量,这种方式听起来也很棘手且不安全。

    【讨论】:

    • 第 2 点将不起作用,因为他正在将其安装在公司的服务器上以演示他的应用程序。因此,系统管理员绝不会允许任何人控制他们的一台服务器。不过,您在场外托管它是一个不错的选择。
    【解决方案4】:

    我对 (3) 有贡献:

    我猜(我可能错了)您的数据库中实际上并没有敏感信息,您只是想让本地网络中的某个人无法使用您的任何东西。

    如果是这种情况,您可以通过加密数据库中的数据并让您的(编译的)代码在使用之前对其进行解密,从而使他们更难读取您的数据。

    这样,任何只是对数据感到好奇或想将 hiscore 更改为 13371337 的系统管理员都不想经历反编译代码和/或破解加密的麻烦(在演示期间),并且您的(假设的)问题将得到解决。

    我不知道这是否对你有帮助,我想我只是想说你可能想再看看你的问题。由于您无法让系统管理员远离您的东西,因此您可能需要采取不同的方法,例如降低对他们的用处。

    【讨论】:

    • 非常感谢,但数据并不重要。我只想隐藏架构和表格设计
    • 好的,怎么样:既然您只是托管一个演示,难道您不能从您带入网络的计算机上运行您的数据库,并在演示结束后再次随身携带吗?这样,网络管理员将只是您计算机上的“客人”,但他们可以从您安装它的位置管理 (asp.net) 应用程序。或者,您可以在自己的计算机上托管整个内容,但我假设您不希望这样。
    【解决方案5】:

    正如其他各种海报所讨论的,您不能 password protect a database - 拒绝权限 - 给系统管理员。尚未讨论的一种替代方法是将其托管在笔记本电脑上。由于这是一个演示,您可以在笔记本电脑上托管数据库和 ASP.Net 站点,然后将其连接到他们的网络 - 当然在获得系统管理员许可后 - 并让客户端从您的笔记本电脑测试应用程序。

    这将允许您保护数据库免受系统管理员的侵害,并提供额外的好处,如果您想让他们看到数据库,您可以让他们使用您的笔记本电脑,您将在那里观察他们对您的数据库的操作。最后一个好处是托管解决方案无法轻松实现的。

    以上回答了第 3 点。至于第 2 点,您将需要 SQL Server 企业版才能利用 comparison link on MSDN 中的透明数据加密 (TDE)。如果单击顶部的 Enterprise Security 链接,它将显示一个表格,解释不同 SQL Server 版本的不同安全功能,并显示 TDE 仅适用于 Enterprise Edition。

    【讨论】:

      猜你喜欢
      • 2017-01-19
      • 1970-01-01
      • 2015-04-19
      • 1970-01-01
      • 2010-11-14
      • 2011-10-10
      • 2023-03-19
      • 2016-12-05
      • 1970-01-01
      相关资源
      最近更新 更多