<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in S in Administration and Deployment</title>
    <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/979621#M30482</link>
    <description>&lt;P&gt;Right clicking on the libraries (compare):&lt;/P&gt;&lt;P&gt;Using USER:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RGarrido_0-1764171285182.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/111597iB551417E9E5352BD/image-size/medium?v=v2&amp;amp;px=400" role="button" title="RGarrido_0-1764171285182.png" alt="RGarrido_0-1764171285182.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;Using AUTHDOMAIN:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RGarrido_1-1764171333739.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/111598i74F70DF62B9DE0F0/image-size/medium?v=v2&amp;amp;px=400" role="button" title="RGarrido_1-1764171333739.png" alt="RGarrido_1-1764171333739.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 26 Nov 2025 15:36:34 GMT</pubDate>
    <dc:creator>RGarrido</dc:creator>
    <dc:date>2025-11-26T15:36:34Z</dc:date>
    <item>
      <title>SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in SAS 9</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/973451#M30250</link>
      <description>&lt;P&gt;&lt;FONT size="5"&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;Dating back to the start of 2025, Snowflake has been &lt;A href="https://docs.snowflake.com/en/user-guide/security-mfa-rollout" target="_blank" rel="noopener"&gt;discussing major upcoming changes&lt;/A&gt; to their authentication systems. Having joined the Multi-Factor Authentication (MFA) train, they can now claim stronger defenses for their constituents against potential breaches. MFA accomplishes this by requiring a second degree of proof of identity upon login. For users of the web UI Snowsight, this is easy – put in your user ID, await the push notification on your phone from Duo (the default provider), and confirm there that the login is authentic.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;Unsurprisingly, the default push notification method for MFA has its detractions, and no shortage of dissenters. Though it is factually more secure than the incumbent method of user/password (plus the network policy of CIDR-block allow/block lists), some users prefer not to engage with a cell phone in order to do their jobs; others using third party software, like SAS, don't enjoy the repetitive pinging when accessing Snowflake endpoints; and others still find it completely incompatible with scheduled jobs. After all, nobody wants to wake up &lt;A href="https://www.youtube.com/watch?v=C-Naa1HXeDQ" target="_blank" rel="noopener"&gt;at 3AM&lt;/A&gt; just to approve their service user’s daily workload… right?&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="JCabralSAS_0-1756320230816.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/109326i22635B26AAE712C3/image-size/medium?v=v2&amp;amp;px=400" role="button" title="JCabralSAS_0-1756320230816.png" alt="JCabralSAS_0-1756320230816.png" /&gt;&lt;/span&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;SAS 9 is no exception to these blockers – many SAS 9 &amp;amp; EG users alike are looking to SAS for guidance on how to navigate the upcoming MFA mandates without interrupting their pipelines before the mandates go into effect. This post will address exactly that using key-pair authentication, one of three main methodologies recommended by Snowflake. Before we get started, let’s iron out which personas you need to future-proof your SAS &amp;amp; Snowflake pipelines:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;An admin user for the Snowflake account – preferably someone with access to the &lt;FONT color="#333399"&gt;&lt;STRONG&gt;ACCOUNTADMIN&lt;/STRONG&gt; &lt;/FONT&gt;role.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;An admin user for the SAS 9 license.&lt;/FONT&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;For server-side SAS 9 environments, the admin must have access to central machine on which SAS 9 is running.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;For client-side SAS 9 environments, users will individually configure their machines – but some team administrator will still be required to generate key pairs.&lt;/FONT&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;Now, let’s dig in step by step on how to implement the key-pair methodology. Please note that this is supported for Maintenance versions &lt;STRONG&gt;9.4M6&lt;/STRONG&gt; and later.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="5"&gt;&lt;STRONG&gt;Section 1: Ensuring Permitted SAS/Snowflake Traffic&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;The first thing a Snowflake admin needs to do is configure (or confirm) networking rules for the Snowflake account that will accept incoming requests from SAS 9. For server-side SAS 9 environments, the only IP Address needed is the server. For client-side SAS 9 environments, however, the IP Addresses of all users’ machines are necessary – this can be quite a hassle, which is where the common corporate VPN comes in handy. In this case, all that’s necessary is the CIDR block occupied by the corporate VPN. As long as SAS users are connected to the VPN, Snowflake won’t block their client requests. Once the full list of allowed IP’s or CIDR blocks is prepared, a Snowflake admin can alter the account’s network policy as follows:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="JCabralSAS_1-1756320442311.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/109327iCF0F82ABA5C83945/image-size/large?v=v2&amp;amp;px=999" role="button" title="JCabralSAS_1-1756320442311.png" alt="JCabralSAS_1-1756320442311.png" /&gt;&lt;/span&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;In this code block, we assume the proper role and obtain the name of the active&lt;FONT color="#333399"&gt; &lt;STRONG&gt;NETWORK POLICY&lt;/STRONG&gt;&lt;/FONT&gt;. We then create a &lt;FONT color="#333399"&gt;&lt;STRONG&gt;NETWORK RULE&lt;/STRONG&gt;&lt;/FONT&gt; (this can always be altered later if the allowlist must change) that can the Snowflake environment to accept traffic requests from users leveraging the SAS 9 environment. Lastly, we add the rule to the policy, enacting this conditional access to the environment.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="5"&gt;&lt;STRONG&gt;Section 2. Setting up Key-Pair Authentication in the Snowflake Account&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;Before demonstrating the process for giving an individual user the possibility to authenticate using a key-pair, a note: if your SAS environment contains a large user base (i.e. hundreds of users), the manual provisioning of key-pair authentication can be tedious, even grueling. It is strongly recommended to investigate the usage of scripting and &lt;A href="https://docs.snowflake.com/en/developer-guide/udf/udf-overview" target="_blank" rel="noopener"&gt;user-defined functions&lt;/A&gt; to automatically generate the key-pairs and assign them to Snowflake users, respectively. With that noted, let’s discuss how to implement each user’s key-pair authentication. For optimal practices, the execution of Snowflake statements in this section should be conducted by an administrator leveraging the &lt;FONT color="#333399"&gt;&lt;STRONG&gt;SECURITYADMIN&lt;/STRONG&gt;&lt;/FONT&gt; role (or higher).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;To generate the key-pair, follow along with Snowflake’s official &lt;A href="https://docs.snowflake.com/en/user-guide/key-pair-auth" target="_blank" rel="noopener"&gt;documentation&lt;/A&gt;. It is recommended to use an &lt;EM&gt;encrypted key&lt;/EM&gt;. Do not deviate from Snowflake’s key-generation procedure, as differently formatted keys will fail.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;Keep track of the location of both the private key file (.p8) and the private key file’s password. It may be useful to create a user directory structure to track which files and password are associated with each user. It may also be useful for users to store their passwords in a key vault (on top of ideally remembering it).&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;Use the &lt;A href="https://docs.snowflake.com/en/sql-reference/sql/alter-user" target="_blank" rel="noopener"&gt;&lt;FONT color="#333399"&gt;&lt;STRONG&gt;ALTER USER&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt; statement to add the &lt;STRONG&gt;&lt;FONT color="#333399"&gt;RSA_PUBLIC_KEY&lt;/FONT&gt;&lt;/STRONG&gt; parameter. If the user does not yet exist in the Snowflake environment, you can create them as follows:&lt;BR /&gt;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="4"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="JCabralSAS_2-1756320885498.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/109329i72D93F8443151E84/image-size/large?v=v2&amp;amp;px=999" role="button" title="JCabralSAS_2-1756320885498.png" alt="JCabralSAS_2-1756320885498.png" /&gt;&lt;/span&gt;&lt;/FONT&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;In current (as of this article, dated August 2025) Snowflake bundles, MFA has not yet been made 100% mandatory. As such, there are still opt-in’s and opt-out’s. To ensure that the key-pair methodology is working, enable MFA for the user. For now, whenever the user authenticates &lt;EM&gt;without&lt;/EM&gt; the key, they will have to address push notifications to satisfy MFA:&lt;BR /&gt;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="4"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="JCabralSAS_3-1756320885498.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/109328i87ED137F42B040C2/image-size/large?v=v2&amp;amp;px=999" role="button" title="JCabralSAS_3-1756320885498.png" alt="JCabralSAS_3-1756320885498.png" /&gt;&lt;/span&gt;&lt;/FONT&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;FONT size="4"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;With the Snowflake-side management handled – if using client-side SAS 9 on Windows, go to the &lt;STRONG&gt;SAS 9 Client-Side Windows ODBC Set-Up &lt;/STRONG&gt;section. If using a server-side SAS 9 environment (regardless of the client OS), go to the &lt;STRONG&gt;SAS 9 Server ODBC Set-Up Section&lt;/STRONG&gt;. For client-side Mac and Linux SAS 9 environments, the procedure will align very closely with the Server ODBC Set-Up, the main difference being the file references are on the client machine, not a centralized server.&lt;/FONT&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="5"&gt;&lt;STRONG&gt;Section 3a: SAS 9 Client-Side Windows ODBC Set-Up&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;For many SAS 9 users, there is no central server to which all users connect. Sometimes, users, especially in&lt;EM&gt; test &amp;amp; dev&lt;/EM&gt; environments, design their workloads and run their compute from their home machine. This section addresses how those users can individually configure their Snowflake connections to satisfy the MFA mandate:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;If not already done, follow the Snowflake documentation to &lt;A href="https://docs.snowflake.com/en/developer-guide/odbc/odbc-windows" target="_blank" rel="noopener"&gt;install the ODBC driver&lt;/A&gt; on the machine. Make sure not to skip the section on the “Visual C++ Redistributable for Visual Studio 2015.”&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;With the driver installed, open the “ODBC Data Sources (64-bit)” program on the machine.&lt;BR /&gt;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="4"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="JCabralSAS_4-1756321380211.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/109331iD0BE871E70DA7CCD/image-size/large?v=v2&amp;amp;px=999" role="button" title="JCabralSAS_4-1756321380211.png" alt="JCabralSAS_4-1756321380211.png" /&gt;&lt;/span&gt;&lt;/FONT&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;Click “Add” to create a new Data Source Name (User DSN and System DSN both work here – but note which one!), select the “SnowflakeDSIIDriver” option, click “Finish,” and populate it. Note that the database, schema, warehouse, and role can all be overwritten by a &lt;FONT color="#333399"&gt;&lt;STRONG&gt;LIBNAME &lt;/STRONG&gt;&lt;/FONT&gt;statement, so long as the Snowflake user has access to the requested resources. Also note the inclusion of the &lt;EM&gt;snowflake_jwt&lt;/EM&gt; value in the &lt;FONT color="#333399"&gt;&lt;STRONG&gt;Authenticator&lt;/STRONG&gt;&lt;/FONT&gt; field. The authenticator tells the system not to use a username &amp;amp; password combination to login to Snowflake, instead using the private key file &amp;amp; password:&lt;BR /&gt;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="4"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="JCabralSAS_5-1756321380213.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/109330i5A2B2F514FBA9355/image-size/large?v=v2&amp;amp;px=999" role="button" title="JCabralSAS_5-1756321380213.png" alt="JCabralSAS_5-1756321380213.png" /&gt;&lt;/span&gt;&lt;/FONT&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;Clicking the “Test” button at this point will fail, because while the ODBC system knows not to leverage a user &amp;amp; password to authenticate, it does NOT yet know where the key file &amp;amp; password that it must use are. In order to instruct the system to leverage this information, they must be defined with respect to the DSN. &lt;STRONG&gt;With the newest versions of the ODBC program &amp;amp; Snowflake Driver, this can actually be done in the above GUI&lt;/STRONG&gt; by entering the private key file location and password in their respective cells. In this case, enter both the file path and the password &lt;STRONG&gt;without&lt;/STRONG&gt; quotes, then skip to step 9. In older versions, like the one in the above screenshot, we must instead use the "Registry Editor". Click “OK” and open the Registry Editor (&lt;EM&gt;regedit&lt;/EM&gt;) program on the machine:&lt;BR /&gt;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="4"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="JCabralSAS_6-1756321380214.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/109332i8213D129E922356C/image-size/large?v=v2&amp;amp;px=999" role="button" title="JCabralSAS_6-1756321380214.png" alt="JCabralSAS_6-1756321380214.png" /&gt;&lt;/span&gt;&lt;/FONT&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;Registry Editor is useful for entering options for ODBC DSN’s that aren’t visually present in the Windows GUI. The two options necessary for this implementation are &lt;FONT color="#333399"&gt;&lt;STRONG&gt;PRIV_KEY_FILE&lt;/STRONG&gt;&lt;/FONT&gt; and &lt;FONT color="#333399"&gt;&lt;STRONG&gt;PRIV_KEY_FILE_PWD&lt;/STRONG&gt;&lt;/FONT&gt;, neither of which are present in the GUI from Step 3.&lt;/FONT&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;If Step 3 created a USER DSN: follow the path &lt;EM&gt;“Computer\HKEY_CURRENT_USER\Software\ODBC\ODBC.ini.”&lt;/EM&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;If Step 3 created a SYSTEM DSN: follow the path &lt;EM&gt;“Computer\HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.ini.”&lt;/EM&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;Locate the entry under &lt;EM&gt;ODBC.ini&lt;/EM&gt; corresponding to the newly created DSN:&lt;/FONT&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;FONT size="4"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="JCabralSAS_7-1756321380215.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/109333iFF12AF18506E60CF/image-size/large?v=v2&amp;amp;px=999" role="button" title="JCabralSAS_7-1756321380215.png" alt="JCabralSAS_7-1756321380215.png" /&gt;&lt;/span&gt;&lt;/FONT&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;Right click anywhere in the right-side of the screen (which contains all the keys &amp;amp; values associated with the DSN) and select “New -&amp;gt; String Value.” Enter the name &lt;FONT color="#333399"&gt;&lt;STRONG&gt;PRIV_KEY_FILE&lt;/STRONG&gt;&lt;/FONT&gt;. Repeat this with a value of &lt;FONT color="#333399"&gt;&lt;STRONG&gt;PRIV_KEY_FILE_PWD&lt;/STRONG&gt;&lt;/FONT&gt;.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;At this point, there are two unpopulated options defined for the DSN. To define each one, simply double-click it and paste in the value.&lt;/FONT&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;For the &lt;STRONG&gt;&lt;FONT color="#333399"&gt;PRIV_KEY_FILE&lt;/FONT&gt; &lt;/STRONG&gt;option, copy the file path of the private key (.p8) file located on the machine. Do NOT surround the file path with quotes.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;For the &lt;FONT color="#333399"&gt;&lt;STRONG&gt;PRIV_KEY_FILE_PWD &lt;/STRONG&gt;&lt;/FONT&gt;option, copy the password defined for the encryption when the key was generated.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;Close the window.&lt;/FONT&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;With the options added to the DSN and defined, the DSN can be tested. Reopen the GUI in Step 3 by double-clicking its corresponding entry in the ODBC menu, then select “Test.” If successful, there will be a confirmation dialog, and there will be no push notifications sent to the MFA-enrolled user. Additional confirmation of success can be done by editing the ODBC DSN definition, removing the &lt;EM&gt;snowflake_jwt&lt;/EM&gt; value from the &lt;FONT color="#333399"&gt;&lt;STRONG&gt;authenticator&lt;/STRONG&gt;&lt;/FONT&gt; option, and re-running the “Test” button. In this case, the user should immediately be sent a push notification asking for identity verification, confirming the authenticator is doing its job. Re-enter the &lt;EM&gt;snowflake_jwt &lt;/EM&gt;value and close the ODBC Data Sources window.&lt;/FONT&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="5"&gt;&lt;STRONG&gt;Section 3b: SAS 9 Server ODBC Set-Up&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;Unlike single-user environments, many deployments of SAS 9 are centralized on a Linux server. For the individual user, the access to SAS may still be via the SAS 9 client program, or Enterprise Guide, but the compute and external connections for all users are centralized on some remote machine. This section addresses how a SAS administrator can configure multiple users’ key-pair connections from the SAS Server to Snowflake.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;If not already installed on the Linux machine, follow the Snowflake documentation to &lt;A href="https://docs.snowflake.com/en/developer-guide/odbc/odbc-linux" target="_blank" rel="noopener"&gt;install the ODBC Driver&lt;/A&gt;.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;Locate the following server-side files: &lt;EM&gt;ODBC.ini, ODBCINST.ini, &lt;/EM&gt;and &lt;EM&gt;simba.snowflake.ini&lt;/EM&gt; as listed in the Snowflake documentation.&lt;/FONT&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;If the Snowflake driver has not been configured at all, continue following the directions to configure the &lt;EM&gt;simba.snowflake.ini&lt;/EM&gt; and &lt;EM&gt;ODBCINST.ini&lt;/EM&gt; files.&lt;/FONT&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;In the &lt;EM&gt;ODBC.ini&lt;/EM&gt; file, create a line for the DSN connection to the Snowflake account:&lt;BR /&gt;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="4"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="JCabralSAS_12-1756321887170.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/109338i07EB87E74CB6E847/image-size/large?v=v2&amp;amp;px=999" role="button" title="JCabralSAS_12-1756321887170.png" alt="JCabralSAS_12-1756321887170.png" /&gt;&lt;/span&gt;&lt;/FONT&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;Then, add an entry for the DSN’s options, and add the following information:&lt;BR /&gt;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="4"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="JCabralSAS_13-1756321887176.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/109339iD622B3F26D05FEDF/image-size/large?v=v2&amp;amp;px=999" role="button" title="JCabralSAS_13-1756321887176.png" alt="JCabralSAS_13-1756321887176.png" /&gt;&lt;/span&gt;&lt;/FONT&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;FONT size="4"&gt;Do NOT include the &lt;FONT color="#333399"&gt;&lt;STRONG&gt;PRIV_KEY_FILE&lt;/STRONG&gt; &lt;/FONT&gt;or &lt;FONT color="#333399"&gt;&lt;STRONG&gt;PRIV_KEY_FILE_PWD &lt;/STRONG&gt;&lt;/FONT&gt;in the DSN definition UNLESS the environment intentionally uses the SAME key-pair for ALL Snowflake users. Sharing key-pairs across multiple users is heavily discouraged. As such, in most, if not all, production environments, every user will have a unique key-pair, which will be referenced in the &lt;FONT color="#333399"&gt;&lt;STRONG&gt;LIBNAME &lt;/STRONG&gt;&lt;/FONT&gt;statements that leverage this DSN.&lt;/FONT&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;For SAS 9 environments with a significant number of users, the process of creating unique key-pairs for every user and implementing them in a POSIX-controlled structure on the SAS 9 server can be tedious. A shell script to loop through the user base and manage the permissions on the private key files can relieve much of this difficulty.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="5"&gt;&lt;STRONG&gt;Section 4: Connecting from SAS to the Snowflake Account&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;Now that the Snowflake account has been successfully configured, the final step is to test the connection from SAS itself. Just as with any other SAS library, the connection to Snowflake is created with a &lt;FONT color="#333399"&gt;&lt;STRONG&gt;LIBNAME &lt;/STRONG&gt;&lt;/FONT&gt;statement.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;For client-side SAS 9 installations, the &lt;FONT color="#333399"&gt;&lt;STRONG&gt;LIBNAME &lt;/STRONG&gt;&lt;/FONT&gt;statement can directly reference the DSN, only overwriting the connection parameters that may change from a day-to-day basis at the user’s discretion, like database, schema, or role:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="JCabralSAS_14-1756322832798.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/109340i613DBC637A88F9E9/image-size/large?v=v2&amp;amp;px=999" role="button" title="JCabralSAS_14-1756322832798.png" alt="JCabralSAS_14-1756322832798.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;Based on the options entered when the DSN was configured on the local machine, any unlisted connection options will be automatically populated from the DSN itself. Thus, there’s no need to reference the options like &lt;FONT color="#333399"&gt;&lt;STRONG&gt;PRIV_KEY_FILE&lt;/STRONG&gt;&lt;/FONT&gt;, &lt;FONT color="#333399"&gt;&lt;STRONG&gt;PRIV_KEY_FILE_PWD&lt;/STRONG&gt;&lt;/FONT&gt;, or &lt;FONT color="#333399"&gt;&lt;STRONG&gt;authenticator &lt;/STRONG&gt;&lt;/FONT&gt;in the &lt;FONT color="#333399"&gt;&lt;STRONG&gt;LIBNAME &lt;/STRONG&gt;&lt;/FONT&gt;statement. Users are, as always, free to add &lt;A href="https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/acreldb/p1se2m9js4ptfpn1252otv84u9ma.htm#n01yy7czgoh4fhn1k5hrwpqyj7e7" target="_blank" rel="noopener"&gt;other &lt;STRONG&gt;LIBNAME &lt;/STRONG&gt;options&lt;/A&gt; to their statements.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;For a server-side SAS 9 installation, the &lt;FONT color="#333399"&gt;&lt;STRONG&gt;LIBNAME &lt;/STRONG&gt;&lt;/FONT&gt;statement requires a little more individual configuration and change from its pre-MFA code. With a server-side installation, the &lt;FONT color="#333399"&gt;&lt;STRONG&gt;LIBNAME &lt;/STRONG&gt;&lt;/FONT&gt;statement references the DSN defined by the administrator in the &lt;EM&gt;ODBC.ini&lt;/EM&gt; file on the Linux server. In the standard setup wherein multiple users connect to the same SAS 9 server, said users will have different private key files &amp;amp; passwords, as discussed in &lt;STRONG&gt;Section 3b&lt;/STRONG&gt;. As such, the DSN itself could not define a single blanket value for &lt;FONT color="#333399"&gt;&lt;STRONG&gt;PRIV_KEY_FILE&lt;/STRONG&gt; &lt;/FONT&gt;or &lt;FONT color="#333399"&gt;&lt;STRONG&gt;PRIV_KEY_FILE_PWD &lt;/STRONG&gt;&lt;/FONT&gt;to propagate to all users. Instead, each user must define those two connection options in their &lt;FONT color="#333399"&gt;&lt;STRONG&gt;LIBNAME&lt;/STRONG&gt; &lt;/FONT&gt;statement, pointing to their respective key and password:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="JCabralSAS_16-1756322956125.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/109342i61CA57A2C5F56BB6/image-size/large?v=v2&amp;amp;px=999" role="button" title="JCabralSAS_16-1756322956125.png" alt="JCabralSAS_16-1756322956125.png" /&gt;&lt;/span&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;This methodology allows multiple users to leverage the same Snowflake DSN (in turn, leveraging the Snowflake Driver configured on the machine) but with unique key-pairs, thus satisfying both MFA requirements and organizational security mandates.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="5"&gt;&lt;STRONG&gt;Parting Words&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;I hope this article provides &lt;A href="https://www.youtube.com/watch?v=lpGDTnx8R1k" target="_blank" rel="noopener"&gt;clarity&lt;/A&gt; for users and administrators alike in joint deployments of SAS 9 &amp;amp; Snowflake. The key-pair authentication methodology provides a safe and secure pathway to satisfying Snowflake’s MFA requirements without potentially sacrificing workload efficiency by using push notifications. This can play a large role in reducing blockers, especially for teams with significant scheduled or service workloads.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4"&gt;In future updates I will explore the step-by-step differences in setup for this methodology for users of SAS Viya, in addition to discussing the wider breadth of supported authentication options that Viya brings. Feel free to send any questions or comments to me at &lt;A href="mailto:Joe.Cabral@sas.com" target="_blank" rel="noopener"&gt;Joe.Cabral@sas.com&lt;/A&gt;. As always, thanks for reading, and for playing my new favorite writer’s game: “is this hyperlink for documentation or a 90’s music video?”&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 27 Aug 2025 20:12:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/973451#M30250</guid>
      <dc:creator>JCabralSAS</dc:creator>
      <dc:date>2025-08-27T20:12:27Z</dc:date>
    </item>
    <item>
      <title>Re: SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in S</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978261#M30392</link>
      <description>&lt;P&gt;Hi Joe,&lt;/P&gt;&lt;P&gt;Thanks for a very thorough set of instructions to set up the snowflake connector using ODBC and also the SNOW engines.&amp;nbsp; The challenge I am facing now is to try to hide the RSA password from my users (I am a SAS Admin).&amp;nbsp; If I use the SNOW engine and register the tables, the user can still right-click to the library in SAS Enteprise Guide and look at properties and see the libname statement for that library with the RSA key location and the password if encrypted.&amp;nbsp; If I use ODBC, the ODBC ini file becomes accessible to the user and will result in the same ending.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Is there a way of hiding the password for the RSA key and for either engines (ODBC and SNOW) to work?&lt;/P&gt;&lt;P&gt;Many thanks.&lt;/P&gt;</description>
      <pubDate>Mon, 03 Nov 2025 23:13:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978261#M30392</guid>
      <dc:creator>RGarrido</dc:creator>
      <dc:date>2025-11-03T23:13:22Z</dc:date>
    </item>
    <item>
      <title>Re: SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in S</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978264#M30393</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/22138"&gt;@RGarrido&lt;/a&gt;&amp;nbsp; - The way we hide our Snowflake account and password details using SAS/ACCESS Interface to Snowflake is by creating an Authentication Domain via SAS Management Console. We then create a Snowflake user group via User Manager then add the Snowflake account and password in the Accounts tab like so:&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SASKiwi_0-1762217658995.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/111106iCFE4EAADF6CDC79E/image-size/medium?v=v2&amp;amp;px=400" role="button" title="SASKiwi_0-1762217658995.png" alt="SASKiwi_0-1762217658995.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;Then in the Snowflake Server connection definition in SMC, the Snowflake Authentication domain is used:&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SASKiwi_1-1762218117759.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/111107i964845F8AC5F5179/image-size/medium?v=v2&amp;amp;px=400" role="button" title="SASKiwi_1-1762218117759.png" alt="SASKiwi_1-1762218117759.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;You can then create Data Library definitions in SMC that use the Snowflake server and connection definitions.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 04 Nov 2025 01:05:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978264#M30393</guid>
      <dc:creator>SASKiwi</dc:creator>
      <dc:date>2025-11-04T01:05:15Z</dc:date>
    </item>
    <item>
      <title>Re: SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in S</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978309#M30394</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13976"&gt;@SASKiwi&lt;/a&gt;&amp;nbsp;- thank you for your response.&amp;nbsp; We use authdomain to hide username and password when creating SAS to Snowflake connection but with an RSA key, it won't work because to connect to snowflake using an RSA key uses the conopts command like so:&amp;nbsp;&amp;nbsp;&lt;BR /&gt;LIBNAME TEST SNOW&lt;BR /&gt;SERVER="snowflakecomputing.com"&lt;BR /&gt;DATABASE='TESTONE'&lt;BR /&gt;WAREHOUSE='DEMO_ONE'&lt;BR /&gt;SCHEMA='TITLE'&lt;BR /&gt;ROLE='USER_ROLE'&lt;BR /&gt;USER='SASUSER_01'&lt;BR /&gt;CONOPTS="AUTHENTICATOR=SNOWFLAKE_JWT;&lt;BR /&gt;PRIV_KEY_FILE=/LOCATION/OF/KEY/rsa_key.p8;&lt;BR /&gt;PRIV_KEY_FILE_PWD=XXXXXXXXXXX;";&lt;/P&gt;&lt;P&gt;Adding an authdomain to hide the username and priv_key_file like so:&lt;BR /&gt;LIBNAME TEST SNOW&lt;BR /&gt;SERVER="snowflakecomputing.com"&lt;BR /&gt;DATABASE='TESTONE'&lt;BR /&gt;WAREHOUSE='DEMO_ONE'&lt;BR /&gt;SCHEMA='TITLE'&lt;BR /&gt;ROLE='USER_ROLE'&lt;BR /&gt;CONOPTS="AUTHENTICATOR=SNOWFLAKE_JWT;&lt;BR /&gt;PRIV_KEY_FILE=/LOCATION/OF/KEY/rsa_key.p8;"&lt;BR /&gt;AUTHDOMAIN=USER_AUTHDOMAIN;&lt;BR /&gt;The password inside the AUTHDOMAIN does not get passed to the authenticator (snowflake_jwt).&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 04 Nov 2025 14:08:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978309#M30394</guid>
      <dc:creator>RGarrido</dc:creator>
      <dc:date>2025-11-04T14:08:19Z</dc:date>
    </item>
    <item>
      <title>Re: SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in S</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978318#M30398</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/22138"&gt;@RGarrido&lt;/a&gt;&amp;nbsp;- if I'm understanding your situation properly, there are a few options that might work here. I have yet to test these myself to confirm, but my initial ideas are as follows:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Use&amp;nbsp;&lt;EM&gt;PROC PWENCODE&lt;/EM&gt; to hide the values of&amp;nbsp;&lt;EM&gt;PRIV_KEY_FILE_PWD&lt;/EM&gt;. I do have a concern about whether the encoded password would propagate within the&amp;nbsp;&lt;EM&gt;CONOPTS, &lt;/EM&gt;although my read of documentation suggests it should.&lt;/LI&gt;
&lt;LI&gt;Use macro variables to store the value of the&amp;nbsp;&lt;EM&gt;PRIV_KEY_FILE_PWD&lt;/EM&gt; (and have that executed in the autoexec file). This can be combined with the&amp;nbsp;&lt;EM&gt;PROC PWENCODE&amp;nbsp;&lt;/EM&gt;to further obfuscate the value.&amp;nbsp;However, if the&amp;nbsp;&lt;EM&gt;CONOPTS&lt;/EM&gt; do not accept macro or encoded variables, you might have to consider using POSIX controls:&lt;/LI&gt;
&lt;LI&gt;If each user has their own&amp;nbsp;&lt;EM&gt;PRIV_KEY_FILE&lt;/EM&gt;, then you can (if permissible by your organization) use unencrypted key files stored in private directories that are limited in permissions to only the user to whom the key belongs. This can also be done with encrypted key files, but the&amp;nbsp;&lt;EM&gt;PRIV_KEY_FILE_PWD&lt;/EM&gt; would still be visible without the obfuscation of (1) or (2) as listed above.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;Let me know if you have any success with these options and if they meet your system's requirements. If not, feel free to schedule a call with me and I will update this thread with any conclusions we reach.&lt;/P&gt;</description>
      <pubDate>Tue, 04 Nov 2025 15:42:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978318#M30398</guid>
      <dc:creator>JCabralSAS</dc:creator>
      <dc:date>2025-11-04T15:42:37Z</dc:date>
    </item>
    <item>
      <title>Re: SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in S</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978322#M30400</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/443802"&gt;@JCabralSAS&lt;/a&gt;&amp;nbsp;- For the first two you have suggested, the pwencode will not work because the encoded password is framed inside the conopts command (java based).&amp;nbsp; Neither will a macro variable when called inside the conopts command.&amp;nbsp; &amp;nbsp;So:&lt;BR /&gt;PRIV_KEY_FILE_PWD={SAS002}706634535C9F3B793CCCB39C4F553FA2;&amp;nbsp; &amp;lt;- will not be read by conopts nor&lt;BR /&gt;PRIV_KEY_FILE_PWD=&amp;amp;password.;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;I tried using ODBC engine and while it works, you need to chmod the permissions for the odbc.ini path for users to read the file which means that they can get to the password using a terminal and running a command such as: cat /etc/odbc.ini&amp;nbsp; and examine the odbc.ini file where the password is stored.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For the third option you suggested users having their own private key files, this will be difficult to control from a security stand point. Normally,&amp;nbsp; a username and password (snowflake account) is embedded in an authdomain and we assign AD groups to these authdomains. Similarly, if an RSA key is used, the key will be shared across an AD group else if each user has their own unique private key, these need to be mapped to the snowflake service account thru a jenkins pipeline job.&amp;nbsp; In the end, this means that one snowflake service account gets mapped to multiple service keys instead of just one.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 04 Nov 2025 16:14:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978322#M30400</guid>
      <dc:creator>RGarrido</dc:creator>
      <dc:date>2025-11-04T16:14:45Z</dc:date>
    </item>
    <item>
      <title>Re: SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in S</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978339#M30403</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/22138"&gt;@RGarrido&lt;/a&gt;&amp;nbsp;- Completely understand that using a CONOPTS mechanism isn't going to work with AUTHDOMAIN. Needs to be via a SAS-supported option.&lt;/P&gt;</description>
      <pubDate>Tue, 04 Nov 2025 19:19:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978339#M30403</guid>
      <dc:creator>SASKiwi</dc:creator>
      <dc:date>2025-11-04T19:19:17Z</dc:date>
    </item>
    <item>
      <title>Re: SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in S</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978416#M30407</link>
      <description>&lt;P&gt;Thank you, &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/443802"&gt;@JCabralSAS&lt;/a&gt;&amp;nbsp;, for your post.it was very useful.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;We are planning to switch from password-based authentication to key-pair authentication for SAS to Snowflake. Our current requirement is:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;1. Overnight batch/service account: key-pair authentication&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;2.User authentication: normal password authentication with DUO MFA&lt;/P&gt;
&lt;P&gt;We are using SAS 9.4M7 on a RHEL server.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have created two DSNs in the odbc.ini file:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; 1.Password-based DSN: without the authenticator parameter&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; 2.Key-pair DSN: with authenticator=snowflake_jwt and the PRIVATE_KEY_FILE and PRIVATE_KEY_FILE_PWD parameters&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Using the key-pair DSN, I can successfully run the LIBNAME statement from SAS Enterprise Guide and connect to Snowflake. Also I can able to define a SAS pre-assigned library for key-pair authentication and I can successfully able to use that.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Challenge&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Regarding the Private_key_file path and passphrase password on odbc.ini file&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Questions:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;1. I will not able to pass PRIV_KEY_FILE and PRIV_KEY_FILE_PWD directly in the odbc.ini file due to security concern. I noticed your Windows example included these parameters—can this approach be applied to Linux ODBC drivers?&lt;/P&gt;
&lt;P&gt;2.If it is possible, would these parameters need to be DSN-specific? (We have one DSN for password authentication and another for key-pair authentication.)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I also attempted to set environment variables as follows, but it did not work:&lt;/P&gt;
&lt;P&gt;export PRIV_KEY_FILE&lt;BR /&gt;export PRIV_KEY_FILE_PWD&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;Could you please advise on the recommended approach to overcome these issues?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you for your time and guidance.&lt;/P&gt;</description>
      <pubDate>Wed, 05 Nov 2025 16:34:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978416#M30407</guid>
      <dc:creator>freshstarter</dc:creator>
      <dc:date>2025-11-05T16:34:17Z</dc:date>
    </item>
    <item>
      <title>Re: SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in S</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978420#M30408</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/22138"&gt;@RGarrido&lt;/a&gt;&amp;nbsp;- thanks for following up. Regarding the third option:&lt;/P&gt;
&lt;P&gt;The current setup of Snowflake's security regarding RSA Key Pairs makes the assumption/expectation that every user has a separate and manually assigned Private Key Pair. While unfortunately tedious and a hassle to manage for large user bases, it is the only officially supported mechanism bridging SAS9 and Snowflake without triggering MFA push notifications.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;One workaround might be to create an ODBC.ini file that contains DSN's for all&amp;nbsp;&lt;STRONG&gt;service accounts&amp;nbsp;&lt;/STRONG&gt;and nothing else - essentially a long list .ini file containing the values for each service account's&amp;nbsp;&lt;EM&gt;PRIV_KEY_FILE &amp;amp; PRIV_KEY_FILE_PWD&lt;/EM&gt;. These, in turn, are linked to the respective Snowflake users that they operate as. Then, you can chmod that ODBC.ini file to only be readable by the users/groups/identities in the server that are assumed by the service users. This would prevent any of your human users from leveraging a terminal to print out the ODBC.ini file to examine its contents.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now, this does mean you would need a separate ODBC.ini file that's readable &lt;STRONG&gt;for your human users&lt;/STRONG&gt;. Since the ODBCINI environment variable is defined before the autoexec, the configuration would have to be made before launching SAS, which might pose a major problem that's beyond my knowledge. I'll keep thinking on ways that could allow linking multiple different ODBC.ini files, but I haven't seen that done before.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you are able to leverage two separate ODBC.ini files at different times, then, all your users would have to do is submit the&amp;nbsp;&lt;EM&gt;CONOPTS&lt;/EM&gt; with the DSN name and the key file &amp;amp; password associated with their Snowflake human user. This assumes that every human user in SAS has a human user in Snowflake. If that's not the case, you will likely have human users with shared access to a Snowflake account &amp;amp; therefore shared access to its associated private key file &amp;amp; password. In the absence of the second file workaround, we &lt;STRONG&gt;can&lt;/STRONG&gt; pass the workaround to the user (e.g. have them define everything except the driver about their Snowflake connection in their &lt;EM&gt;CONOPTS)&lt;/EM&gt;, though I've been desperately trying to avoid doing that.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If all else fails, you can try leveraging &lt;STRONG&gt;&lt;A href="https://docs.snowflake.com/en/user-guide/programmatic-access-tokens" target="_blank" rel="noopener"&gt;PAT's (Programmatic Access Tokens)&lt;/A&gt; for authentication&lt;/STRONG&gt;, basically treating the PAT as a password in a LIBNAME statement, including in Auth Domains. I have seen some success here and the execution is pretty simple, BUT with the major caveat that it is NOT officially supported by SAS, so you may have to experiment with it.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I apologize for the inconvenience of these recommendations, but I do hope that this points you in the right direction.&lt;/P&gt;</description>
      <pubDate>Wed, 05 Nov 2025 16:56:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978420#M30408</guid>
      <dc:creator>JCabralSAS</dc:creator>
      <dc:date>2025-11-05T16:56:24Z</dc:date>
    </item>
    <item>
      <title>Re: SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in S</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978421#M30409</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/462296"&gt;@freshstarter&lt;/a&gt;, thank you for reading. I'm glad it helped!&lt;/P&gt;
&lt;P&gt;Security of the&amp;nbsp;&lt;EM&gt;PRIV_KEY_FILE &amp;amp; PRIV_KEY_FILE_PWD&lt;/EM&gt; content has been a tricky thorn in my side, especially since I'm more of a Snowflake user-admin than a security guru. BUT let's see what we can do.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;The Windows approach CAN be parallelized to Linux ODBC. What I would recommend, given your service users are the only ones using key-pair authentication, is to define the DSN with everything&amp;nbsp;&lt;EM&gt;except&lt;/EM&gt; the Private Key Pair path and password. However you store those files &amp;amp; passwords and secure them is up to you, with the only requirement that each Private Key&amp;nbsp;&lt;STRONG&gt;FILE&lt;/STRONG&gt; is readable by the identity assumed &lt;STRONG&gt;by the service account&lt;/STRONG&gt; in the Linux system. So long as that holds, as your workforce writes jobs for the service accounts, they can just reference the file location and password&amp;nbsp;&lt;STRONG&gt;directly in the LIBNAME statement via CONOPTS&lt;/STRONG&gt;. The human element is that you have to make sure that the writers of these batch jobs are provided with the locations &amp;amp; passwords (whether you keep that information in a key-vault, on a protected doc somewhere, whatever your security practices permit) for&amp;nbsp;&lt;STRONG&gt;ONLY&amp;nbsp;&lt;/STRONG&gt;the service accounts that they are permitted to use.&lt;/LI&gt;
&lt;LI&gt;I'm not sure which parameters you're referring to here - the&amp;nbsp;&lt;EM&gt;PRIV_KEY_FILE &amp;amp; PRIV_KEY_FILE_PWD&lt;/EM&gt; CAN be used in multiple DSN's with the same values - as long as the Snowflake identity that SAS assumes is linked to said Private Key. As for the other parameters like&amp;nbsp;&lt;EM&gt;warehouse, database, schema,&amp;nbsp;&lt;/EM&gt;etc. - you can mix and match them across multiple DSN's as much as you like. Users can ever overwrite them in their LIBNAME statements, which is convenient because it allows you to write the&amp;nbsp;&lt;EM&gt;ODBC.ini&lt;/EM&gt; with standard or placeholder values for database &amp;amp; schema (i.e. some public &amp;lt;db&amp;gt;.&amp;lt;schema&amp;gt; with a public role that really has no distinct permissions), and then the users can tailor their connection to the workloads they're submitting.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;As for the export issue, as another user mentioned, the&amp;nbsp;&lt;EM&gt;export&lt;/EM&gt; command for setting Linux environment variables doesn't automatically propagate into the SAS system. There's a quick&lt;A href="https://sas.service-now.com/csm/en/how-can-i-get-the-value-of-my-environment-variables-into-my-sas-session-and?id=kb_article_view&amp;amp;sysparm_article=KB0039567" target="_self"&gt; how-to on SAS's Customer Support Center&lt;/A&gt; plus some &lt;A href="https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/secref/n0kt350o8aksrkn1wjkshlsyrpcn.htm" target="_self"&gt;documentation here&lt;/A&gt; that dives well beyond my knowledge about setting and ingesting environment variables into SAS 9. I hope this helps!&lt;/P&gt;</description>
      <pubDate>Wed, 05 Nov 2025 17:13:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978421#M30409</guid>
      <dc:creator>JCabralSAS</dc:creator>
      <dc:date>2025-11-05T17:13:07Z</dc:date>
    </item>
    <item>
      <title>Re: SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in S</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978425#M30412</link>
      <description>&lt;P&gt;Thanks for this&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/443802"&gt;@JCabralSAS&lt;/a&gt;&amp;nbsp;.&amp;nbsp; I have gone through the path you outlined and couldn't find a solution that would actually work.&amp;nbsp; The closest one would be to use the ODBC engine and mask the password and maybe the path to the private key file using some environmental variables.&amp;nbsp; As you mentioned there are a lot of challenges and there are other options like PAT.&amp;nbsp; user FreshStarter is also keen to find out what works best for this so I guess there are others out there facing these challenges.&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 05 Nov 2025 19:42:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978425#M30412</guid>
      <dc:creator>RGarrido</dc:creator>
      <dc:date>2025-11-05T19:42:50Z</dc:date>
    </item>
    <item>
      <title>Re: SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in S</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978427#M30414</link>
      <description>Hello &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/22138"&gt;@RGarrido&lt;/a&gt;&lt;BR /&gt;&lt;BR /&gt;Just letting you know I have  tried PAT approach before and I have onboarded the PAT token on SAS authdomain but the problem is PAT length is 222 char long and it seems Authdomain can accommodate only 128 characters length. I’m not sure whether we can able to overcome this issue on SAS.</description>
      <pubDate>Wed, 05 Nov 2025 19:53:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/978427#M30414</guid>
      <dc:creator>freshstarter</dc:creator>
      <dc:date>2025-11-05T19:53:58Z</dc:date>
    </item>
    <item>
      <title>Re: SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in S</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/979616#M30481</link>
      <description>&lt;P&gt;Here is a step forward to coding the libname for SAS to Snowflake Connector using an RSA key + Passphrase.&amp;nbsp; Replace &lt;STRONG&gt;USER&lt;/STRONG&gt; with &lt;STRONG&gt;AUTHDOMAIN&lt;/STRONG&gt;.&lt;BR /&gt;&lt;SPAN&gt;LIBNAME TEST SNOW&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SERVER="snowflakecomputing.com"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;DATABASE='TESTONE'&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;WAREHOUSE='DEMO_ONE'&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;SCHEMA='TITLE'&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ROLE='USER_ROLE'&lt;/SPAN&gt;&lt;BR /&gt;&lt;STRONG&gt;USER='SASUSER_01'&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;CONOPTS="AUTHENTICATOR=SNOWFLAKE_JWT;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PRIV_KEY_FILE=/LOCATION/OF/KEY/rsa_key.p8;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PRIV_KEY_FILE_PWD=XXXXXXXXXXX;";&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;With the above code, there is no filtering on the part of the users that can run the code.&amp;nbsp; Those with SAS access can run the code and see the tables. What I have tested is to add the AUTHDOMAIN into the code and remove the USER line.&amp;nbsp; This will do three things:&lt;BR /&gt;&lt;BR /&gt;1.&amp;nbsp; Filter the right users to have access to the connection.&amp;nbsp; Only those groups who are given access with the AUTHDOMAIN are able to run the code.&lt;BR /&gt;2.&amp;nbsp; In SAS EG, &lt;U&gt;right clicking&lt;/U&gt; to the library use to give full information about the libname.&amp;nbsp; Now, those details are hidden including the USER ID.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;3. USERID is hidden from user.&amp;nbsp; This is an important component for logging to snowflake. Without a userid, a user cannot no login even with an RSA key and a passphrase.&lt;BR /&gt;&lt;BR /&gt;The code that I ran is like the one below.&amp;nbsp; NO USER line and uses AUTHDOMAIN:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;LIBNAME TEST SNOW&lt;BR /&gt;SERVER="snowflakecomputing.com"&lt;BR /&gt;DATABASE='TESTONE'&lt;BR /&gt;WAREHOUSE='DEMO_ONE'&lt;BR /&gt;SCHEMA='TITLE'&lt;BR /&gt;ROLE='USER_ROLE'&lt;BR /&gt;&lt;STRONG&gt;AUTHDOMAIN='TEST_RSA_CONNECT'&lt;/STRONG&gt;&lt;BR /&gt;CONOPTS="AUTHENTICATOR=SNOWFLAKE_JWT;&lt;BR /&gt;PRIV_KEY_FILE=/LOCATION/OF/KEY/rsa_key.p8;&lt;BR /&gt;PRIV_KEY_FILE_PWD=XXXXXXXXXXX;";&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 26 Nov 2025 15:05:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/979616#M30481</guid>
      <dc:creator>RGarrido</dc:creator>
      <dc:date>2025-11-26T15:05:52Z</dc:date>
    </item>
    <item>
      <title>Re: SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in S</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/979621#M30482</link>
      <description>&lt;P&gt;Right clicking on the libraries (compare):&lt;/P&gt;&lt;P&gt;Using USER:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RGarrido_0-1764171285182.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/111597iB551417E9E5352BD/image-size/medium?v=v2&amp;amp;px=400" role="button" title="RGarrido_0-1764171285182.png" alt="RGarrido_0-1764171285182.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;Using AUTHDOMAIN:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="RGarrido_1-1764171333739.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/111598i74F70DF62B9DE0F0/image-size/medium?v=v2&amp;amp;px=400" role="button" title="RGarrido_1-1764171333739.png" alt="RGarrido_1-1764171333739.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 26 Nov 2025 15:36:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/979621#M30482</guid>
      <dc:creator>RGarrido</dc:creator>
      <dc:date>2025-11-26T15:36:34Z</dc:date>
    </item>
    <item>
      <title>Re: SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in S</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/981895#M30593</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/462296"&gt;@freshstarter&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Where you are you able to fix the issue? Can you share the Auth Domain setup config and where the PAT token was saved?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Will this odbc.ini config work with Auth domain setup?&lt;/SPAN&gt;&lt;/P&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;P&gt;&lt;SPAN&gt;ODBC.ini&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;PRE&gt;[ODBC Data Sources]
Snowflake_pat = Snowflake ODBC Driver 64-bit

[Snowflake_pat]
Driver=/usr/lib64/snowflake/odbc/lib/libSnowflake.so
server=&amp;lt;xxx.snowflakecomputing.com&amp;gt;
role=&amp;lt;snowflake_consumer&amp;gt;
warehouse=&amp;lt;snowflake_wh&amp;gt;
database=&amp;lt;db_name&amp;gt;
authenticator=programmatic_access_token&lt;/PRE&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;SAS code&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=""&gt;libname PATSNOW snow
&amp;nbsp; dsn = "Snowflake_pat"
&amp;nbsp; authdomain = "snowflake_pat_auth"
&amp;nbsp; shema = &amp;lt;schema&amp;gt;
;

proc sql;
&amp;nbsp; connect using PATSNOW as snow;
&amp;nbsp; execute(
 &amp;nbsp; create or replace table &amp;amp;db_primary..&amp;amp;schema_temp..sample_table as
 &amp;nbsp; &amp;nbsp; select *
&amp;nbsp;&amp;nbsp; &amp;nbsp; from &amp;amp;db_primary..&amp;amp;schema_temp..tmp_table
&amp;nbsp; &amp;nbsp;  limit 100
&amp;nbsp; &amp;nbsp; ;
&amp;nbsp; ) by snow;
 disconnect from snow;
quit;

libname PATSNOW clear;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Incase If we do not use auth domain, can we directly use the PAT token in the odbc.ini?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 13 Jan 2026 18:36:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/981895#M30593</guid>
      <dc:creator>Soundappan</dc:creator>
      <dc:date>2026-01-13T18:36:18Z</dc:date>
    </item>
    <item>
      <title>Re: SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in S</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/982170#M30602</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/224541"&gt;@Soundappan&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-start="167" data-end="471"&gt;I have switched the authentication from PAT to a key pair, and it works for me. As I mentioned earlier, the PAT token cannot be added to the AuthDomain in the SAS Management Console due to a length constraint. The PAT token is 222 characters long, while the AuthDomain allows a maximum of 128 characters.&lt;/P&gt;
&lt;P data-start="167" data-end="471"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-start="473" data-end="586"&gt;However, I recall that when we hardcoded the PAT in the &lt;CODE data-start="529" data-end="538"&gt;LIBNAME&lt;/CODE&gt; statement using the &lt;CODE data-start="559" data-end="564"&gt;PWD&lt;/CODE&gt; parameter, it worked.&lt;/P&gt;
&lt;P data-start="473" data-end="586"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-start="588" data-end="719"&gt;Similarly, if we hardcode the same PAT in the &lt;CODE data-start="634" data-end="644"&gt;odbc.ini&lt;/CODE&gt; file under the &lt;CODE data-start="660" data-end="670"&gt;Password&lt;/CODE&gt; parameter, it will work&amp;nbsp; as well.&lt;/P&gt;</description>
      <pubDate>Mon, 19 Jan 2026 17:36:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/982170#M30602</guid>
      <dc:creator>freshstarter</dc:creator>
      <dc:date>2026-01-19T17:36:20Z</dc:date>
    </item>
    <item>
      <title>Re: SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in S</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/983099#M30663</link>
      <description>&lt;P&gt;I would avoid creating an&amp;nbsp;&lt;SPAN&gt;Authentication Domain.&amp;nbsp; This stores an encoded password which can be easily decoded.&amp;nbsp; Moving on you might consider creating a restricted options file for the group or user.&amp;nbsp; You can store the Snowflake UID and password in this file.&amp;nbsp; These files are owned by the administrator and read by the SAS System.&amp;nbsp; (See the SAS documentation snippets below)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;SAS rstropts (restricted options) user configuration files, located at !SASROOT/misc/rstropts/users/&amp;lt;userid&amp;gt;_rsasv9.cfg on UNIX/Linux, are typically designed to be read and enforced by the SAS system. While they are text files, they are usually owned by an administrator, meaning regular users may not have permission to read or modify them.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;SAS rstropts (restricted options) user files can technically contain non-SAS options, specifically operating system environment variables or other configuration settings that the SAS configuration file parser accepts during initialization.&lt;BR /&gt;While the primary purpose of !SASROOT/rstropts/users/userid_rsasv9.cfg is to restrict SAS system options (e.g., -NOXCMD, -SYSPARM), they act as configuration files, allowing administrators to define site-specific settings that may not strictly be SAS System Options.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;I have not personally tested this approach.&amp;nbsp; Good Luck!&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 05 Feb 2026 19:12:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/983099#M30663</guid>
      <dc:creator>Victor_A</dc:creator>
      <dc:date>2026-02-05T19:12:16Z</dc:date>
    </item>
    <item>
      <title>Re: SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in S</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/983196#M30667</link>
      <description>&lt;P&gt;It's common practice to define Authentication Domains entirely in SAS 9.4 metadata, which is what we have done with our Snowflake connections. Access to SAS metadata is password-restricted and opening Auth Domain user credentials in SAS Management Console just gives you asterisks:&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="SASKiwi_0-1770594333968.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/113076iF22F5CA661763090/image-size/medium?v=v2&amp;amp;px=400" role="button" title="SASKiwi_0-1770594333968.png" alt="SASKiwi_0-1770594333968.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;IMHO this is at least as secure as the method you suggest as long as the metadata access password is kept secure.&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 08 Feb 2026 23:52:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/983196#M30667</guid>
      <dc:creator>SASKiwi</dc:creator>
      <dc:date>2026-02-08T23:52:19Z</dc:date>
    </item>
    <item>
      <title>Re: SAS/ACCESS to Snowflake's MFA Mandate: A Step-by-Step Guide to Mitigating Push Notification in S</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/983605#M30686</link>
      <description>&lt;P&gt;Since you are using SMC to return the encoded users passwords SAS intentionally&amp;nbsp;&lt;SPAN&gt;obfuscate those passwords with eight&amp;nbsp;asterisks.&amp;nbsp; That is the way SAS hides the encoded passwords.&amp;nbsp; A non-administrator can submit proc metadata to return their own encoded password which can be decoded.&amp;nbsp; Lastly there was a SAS note which mentioned the&amp;nbsp;obfuscated passwords could be avoided if the proc metadata was called in a macro.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 17 Feb 2026 11:41:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/SAS-ACCESS-to-Snowflake-s-MFA-Mandate-A-Step-by-Step-Guide-to/m-p/983605#M30686</guid>
      <dc:creator>Victor_A</dc:creator>
      <dc:date>2026-02-17T11:41:48Z</dc:date>
    </item>
  </channel>
</rss>

