我不确定我想要的是否可以实现,但我们还是开始吧。
在工作中,我们有一个专用的 SQL Server 2008 机箱,用于托管我们需要运行的各种数据库。我们有一个远程人员(我们称他为 Bob)需要在其上托管数据库。我被要求限制 Bob 对 SQL 机箱的访问权限,但只给他足够的访问权限来控制他的数据库。
目前,我已为 Bob 设置了一个 SQL 登录名,并将其设为 Bob 数据库的数据库所有者,但未授予任何其他访问权限。当我使用 Bob 的 SQL 登录名登录 SSMS 时,我可以看到所有其他数据库,但只能访问 Bob 的数据库。但是,我可以访问和使用主数据库,但对我来说,这感觉不太好。
有没有办法可以阻止Bob看到其他数据库的名称并阻止他访问主数据库?
答案1
在 SQL 2005 和 2008 中,引入了授予/删除查看数据库权限的功能,称为“查看任何数据库”
http://msdn.microsoft.com/en-us/library/ms189077.aspx
您只需确保您想要限制的登录对此服务器权限没有直接或间接(尽管是组成员身份)的权限。
答案2
我不确定是否要禁用查看数据库的功能,但对于主服务器,Bob 可能 (a) 具有对主服务器的明确权限 (b) 具有服务器角色或 (c) 以“访客”身份访问。通过查看 Bob 的服务器登录信息,检查 a 和 b 应该很容易。以 Bob 身份登录时,在主服务器中运行“select user_name()”来检查 c。