我们使用低特权域帐户运行我们的 SQL Server 服务。该帐户不是操作系统上的本地管理员。只有在安装 SQL 期间分配了我给用户帐户的访问权限:完全控制其安装点,然后由 SQL Server 2005/2008 安装程序授予其他所有权限。
我需要在 SQL Server 2008 中创建一个链接到 ODBC 数据源的服务器。因此,我使用我的域帐户远程访问了计算机,该帐户是确实具有操作系统本地管理员权限的组的一部分。我创建了一个系统 DSN 并将其配置为连接到另一个 SQL Server。当我测试它时,DSN 运行良好。但是,当我尝试创建链接服务器时,出现错误。
在我看来,DSN 对于运行 SQL Server 的域帐户是不可见的。这个问题似乎只发生在 Windows 2008 服务器上。有谁知道在创建 DSN 后您是否需要做任何事情以使其对其他用户可见?
您必须将用户的 Windows 登录名(如果使用 AD,则仅添加 DOMAIN\Domain Users)作为每个相关数据库的 DBO 显式添加到 SQL。通过 Win2K3 服务器,只需要一个 DSN-only SQL 登录,但在 Win2K8 中,仅 DSN-only SQL 登录是不够的。一旦我将给定(受限)用户(在我的情况下实际上是 DOMAIN\Domain 用户 - 他们都是受限用户)的 Windows 登录添加到我的 SQL 服务器,然后每个用户都可以使用 DSN(使用自己的单独登录设置)和以前一样……这是多么重要的 PITA——感谢没有任何注释,Microshaft!!!!
从我在谷歌上阅读的内容来看,这种行为似乎是 UAC 的结果。您可以选择禁用该特定服务器上的 UAC。
我不确定是否有办法在不禁用 UAC 的情况下允许这样做。
确保在需要创建 32 位 DSN 而不是 64 位 DSN 时创建 32 位 DSN。64 位系统上有两个版本的 ODBC 工具。默认情况下打开 64 位。尝试手动导航到 C:\Windows\SysWOW64\odbc32ad.exe 工具并在那里创建 DSN。
混淆是试图保持向后兼容性的不幸副作用。