如何将外部txt读入SAS选项?

时间:2014-04-23 13:22:21

标签: sas

我有以下严格编码的身份验证行:

 1. libname xxx odbc user=userName password=passWord dsn=myDsn
    schema=mySchema;

 2. proc sql;  connect to xxx(dsn=myDsn user=userName password=passWord
    );

我希望将userNamepassWord保留在外部.txt文件中,并在代码中引用它们。因此我不会像现在这样对它们进行硬编码。我怎么能这样做?

编辑:我的主要目标是能够更轻松地更改/维护我的密码,而不是为了提高安全性。

2 个答案:

答案 0 :(得分:2)

如果您主要关注易于更改(或者可能在多个用户之间共享文件),则可以使用%include文件和/或MAUTOCALL库中存储的宏进行连接。 IE

(文本文件)

%let con_str=dsn=myDsn user=userName password=passWord;

(SAS代码)

proc sql;  
  connect to xxx(&con_str.);

如果你把它放在宏中,并在没有SOURCE选项的情况下编译它,你可以隐藏运行它的任何人的值。

您还可以使用PROC PWENCODE对密码进行编码,然后在程序中使用编码密码。来自the documentation

filename pwfile "external-file";

proc pwencode in='mypass1' out=pwfile;
run;

然后

filename pwfile 'external-filename';
options symbolgen;

data _null_;
   infile pwfile obs=1 length=l; 
   input @;
   input @1 line $varying1024. l; 
   call symput('dbpass',substr(line,1,l)); 
run;
libname x odbc dsn=SQLServer user=testuser password="&dbpass";

答案 1 :(得分:1)

您可以使用数据步骤读入包含密码信息的文件,有关示例,请参阅以下内容。此代码假定密码文件的格式为username|password,即管道分隔且仅包含一行。

filename pw ""; /*<insert name of pw file here>*/

data _NULL_;
  infile pw dlm='|'; /* Change dlm if not pipe */
  input 
  uname : $50.
  pw : $50.;
  call symputx('uname',uname);
  call symputx('pw',pw);
run;

libname xxx odbc user=&uname. password=&pw. dsn=myDsn schema=mySchema;

proc sql;  
  connect to xxx(dsn=myDsn user=&uname. password=&pw.);

如果您正在使用元数据服务器,则可以使用身份验证域来保存密码信息。

在这种情况下,您将在元数据中更改密码,然后使用authdomain=选项在代码中引用它,这将在不显示密码的情况下将密码返回给SAS。

e.g。

libname xxx odbc authdomain=MY_ODBC_AUTHDOMAIN dsn=myDsn schema=mySchema;