Macros 密码作为libname语句中的宏变量

Macros 密码作为libname语句中的宏变量,macros,sas,Macros,Sas,我想在libname语句中调用宏变量作为密码,但它似乎不起作用。 我写的libname语句是 %let pswd=ABCD libname sa2st oracle path='wegtrse' user=myname password='&pswd' defer=no connection=globalread readbuff=4000 ; 这是一个错误 Error in the libname statement 在日志中 NOTE: Line generated by the

我想在libname语句中调用宏变量作为密码,但它似乎不起作用。 我写的libname语句是

%let pswd=ABCD
libname sa2st oracle path='wegtrse' user=myname password='&pswd' defer=no
connection=globalread readbuff=4000 ;
这是一个错误

Error in the libname statement
在日志中

NOTE: Line generated by the macro variable "PSWD".
18   Xpswd
  ----
  22

如何调用此libname语句中的宏变量?

宏触发器不会在单引号内计算。改用双引号字符。还要确保在分配宏变量时包含结尾分号

%let pswd=ABCD;
libname sa2st oracle path='wegtrse' user=myname
   password="&pswd" defer=no
   connection=globalread readbuff=4000 
;

宏触发器不会在单引号内计算。改用双引号字符。还要确保在分配宏变量时包含结尾分号

%let pswd=ABCD;
libname sa2st oracle path='wegtrse' user=myname
   password="&pswd" defer=no
   connection=globalread readbuff=4000 
;

将此与您的相关问题()联系起来,如果您关心以纯文本形式存储密码,则可以使用PWENCODE过程对其进行加密,然后在libname语句中使用该过程

/* One off (or when password changes), then take {SAS002} result from log */ proc pwencode="mylongpassword" method=sas002 ; run ; %LET USR = bilbobaggins ; %LET PWD = {SAS002}B02D643D06D400915C1E7F831D448FD5266E98F15A282918 ; libname mylib oracle user="&USR" pass="&PWD" path='wegtrse' ; /*一次性(或当密码更改时),然后从日志中获取{SAS002}结果*/ proc pwencode=“mylongpassword”方法=sas002;跑 %设USR=bilbobaggins; %设PWD={SAS002}B02D643D06D400915C1E7F831D448FD5266E98F15A282918; libname mylib oracle user=“&USR”pass=“&PWD”path='wegtrse';
将此与您的相关问题()联系起来,如果您关心以纯文本形式存储密码,则可以使用PWENCODE过程对其进行加密,然后在libname语句中使用该过程

/* One off (or when password changes), then take {SAS002} result from log */ proc pwencode="mylongpassword" method=sas002 ; run ; %LET USR = bilbobaggins ; %LET PWD = {SAS002}B02D643D06D400915C1E7F831D448FD5266E98F15A282918 ; libname mylib oracle user="&USR" pass="&PWD" path='wegtrse' ; /*一次性(或当密码更改时),然后从日志中获取{SAS002}结果*/ proc pwencode=“mylongpassword”方法=sas002;跑 %设USR=bilbobaggins; %设PWD={SAS002}B02D643D06D400915C1E7F831D448FD5266E98F15A282918; libname mylib oracle user=“&USR”pass=“&PWD”path='wegtrse';
我尝试了你说的方式,它给出了一个错误,说“userID/password无效”,还有一个警告“明显的符号引用PWD未解析”我尝试在没有宏变量的情况下查看userID/pswd是否正确,是否有效。@user3658367您在
%let
语句后似乎还缺少分号。我尝试了您所说的方式,它给出了一个错误:“userID/password无效”,并警告“明显的符号引用PWD未解析”我尝试在没有宏变量的情况下查看userID/pswd是否正确,它是否有效。@user3658367您似乎在
%let
语句后缺少分号。我将此作为dup结束,因为它显然是该问题的副本;不过,使用PWENCODE之类的建议还是不错的。我建议提出一个新问题,询问使用密码的最佳实践,并给出更全面的答案(如果用户3658367不想提问,Chris或任何人都可以自答)。在引用宏变量ie“&pswd”时,请使用双引号而不是单引号。我将以dup形式结束此操作,因为它明确地重复了这个问题;不过,使用PWENCODE之类的建议还是不错的。我建议提出一个新问题,询问使用密码的最佳实践,并给出更全面的答案(如果用户3658367不想提问,Chris或任何人都可以将其写为自答)。引用宏变量ie“&pswd”PWEncode时使用双引号而不是单引号是一个笑话。用pwencode的结果替换纯文本密码只会保护人们不知道密码,但不会阻止他们访问系统。编码的密码可以用来代替常规密码(就像密码一样),因此它给人一种安全的假象。它提供的唯一好处是,如果您在多个系统中使用相同的密码,他们将只能使用编码值通过SAS访问系统。See-PWEncode是一个笑话。用pwencode的结果替换纯文本密码只会保护人们不知道密码,但不会阻止他们访问系统。编码的密码可以用来代替常规密码(就像密码一样),因此它给人一种安全的假象。它提供的唯一好处是,如果您在多个系统中使用相同的密码,他们将只能使用编码值通过SAS访问系统。看-