切换 Teradata 帐户

Switch Teradata Accounts

如果 SAS 中一个用户的密码已过期,我希望能够在 2 个 Teradata 帐户之间切换。 例如连接到 teradata (user="&terauser" password="&terapwd" account="&teraacct" server="&tdserver" mode=teradata);

terauser:密码已过期 terauser1:密码有效

几个问题:

  1. 如何预先警告用户更改密码。我使用 DBC.Users table.
  2. 如何切换帐户,因为我只能在日志中知道状态。

Proc SQL 维护一些您可以检查的自动宏变量:

Proc SQL;
  connect to ....;

  %put NOTE: SQLXRC=%superq(SQLXRC);
  %put NOTE: SQLXMSG=%superq(SQLXMSG);

如果您想自动测试和使用工作帐户,您可以创建一个宏来执行尝试连接和切换帐户行为。如果将用户帐户信息放在源代码或纯文本文件中,请注意安全策略。

示例:

%macro myConnect ();
  %* To be used in the context of a Proc SQL statement;

  %* ... assign first account connection parameters to  macro variables;
  %let terauser=...;
  ...
  %let tdserver = ...;

  connect to teradata (user="&terauser" password="&terapwd" account="&teraacct" server="&tdserver" mode=teradata);

  %if &SQLXRC eq 0 %then %return;

  %* ... assign second account connection parameters to  macro variables;
  %let terauser=...;
  ...
  %let tdserver = ...;

  connect to teradata (user="&terauser" password="&terapwd" account="&teraacct" server="&tdserver" mode=teradata);

  %if &SQLXRC eq 0 %then %return;

  %put ERROR: Could not connect with current connection parameters;
  %abort cancel;
%mend;

Proc SQL 也可以使用现有的远程库引用进行连接:

* create remote library references;
libname account1 Teradata ... connection parameters ...;
libname account2 Teradata ... connection parameters ...;

Proc SQL;
  connect using account1;  * connect using the account1

如果连接成功,您可以通过查询 DBC.USERSV 询问 Teradata 上次更改密码的时间。然后,如果您知道过期规则是什么,您可以在 SAS 日志中向用户发送一条消息。因此,如果您的密码在 120 天后过期,您的查询和报告可能如下所示:

select catx(' ','%put'
   , case when (days_left < 2) then 'ERROR:'
          when (days_left < 10) then 'WARNING:'
          else 'NOTE:'
     end
   ,'Your Teradata password expires in',days_left,'days.')
 into :tdpassword_message trimmed
from connection to teradata
 (select ((PasswordChgDate+ 120) - date) days_left from dbc.usersV )
;
*----------------------------------------------------------------------------;
* Write message to SAS log ;
*----------------------------------------------------------------------------;
&tdpassword_message;