我公司的最终用户经常使用 Microsoft Query(通过 Excel)对选定的 SQL Server 数据库执行临时查询。当我们在后端迁移到 SQL Server 2005 时,我们发现 MS Query 列出了所有模式中的所有对象,无论用户是否有权访问这些对象或模式(他们没有)。我也尝试过使用较新的 Native Client 驱动程序(9.0 和 10.0),但得到了相同的结果。
我发现用户在 Microsoft Query 中选择连接时可以选择他们想要的架构,但如果可能的话,我想隐藏不必要的系统对象和架构以防止混淆。有没有人发现一种方法来做到这一点?
最近在 Microsoft 的 KB 上发表了一篇关于此问题的文章:Microsoft Query 在查询向导中列出了用户对象和系统视图。
http://support.microsoft.com/kb/2513216 微软责怪用户?这是 Microsoft 不会解决的 SQL Server 中的一个已知错误。有许多关于拒绝为公共配置文件选择的警告。
不,我从来没有发现过。Microsoft Query 调用 [database].sys.sp_tables 依次从 sys.all_objects 和 sys.all_columns 中提取,以便获取要呈现给用户的表/视图信息。你不能拒绝执行 sp_tables (好吧,你可以但在服务器级别)所以我对此的结论一直是“你不走运”......
用户应该只能看到他们有权访问的对象。它是 SQL Server 2005 及更高版本的新安全模型的一部分。通过公共角色检查用户是否无权访问这些对象。他们可以通过 SQL Server Management Studio 查看对象吗?
我同意。我发现在 Excel 2000/2003(不确定 2007)中,如果您使用 ODBC 系统 DSN 访问 sql server 2000,用户只能看到他们有权访问的对象。我将检查带有 Excel 2007 的 SQL Server 2005 并稍后更新。
DbDefence 使用未记录的特性来隐藏数据库模式,甚至对 DBA 也是如此。在 SQL Server 2005 中工作。他们也提供免费版本。
如果您只想稍微隐藏它,可以使用“EXEC sys.sp_MS_marksystemobject”