2014-04-23 3 views
2

나는 다음과 같은 인증 라인 하드 코딩이 :SAS 옵션으로 외부 txt를 읽는 방법?

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

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

내가 외부 .txt 파일의 userNamepassWord을 유지하고 코드에서 참조 할. 그래서 지금 당장 그대로 코딩하지 않도록하십시오. 어떻게해야합니까?

편집 : 내 주요 목표는 보안을 향상시키지 않고 내 암호를보다 쉽게 ​​변경하고 유지할 수있게하는 것입니다.

+0

더 높은 보안을 위해이 일을하고 있습니까, 또는 좀 더 쉽게 변경할 수 있도록? – Joe

+0

그러나 둘 다 주된 이유는 더 쉽게 변경할 수 있다는 것입니다. – Buras

+0

PWENCODE와 같은 보안 옵션이있어 변경하기가 쉽지는 않지만 더 안전하게 만들 수 있기 때문에 묻습니다. 텍스트 파일로 이동해도 실제로는 더 안전하지는 않지만 쉽게 변경할 수 있습니다. – Joe

답변

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에 암호가 반환됩니다.

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

당신이, 당신이 %을 사용할 수 있습니다 (혹은 여러 사용자 간의 파일 공유)을 변경의 용이성 주로 염려되는 경우는 파일 및/또는 연결하여 MAUTOCALL 라이브러리에 저장된 매크로를 포함한다. IE

(텍스트 파일)

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

(SAS 코드)

원본 옵션을 사용하지 않고 매크로에서, 그리고 컴파일 된 것을 넣으면
proc sql; 
    connect to xxx(&con_str.); 

, 당신이 누구든의 값을 숨길 수 그것을 실행했다.

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"; 
+0

감사합니다. 첫 번째 방법이 나에게 더 쉽다고 생각합니다. 나는'libname passLib 'C : \ Users \ Owner \ Desktop \ Authentication'을 시도했다. 옵션 sasautos = (sasautos passLib); proc sql; odbc (& con_str.)에 연결하십시오 : ' '오류 : 잘못된 옵션 이름 &. '이 있습니다. – Buras

+0

흠.mjsqu와 같이 사용자/비밀번호를 별도로 저장해야 할 수도 있습니다. 또는, 매크로 변수 및/또는 매크로 변수 (예 :'connect to ...; '를 포함하는 모든 변수)에 전체 연결 텍스트를 포함하십시오. – Joe

+0

@Joe 솔루션이 훌륭하게 작동합니다.이 작업을 수행하려고합니다. 원격 서버하지만 내게 오류를 제공 .. 실제 파일이 존재하지 않습니다. 파일 이름 경로가 원격 서버의 위치로 변경되었습니다. 그러나 그것을 가져 가지 않습니다. 이것에 대한 조언? 나는 filename 문을 'code'filename clip "/home/user/clipboard.txt"로 작성하고 rsubmit을 실행했습니다. – user3658367

관련 문제