我正在尝试从本地计算机连接到Oracle DB,并使用以下libname语句。
libname liblibb oracle path='galaxy' defer=no
connection=globalread readbuff=4000 ;
这有效...因为它使用Windows AD详细信息登录。 但是,问题是当我使用rsubmit(服务器UNIX)运行此libname语句时。
rsubmit;
libname liblibb oracle path='galaxy' defer=no
connection=globalread readbuff=4000 ;
endrsubmit;
错误:
ORA-01017 Invalid Username/Password
Error in the LIBNAME statement
但是当我使用用户名和密码时,它可以工作。
rsubmit;
libname liblibb oracle path='galaxy' user=xxxx password='xxxx'
defer=no
connection=globalread readbuff=4000 ;
endrsubmit;
是否有任何可能的方法在rsubmit上登录Oracle而无需在libname语句中写入用户和密码详细信息,或者至少使用dbprompt作为用户名和密码?或者我们如何使UNIX与Windows AD同步使用,因此需要单点登录概念。
答案 0 :(得分:0)
如果您不想在rsubmit中提交密码,则需要在unix框上拥有Oracle数据库的凭据。通过使用rsubmit,db会看到您尝试登录的unix版本,而不是您的Windows版本。
答案 1 :(得分:0)
使用rsubmit时,您将语句传递给远程服务器,并且该语句正在远程服务器上运行。因此 1.您的凭据应该可用于远程服务器上的语句 2.您的远程服务器应该可以访问oracle
在第一种情况下,在本地计算机上使用libname语句时,odbc连接必须在连接配置文件中保存uid和密码。所以不需要指定。 在第二种情况下,配置文件没有保存您的凭据。因此您需要在远程计算机上提供它们。 一种方法是将用户名和密码保存为宏,并在服务器上提供。 典型的情况是这样的 %let dbpw = your_db_passwd; %let usrid = your_user_id; 这些可以放在您认为可以在登录脚本上的安全位置或本地计算机上程序外部的某些位置。将此包含在%include语句中。
%include passwd_file.sas;
现在将它们作为
在远程计算机上使用%syslput dpw=&dbpw;
%syslput userid=&userid;
rsubmit;
libname liblibb oracle path='galaxy' user=&userid password="&dbpw"
defer=no
connection=globalread readbuff=4000 ;
your_program_statements_here;
endrsubmit;
这是我如何使用它。