【问题标题】:Setting up JDBC connection to private snowflake DB with Azure SSO UserId使用 Azure SSO UserId 设置与私有雪花数据库的 JDBC 连接
【发布时间】:2022-08-14 14:35:03
【问题描述】:

我正在尝试使用 Azure SSO 凭据和连接属性通过 JDBC 连接与雪花连接。但是我可以使用相同的凭据在浏览器上连接到 Snowflake DB。通过Java代码,我得到了异常。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class SnowFlakeTest {

    public static void main(String[] args) throws Exception {
        // get connection
        System.out.println(\"Create JDBC connection\");
        Connection connection = getConnection();
        System.out.println(\"Done creating JDBC connection\");
        // create statement
        System.out.println(\"Create JDBC statement\");
        Statement statement = connection.createStatement();
        System.out.println(\"Done creating JDBC statement\");

        // query the data
        System.out.println(\"Query demo\");
        ResultSet resultSet = statement.executeQuery(\"SELECT * FROM T_ADHOC.TABLE LIMIT 10\");
        System.out.println(\"Metadata:\");
        System.out.println(\"================================\");
        // fetch metadata
        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
        System.out.println(\"Number of columns=\"
                + resultSetMetaData.getColumnCount());
        for (int colIdx = 0; colIdx < resultSetMetaData.getColumnCount();
                colIdx++) {
            System.out.println(\"Column \" + colIdx + \": type=\"
                    + resultSetMetaData.getColumnTypeName(colIdx + 1));
        }
        // fetch data
        System.out.println(\"nData:\");
        System.out.println(\"================================\");
        int rowIdx = 0;
        while (resultSet.next()) {
            System.out.println(\"row \" + rowIdx + \", column 0: \"
                    + resultSet.getString(1));
        }
        statement.close();
    }

    private static Connection getConnection() throws SQLException {
        try {
            Class.forName(\"net.snowflake.client.jdbc.SnowflakeDriver\");
        } catch (ClassNotFoundException ex) {
            System.err.println(\"Driver not found\");
        }
        // build connection properties
        Properties properties = new Properties();
        properties.put(\"user\", \"UserId\");     // replace \"\" with your username
        properties.put(\"password\", \"Password\"); // replace \"\" with your password
        properties.put(\"account\", \"R_E_ACC\");  // replace \"\" with your account name
        properties.put(\"db\", \"B_P_DB\");       // replace \"\" with target database name
        properties.put(\"schema\", \"T_ADHOC\");   // replace \"\" with target schema name
        //properties.put(\"tracing\", \"on\");

        // create a new connection
        String connectStr = System.getenv(\"SF_JDBC_CONNECT_STRING\");
        // use the default connection string if it is not set in environment
        if (connectStr == null) {
            connectStr = \"jdbc:snowflake://domain.privatelink.snowflakecomputing.com\"; // replace accountName with your account name
        }
        return DriverManager.getConnection(connectStr, properties);
    }

}

创建 JDBC 连接

Exception in thread \"main\" net.snowflake.client.jdbc.SnowflakeSQLException: Incorrect username or password was specified.
        at net.snowflake.client.core.SessionUtil.newSession(SessionUtil.java:681)
        at net.snowflake.client.core.SessionUtil.openSession(SessionUtil.java:286)
        at net.snowflake.client.core.SFSession.open(SFSession.java:461)
        at net.snowflake.client.jdbc.DefaultSFConnectionHandler.initialize(DefaultSFConnectionHandler.java:104)
        at net.snowflake.client.jdbc.DefaultSFConnectionHandler.initializeConnection(DefaultSFConnectionHandler.java:79)
        at net.snowflake.client.jdbc.SnowflakeConnectionV1.initConnectionWithImpl(SnowflakeConnectionV1.java:116)
        at net.snowflake.client.jdbc.SnowflakeConnectionV1.<init>(SnowflakeConnectionV1.java:96)
        at net.snowflake.client.jdbc.SnowflakeDriver.connect(SnowflakeDriver.java:176)
        at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
        at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:189)
        at com.apps.sample.SnowFlakeTest.getConnection(SnowFlakeTest.java:87)
        at com.apps.sample.SnowFlakeTest.main(SnowFlakeTest.java:18) ```

标签: java jdbc snowflake-cloud-data-platform


【解决方案1】:

在驱动程序的连接字符串中使用 authenticationator=externalbrowser 或在属性下再添加一行,如下所示。

properties.put("authenticator", "externalbrowser");

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 2021-04-09
    • 2023-02-21
    • 1970-01-01
    • 2020-04-26
    相关资源
    最近更新 更多