Мы хотим удалить жестко запрограммированные пароли из строк подключения ODBC в нашем коде SAS, а также предотвратить появление любых паролей в файлах журналов SAS.
Похоже, в большом количестве статей обсуждается, как это сделать.об этом, но я либо нахожу проблемы с ними, либо не могу заставить их работать.
Приглашение пользователя каждый раз для PW не является жизнеспособной альтернативой.Кроме того, хранение пароля в макропеременной является приемлемым подходом, если у вас есть способ запретить его печать в журнал с включенными параметрами MACROGEN и SYMBOLGEN.
ATTEMPT 1 - ENCODING ( ссылка на технический документ здесь )
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;
И журнал правильно маскирует значения с помощью XXXXXXXs.
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 ( ссылка натехнический документ здесь )
Проблема в том, что я просто не могу заставить описанную технику работать в SAS.Я запускаю SAS 9.2 на XP, пытаюсь подключиться к БД 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» в качестве фактического пароля (так как он был замаскирован в журнале).Есть несколько ответов на этот технический документ, в которых говорится об обертывании символа в вызове% sysfunc, но функция symget () - одна из немногих функций, которые SAS не разрешает в вызове% sysfunc, поэтому я не понимаю, как это возможно.
Любые другие советы / предложения / идеи будут высоко ценится.
Спасибо
РЕДАКТИРОВАТЬ: Было бы особенно хорошо, если бы была техникачтобы это работало при включенном options symbolgen macrogen
.