我公司的最终用户经常使用 Microsoft Query(通过 Excel)对选定的 SQL Server 数据库执行临时查询。当我们在后端迁移到 SQL Server 2005 时,我们发现 MS Query 列出了所有架构中的所有对象,无论用户是否有权访问这些对象或架构(他们没有)。我也尝试过使用较新的 Native Client 驱动程序(9.0 和 10.0),但得到的结果相同。
我发现用户可以在 Microsoft Query 中选择连接时选择所需的模式,但如果可能的话,我想隐藏不必要的系统对象和模式以避免混淆。有人发现了这样做的方法吗?
答案1
最近,微软的知识库上发表了一篇关于此问题的文章:Microsoft Query 在查询向导中列出了用户对象和系统视图。
答案2
http://support.microsoft.com/kb/2513216 微软指责用户?这是 SQL Server 中已知的错误,微软不会解决。有很多关于拒绝选择公共配置文件的警告。
答案3
不,我从未发现过。Microsoft Query 会调用 [database].sys.sp_tables,然后从 sys.all_objects 和 sys.all_columns 中提取数据,以获取要呈现给用户的表/视图信息。您不能拒绝执行 sp_tables(好吧,您可以,但只能在服务器级别),所以我对这个问题的结论一直是“您运气不好”……
答案4
我同意。我发现在 Excel 2000/2003(不确定 2007)中,如果您使用 ODBC 系统 DSN 访问 sql server 2000,则用户只能看到他们有权限访问的对象。我将使用 Excel 2007 检查 SQL Server 2005,稍后再更新。