【问题标题】:SQL Server Linked Server with tnsnames.ora on network share - ORA: 12154网络共享上带有 tnsnames.ora 的 SQL Server 链接服务器 - ORA:12154
【发布时间】:2019-09-05 00:39:03
【问题描述】:

在网络共享上使用 tnsnames.ora 文件时,将 SQL Server 链接服务器连接到 Oracle 时出现问题。

如果我将 tnsnames.ora 文件复制到本地服务器,则链接服务器可以正常工作。但是,我们将文件保存在网络共享上。我的 sql 服务帐户对共享具有读取权限。我将 TNS_ADMIN 系统变量配置为网络共享,链接服务器不再工作。我得到 ora-12154:无法解析指定的连接标识符。 tnsping 和 sqlplus 在服务器上工作。当我使用进程监视器进一步调查时,我看到:

Operation: createFile
Result: ACCESS DENIED
...
Impersonating: domain\MyLogin

这似乎是一个问题,但可能是误报?如果某个进程试图模拟我的帐户并访问远程资源,它将失败,因为我们没有将 Kerberos 配置为处理双跳。

SQLPlus 和 TNSPing 与配置的网络共享一起工作得很好。

我查看了this post 并尝试了似乎相关但没有成功的项目。

其他信息:

sqlnet.ora 有这个: SQLNET.AUTHENTICATION_SERVICES= (NTS) NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

我可以将文件浏览器作为服务帐户打开并打开 tnsnames 文件。

【问题讨论】:

  • 尝试重新启动 MSSQL 服务器以初始化 MSSQL 服务器进程的 TNS_ADMIN 变量。
  • 谢谢,但我已经试过了。我通过测试知道 tns_admin 变量更改在服务重新启动之前不会生效。
  • TNS_ADMIN目录下是否有sqlnet.ora文件?如果有,请显示 sqlnet.ora 文件的内容。
  • 您可以通过您的sql 服务帐户 在网络共享上阅读您tnsnames.ora 的内容吗?你真的尝试打印出内容吗?
  • 在我们的环境中,我们总是在服务器上使用本地 TNSNAMES 文件。我已经编写了一个 Oracle PL/SQL 包,它根据需要使用特定于服务器的自定义来编写这些文件。也就是说,因为 SQL*Plus 正在运行,我认为您遇到的是权限问题。确保运行 SS 的服务有权访问您的网络共享。

标签: sql-server oracle linked-server tnsnames


【解决方案1】:

我在尝试通过我在 .NET 4.0 框架中开发的 WCF 服务连接 oracle 10g 数据库时遇到了同样的问题。

我的系统中安装了多个 ORACLE 实例。所以,我修改了ORACLE_HOME 以指向Oracle 10g,它工作了。

还要检查以下内容:

您的服务名称可能有一个别名,因此请确保您的侦听器正在侦听您正在使用的相同服务名称,并检查本地和全局条目。检查:

$ORACLE_HOME/network/admin/tnsnames.ora 

使用此 SQL 检查您的 global_name 设置:

select * from global_name;

另外,请确保在注册表中添加 Key TNS_ADMIN 并创建一个名为 TNS_ADMIN 的环境变量

Regedit->HKEY_LOCAL_MACHINE->Software->Oracle->RightClick NEW->StringValue and name

为示例指定安装oracle的正确路径

X:oracleproduct32bit10.0.1.0.0NETWORKADMIN

编辑

下面的视频看起来也很有帮助。请检查。

https://www.youtube.com/watch?v=Sec8WG8gQPg

【讨论】:

  • 感谢您的建议,我会检查一下。我们正在连接到 10g - 明年左右,然后所有 dbs 将在 12 上。我遵循的 MSFT 文章中的许多相同的故障排除技巧,但我会仔细检查。
【解决方案2】:

作为一名 Oracle DBA,我有时必须使用 Windows。也许您可以借鉴我在 Windows 上使用 Oracle 的经验。

场景:

Oracle DB 在域用户下运行。我想从位于 Windows 共享上的备份中恢复数据库(听起来像“读取”,但显然不是)。我(或者说是 Windows 团队)没有设法找到授予所需权限的正确方法。

经过多次尝试,管理员将“一切”授予整个 Oracle 服务器。

即使 Oracle 进程在用户上下文中运行,我们也没有找到仅针对该用户的一组权限。只有整个服务器的权限才允许恢复过程访问数据。

从安全的角度来看,这是一个可怕的解决方案!但也许它会帮助您更接近解决方案(如果是,请分享:-))。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多