我在 SQL 登录方面遇到了一个奇怪的问题。当我使用此帐户连接到 Microsoft SQL Server Management Studio (2008) 中的服务器时,我看不到此帐户应有权访问特定数据库的任何表、存储过程等。
当我使用相同的帐户连接到 Visual Studio (2008) 中的同一服务器时,一切都在那里。当我在虚拟机上使用同一帐户连接时,一切都在那里。我还有一位同事使用相同的登录名连接到服务器,他也可以查看所有内容。
我整天使用 Microsoft SQL Server Management Studio 连接到不同的服务器和数据库,但从未遇到过此问题。
有人对我如何诊断这个问题有任何建议吗?
我已检查以确保我没有任何表格过滤器等。
此服务器上有多个数据库,我可以很好地看到该帐户在其他数据库中可以访问的正确表。
运行此查询会列出我期望看到的表。
SELECT * FROM INFORMATION_SCHEMA.TABLES
我已经解决了我的问题。这是一个错误...这是详细信息
这是 SMO 中的一个错误。我们计划在下一个主要版本 SQL11 中修复此问题。 这个bug实际上与模式无关,而是与表所有者有关。当我们尝试从 SMO 中的服务器获取表时,由于性能原因,我们尝试通过执行 INNER JOIN 一次性获取它们的所有者。因此,如果用户没有查看表所有者的权限,他就无法使用 SMO 查看表,这是一个错误。 因此,解决方法是向用户提供对表的所有所有者的查看权限。另一种方法是让该用户成为数据库的“安全管理员”,但随后该用户将获得许多额外的权限,因此不建议使用第二种解决方案。向用户提供表所有者的查看权限是更好的方法。
启动 SQL Profiler,然后刷新 SQLSMS 中的数据库列表,看看它用于列出数据库的查询是什么。
您可以重新启动sql管理来修复它。