【发布时间】:2015-01-04 02:10:02
【问题描述】:
我正在使用 SAS Enterprise Guide 6.1,并且正在使用工具、SAS 程序下的“连接服务器时提交 SAS 代码”功能来提交我的所有个人凭据 libnames。是的,我知道使用 SAS Management Console 可能有一种更简单的方法来执行此操作,但目前还不能这样做。
我需要在每个项目中分配多个 Teradata 库,但问题是有时我(或更常见的是我团队中的其他人)会更改我的密码而忘记在启动代码中更改它。这导致了几次不正确的尝试,并立即将我锁定在外。我想做几件事:
创建一个条件库名分配,如果凭据正确,它将执行所有库名。
如果凭据不正确,则不会执行 libnames(这样我就不会将自己锁定)。
由于“连接服务器时提交 SAS 代码”部分中的 SAS 代码似乎没有生成日志,我希望给自己发送一封附有 SAS 日志的电子邮件(仅当凭据失败时) .
终止服务器连接(如果凭据出错)以避免进一步尝试分配库。
这是我的尝试,我在附加日志和设置电子邮件声明时遇到问题。
*Define personal credentials;
%let myemail=gollum@middleearth.com;
filename temp email "&myemail";
*Define Teradata credentials;
%let tera_user=Gollum; /*Teradata Username*/
%let tera_pwd=#filthy_hobbitses; /*Teradata Password*/
*Conditionally assign libraries;
%macro libsetup();
libname library1 teradata user=&tera_user password="&tera_pwd" tdpid=terap schema=library1 fastload=yes bulkload=yes fastexport=yes;
%if &syslibrc=0 %then
%do;
libname library2 teradata user=&tera_user password="&tera_pwd" tdpid=terap schema=library2 fastload=yes bulkload=yes fastexport=yes;
libname library3 teradata user=&tera_user password="&tera_pwd" tdpid=terap schema=library3 fastload=yes bulkload=yes fastexport=yes;
*more library statements here;
%end;
%else
%do;
data _null_;
file temp
subject="TERADATA CREDENTIALS ERROR"
attach=("put SAS LOG filename here");
put 'Teradata Login Failed. SAS LOG Attached.';
%abort abend;
%end;
%mend libsetup;
%libsetup;
谢谢。
【问题讨论】:
-
有时使用 libname 函数而不是 libname 语句更容易。
-
如果您要在代码中嵌入密码,请使用
PROC PWENCODE对其进行加密,然后在您的代码中嵌入加密值(例如%LET TERA_PWD = {sas002}ax=5qZhw4... ;)。
标签: sas