我有以下严格编码的身份验证行:
1. libname xxx odbc user=userName password=passWord dsn=myDsn
schema=mySchema;
2. proc sql; connect to xxx(dsn=myDsn user=userName password=passWord
);
我希望将userName
和passWord
保留在外部.txt
文件中,并在代码中引用它们。因此我不会像现在这样对它们进行硬编码。我怎么能这样做?
编辑:我的主要目标是能够更轻松地更改/维护我的密码,而不是为了提高安全性。
答案 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;