最初我在另一个帖子中发布了这个问题:
smbclient 连接到 Windows 机器时获取 NT_STATUS_LOGON_FAILURE
以下是具体内容:
我需要从 Oracle 数据库内的 Java 程序将 ZPLII 文件发送到 Zebra 打印机。
如果我运行 bash 命令进行打印,它会起作用:
[oracle@serverws01 ~]$ smbclient //serverps02/zebra_teste -U 'XXXXXX\uuu.uuuuuu%pppppppppp' -W XXXXXX -c 'print /home/oracle/oradata/zpl/et.txt'
Domain=[XXXXXX] OS=[Windows Server 2012 Datacenter 9200]
Server=[Windows Server 2012 Datacenter 6.2]
putting file /home/oracle/oradata/zpl/et.txt as et.txt-18047 (102.4 kb/s) (average 102.4 kb/s)
[oracle@serverws01 ~]$
当然,我隐藏了命令的用户和密码。但它们是正确的。
但是,如果我需要在 Oracle 数据库的 Java 源中使用此命令,相同的调用就会失败:
SQL> declare
2 cmd varchar2(2000);
3 begin
4 cmd := 'smbclient -U ''xxxxxx\xxxxxx%xxxxxx'' //serverps02/zebra_teste -c ''print /home/oracle/oradata/zpl/et.txt'' ';
5 dbms_output.put_line(cmd);
6 rc(cmd);
7 end;
8 /
smbclient -U 'xxxxxx\xxxxxx%xxxxxx' //serverps02/zebra_teste -c 'print /home/oracle/oradata/zpl/et.txt'
**session setup failed: NT_STATUS_LOGON_FAILURE**
X = 1
PL/SQL procedure successfully completed.
这次你可能会发现双引号有些奇怪,与第一个例子不同。但这是 plsql 组装包含引号的字符串的方式。
smbclient
是否有人知道在 Java 程序内部调用是否需要一些额外的权限?
该打印机是网络打印机,其打印服务器是Windows NT。