【问题标题】:Snowflake Net Connector Connection string is invalid雪花网络连接器连接字符串无效
【发布时间】:2021-08-11 13:10:30
【问题描述】:

我正在尝试使用带有 ff 连接字符串的 SSO 连接到我们的 Snowflake DB,但不断出现错误。我将https://github.com/snowflakedb/snowflake-connector-net 用于我的.NET 4.6.1 控制台应用程序只是为了测试。我已确认我的 SSO 能够登录到 Snowflake Web UI。找到相关文档:https://docs.snowflake.com/en/user-guide/admin-security-fed-auth-use.html#native-sso-okta-only

连接字符串:

AUTHENTICATOR=https://{okta_account_name}.okta.com;ACCOUNT={org}.{region};HOST={org}.{region}.snowflakecomputing.com;PORT=443;ROLE={role};WAREHOUSE={warehouse};USER={sso email};password={sso password};DB={db};SCHEMA={schema}

错误:

Exception: Error: Connection string is invalid: Unable to connect SqlState: 08006, VendorCode: 270008, QueryId:

【问题讨论】:

    标签: c# .net snowflake-cloud-data-platform


    【解决方案1】:

    也许我发布的问题太早了。按照 Snowflake Dotnet Connector 的 Readme.md,我能够通过 log4net 生成日志。潜在的例外是

    [2021-08-11 23:09:04,732] [1] [ERROR] [Snowflake.Data.Core.SFSession] Unable to connect
    System.PlatformNotSupportedException: Operation is not supported on this platform.
       at Snowflake.Data.Core.HttpUtil.setupCustomHttpHandler(HttpClientConfig config)
       at Snowflake.Data.Core.HttpUtil.<>c__DisplayClass10_0.<RegisterNewHttpClientIfNecessary>b__1()
       at Microsoft.Extensions.DependencyInjection.HttpClientBuilderExtensions.<>c__DisplayClass5_0.<ConfigurePrimaryHttpMessageHandler>b__1(HttpMessageHandlerBuilder b)
       at Microsoft.Extensions.Http.DefaultHttpClientFactory.<>c__DisplayClass17_0.<CreateHandlerEntry>g__Configure|0(HttpMessageHandlerBuilder b)
       at Microsoft.Extensions.Http.LoggingHttpMessageHandlerBuilderFilter.<>c__DisplayClass3_0.<Configure>b__0(HttpMessageHandlerBuilder builder)
       at Microsoft.Extensions.Http.DefaultHttpClientFactory.CreateHandlerEntry(String name)
       at Microsoft.Extensions.Http.DefaultHttpClientFactory.<>c__DisplayClass14_0.<.ctor>b__1()
       at System.Lazy`1.CreateValue()
       at System.Lazy`1.LazyInitValue()
       at System.Lazy`1.get_Value()
       at Microsoft.Extensions.Http.DefaultHttpClientFactory.CreateHandler(String name)
       at Microsoft.Extensions.Http.DefaultHttpClientFactory.CreateClient(String name)
       at Snowflake.Data.Core.HttpUtil.GetHttpClient(HttpClientConfig config)
       at Snowflake.Data.Core.SFSession..ctor(String connectionString, SecureString password)
    

    浏览网页后出现类似异常,主要是目标 .NET 框架不满足要求。我最初的目标是 .NET Framework 4.6.1,但在将其更改为 4.7.2 后,一切正常。在 repo 中确实提到该驱动程序现在针对 4.7.2,但我不记得看到它无法支持较低的框架版本。我尝试将驱动程序降级到最早的版本,然后将其逐个升级到最新版本,但无济于事。希望这可以帮助其他面临同样问题的人。

    【解决方案2】:

    您也可以尝试基于浏览器的 SSO:

    在连接字符串中,设置 AUTHENTICATOR=externalbrowser,并将 USER 设置为您的 IdP 的登录名。

    使用 (IDbConnection conn = new SnowflakeDbConnection()) { conn.ConnectionString = "account=testaccount;authenticator=externalbrowser;user={login_name_for_IdP};db=testdb;schema=testschema";

    conn.Open();
    
    conn.Close();
    

    } 其中:

    {login_name_for_IdP} 是您的 IdP 的登录名。

    【讨论】:

      【解决方案3】:

      根据我对Snowflake.Data 的经验,它从4.6.1 版本开始支持.Net 框架。

      连接字符串如下:

      connStr="scheme=https;account=youraccount;host=xxx.snowflakecomputing.com;port=443;proxyhost=xx.myproxy.com;proxyport=80;role=MY_ROLE;warehouse=WAREHOUSE_NAME;user=userid;password=xxx;authenticator=xxx.okta.com"
      您也可以尝试设置authenticator=externalbrowser

      我个人更喜欢使用 ODBC 驱动程序连接到 Snowflake。请参考https://docs.snowflake.com/en/user-guide/odbc.html 了解如何在本地机器上安装 ODBC 驱动程序。在您的机器上安装和配置 Snowflake 后,您可以使用 System.Data.Odbclibrary 连接到 Snowflake。

      连接字符串可能如下所示:

      connStr="Dsn=DataSourceName;uid=userID;pwd=xxx"

      【讨论】:

        猜你喜欢
        • 2021-07-22
        • 1970-01-01
        • 2015-04-23
        • 1970-01-01
        • 2023-03-22
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多