你如何configuration一个MS SQL Server,以防止暴露所有的数据库名称和login到任何经过身份validation的用户?

我是MS SQL的新手,并且把这个问题当作一个有限的系统pipe理经验的Web开发人员,他们希望他的服务提供者使用最佳实践。

我们在托pipe公司提供的远程MS SQL服务器上有一个数据库。 我们的托pipe公司的其他客户使用同一台服务器来处理他们的数据 当我使用Microsoft SQL Server Management Studio Expresslogin到服务器时,可以看到大量信息,包括服务器上所有数据库的名称以及所有login信息。

虽然我不能访问其他客户的数据库,也看不到密码,但我甚至能够看到这些信息,这似乎很奇怪。 我当然不希望其他客户知道我的数据库或我的login名。 当我向服务提供者提出这个问题时,他的回答是:

我检查了我的SQL人,他说,不幸的是MSSQL服务器的限制。 虽然数据库名称是可见的,但不能访问没有该数据库密码的任何数据库。

这是我login后看到的:

  • mssql.server.com
    • 数据库
      • 系统数据库
      • 一大堆客户端数据库…
    • 安全
      • login
      • 一大堆客户login…
    • 服务器对象
    • 复制
    • pipe理

这是build立一个SQL Server的正确方法吗? 请确认或否认我的怀疑,答案是否定的,我需要find其他人来承载我们的数据库。

从开发方面来说,我可以说pipe理员应该能够将每个人都locking到他们自己的数据库(也可能掌握元数据)。 从MSDN, SQL Server安全列表包括数据库, 权限包括能够看到数据库。 以下是指向数据库的MSDN安全注意事项的链接。

Management Studio从sys.databases获取数据库列表。 sys.databases上的默认权限是每个login只能看到它自己的数据库:

如果sys.databases的调用方不是数据库的所有者,并且数据库不是master或tempdb,则查看相应行所需的最小权限是ALTER ANY DATABASE或VIEW ANY DATABASE服务器级权限或CREATE DATABASE权限主数据库。 调用者连接到的数据库总是可以在sys.databases中查看。

如果你有login看到自己的数据库,这意味着login有不必要的权限,如CREATE DATABASE。

以这种方式使用MS SQL作为共享主机根本不会令我满意 – 但是您得到的是您所付出的。 如果你的合同条款和条件没有说你得到了你自己的SQL实例,而只是在一个共享实例中获得一个数据库,那么你确实得到了你所支付的东西。

这隐藏了其他数据库和用户,但只有一个用户(可能是你之后的反正)。 我已经在MS SQL 2008 R2上testing过了。

在Server Management Studio中:

  • 创build一个用户帐号,不要设置任何权限
  • 打开服务器属性>权限>select新帐户>选中“拒绝查看数据库”框
  • 打开数据库属性>文件>将数据库所有者设置为用户帐户

要将数据库隐藏到所有LOGINS,请从公共服务器angular色中删除/撤销“查看任何数据库”权限

http://sqlism.blogspot.com/2014/10/preventing-logins-and-users-to-see.html