我們希望從我們的SAS代碼中的ODBC連接字符串中刪除硬編碼的密碼,並且還可以防止任何密碼出現在SAS日誌文件中。SAS中的ODBC密碼安全
似乎有很多的白皮書討論如何去做這件事,但我要麼找到他們的問題,要麼不能讓他們工作。
每次爲PW提示用戶不是一個可行的選擇。 此外,將密碼存儲在宏變量中是一種可接受的方法,只要您有辦法在打開MACROGEN和SYMBOLGEN選項的情況下將其禁止打印到日誌中。
未遂1 - 編碼(link to whitepaper here)
proc pwencode in='mypassword' method=sasenc;
run;
給出:
{sasenc}ACFD24061BF77D7D5362EE7C2D00D08B
如果我在我的代碼編碼值替換我的明文密碼,那麼ODBC直通語句運行正常。
proc sql noprint;
connect to odbc as remote (datasrc=cmg_report user=myuser password='{sasenc}68B279564BD2695538CDCDB301E8A357563480B0');
create table sqlo as
select *
from connection to remote
(
select top 1 * from application
)
;
disconnect from remote;
quit;
而且日誌正確地掩蓋了XXXXXXX的值。
961 proc sql noprint;
962 connect to odbc as remote (datasrc=cmg_report user=&user_cmg password=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX);
963 create table sqlo as
964 select *
965 from connection to remote
966 (
967 select top 1 * from application
968 )
969 ;
971 quit;
NOTE: Table WORK.SQLO created, with 1 rows and 29 columns.
NOTE: PROCEDURE SQL used (Total process time):
real time 0.34 seconds
cpu time 0.01 seconds
上述方法的問題是,如果有人訪問代碼,他們可以使用加密的密碼,而無需知道明文密碼登錄。所以雖然它隱藏了實際的密碼,但它不提供安全性。似乎對我來說很愚蠢,或者我錯過了什麼? 編輯:這提供了一些安全性,如果你的ODBC密碼恰好在其他地方使用,這是關於它。
未遂2 - 使用SYMGET(link to whitepaper here)
這樣做的問題是,我根本無法描述SAS工作的技術。我在XP上運行SAS 9.2,嘗試連接到SQL Server數據庫。
%let my_password = password;
proc sql noprint;
connect to odbc (dsn=cmg_report uid=myuser pwd=symget('my_password'));
create table sqlo as
select *
from connection to remote
(
select top 1 * from application
)
;
quit;
我得到下面的消息稱登錄失敗:
1034 proc sql noprint;
1035 connect to odbc (dsn=cmg_report uid=myuser pwd=XXXXXX('my_password'));
ERROR: CLI error trying to establish connection: [Microsoft][SQL Server Native Client 10.0][SQL
Server]Login failed for user 'myuser'.
它看起來就像是試圖用「symget」爲實際的密碼(因爲它已經在日誌中被屏蔽掉了)。對這個白皮書有一些迴應說要將symget包裝在%sysfunc調用中,但symget()函數是SAS在%sysfunc調用中不允許的少數幾個函數之一,所以我不認爲這是可能的。
任何其他提示/建議/想法將不勝感激。
感謝
編輯:這將是特別好,如果有辦法做到這一點曾與options symbolgen macrogen
開啓的技術。
嗨,感謝您的快速回復。是的,我希望實現一些不需要我們用ODBC代碼來包裝每條SQL語句的東西。我們有一個很大的代碼庫,我並不想更新....我沒有在我的原始需求中指定,但我開始認爲這可能是唯一的方法,所以我要去繼續並將您的回答標記爲答案。再次感謝... –
此外,您可能希望將MACROGEN添加到您的系統選項列表中以禁用,因爲它也會打印它。需要禁用的完整列表如下: 'option nomprint nomacrogen nosymbolgen; *必須禁用; 選項mlogic源碼source2筆記; *可能爲左;' –