Невозможно подключиться к Snowflake через JAVA REST API

Я не могу подключиться к Snowflake через Java REST API. Следили за документацией Snowflake относительно подключения к Snowflake с драйвером JDBC, но получили следующую ошибку на консоли eclipse:

Я выполнил шаги, указанные в документации Snowflake: https://docs.snowflake.net/manuals/user-guide/jdbc.html.


Я использую пару ключей RSA для аутентификации в Snowflake, как указано в документе. Я также сопоставил открытый ключ с пользователем Snowflake, которого я использую, но все еще сталкиваюсь с этой проблемой. Я сомневаюсь, что проблема заключается в расшифровке ключа.

Ниже приведен код, который я использую для подключения к Snowflake:

Любая помощь будет высоко ценится!!!!!

public class TestSnowflakeConnection {

        public static void main(String[] args)
            throws Exception
        {
          DriverManager.registerDriver(new net.snowflake.client.jdbc.SnowflakeDriver());    

          File f = new File("D:\\....\\Auth-Keys\\rsa_key.p8");
          FileInputStream fis = new FileInputStream(f);
          DataInputStream dis = new DataInputStream(fis);
          byte[] keyBytes = new byte[(int) f.length()];
          dis.readFully(keyBytes);
          dis.close();

          String encrypted = new String(keyBytes);
          String passphrase = System.getenv("----");
          encrypted = encrypted.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----", "");
          encrypted = encrypted.replace("-----END ENCRYPTED PRIVATE KEY-----", "");
          EncryptedPrivateKeyInfo pkInfo = new EncryptedPrivateKeyInfo(Base64.getMimeDecoder().decode(encrypted));
          PBEKeySpec keySpec = new PBEKeySpec(passphrase.toCharArray());
          SecretKeyFactory pbeKeyFactory = SecretKeyFactory.getInstance(pkInfo.getAlgName());
          PKCS8EncodedKeySpec encodedKeySpec = pkInfo.getKeySpec(pbeKeyFactory.generateSecret(keySpec));
          KeyFactory keyFactory = KeyFactory.getInstance("RSA");
          PrivateKey encryptedPrivateKey = keyFactory.generatePrivate(encodedKeySpec);

          String url = "jdbc:snowflake://<account>.snowflakecomputing.com";
          Properties prop = new Properties();
          prop.put("user", "username");
          prop.put("account", "xxx.xxx.xx-southeast-1.aws");
          prop.put("privateKey", encryptedPrivateKey);


          Connection conn = DriverManager.getConnection(url, prop);
          Statement stat = conn.createStatement();
          ResultSet res = stat.executeQuery("select 1");
          res.next();
          System.out.println(res.getString(1));
          conn.close();

        }
        }

Пара вопросов:


person Afshan Sheikh    schedule 15.11.2019    source источник


Ответы (1)


Если вы действительно зашифровали закрытый ключ с помощью ключевой фразы, вам необходимо убедиться, что вы поместили кодовую фразу в переменную среды с именем PRIVATE_KEY_PASSPHRASE, если вы копируете код Java из документации Snowflake.

  • Когда вы назначили открытый ключ пользователю Snowflake с помощью команды alter user..., вы обязательно исключили -----BEGIN ENCRYPTED PRIVATE KEY----- и -----END ENCRYPTED PRIVATE KEY-----?
  • 1) Да, я использовал парольную фразу для шифрования закрытого ключа 2) Я исключил ----- BEGIN PUBLIC KEY ----- и ----- END PUBLIC KEY ----- при назначении открытый ключ для пользователя Snowflake 3) Я поместил кодовую фразу в системную переменную окружения и использовал код 'code' String passphrase = System.getenv (PRIVATE_KEY_PASSPHRASE); но это дало мне исключение NullPointerException, и поэтому я попробовал: String passphrase = new String (‹mypassphrase›); и это дало мне: net.snowflake.client.jdbc.SnowflakeSQLException: было указано неправильное имя пользователя или пароль. Какие-либо предложения?

В вашем коде у вас есть это:

Это ищет кодовую фразу для зашифрованного закрытого ключа в переменной среды с именем ----, которая кажется неправильной?

String passphrase = System.getenv("----");

Когда вы создали закрытый ключ (тот, который вы храните на клиентской машине), вы зашифровали его парольной фразой?

person Simon D    schedule 15.11.2019
comment
net.snowflake.client.jdbc.SnowflakeSQLException: указано неверное имя пользователя или пароль. в net.snowflake.client.core.SessionUtil.newSession (SessionUtil.java:577) ~ [snowflake-jdbc-3.9.2.jar: 3.9.2] в net.snowflake.client.core.SessionUtil.openSession (SessionUtil. java: 266) ~ [snowflake-jdbc-3.9.2.jar: 3.9.2] в net.snowflake.client.core.SFSession.open (SFSession.java:510) ~ [snowflake-jdbc-3.9.2.jar : 3.9.2] в net.snowflake.client.jdbc.SnowflakeConnectionV1.initialize (SnowflakeConnectionV1.java:135) ~ [snowflake-jdbc-3.9.2.jar: 3.9.2] в net.snowflake.client.jdbc.SnowflakeConnectionV1 . (SnowflakeConnectionV1.java:117) ~ [snowflake-jdbc-3.9.2.jar: 3.9.2] в net.snowflake.client.jdbc.SnowflakeDriver.connect (SnowflakeDriver.java:137) ~ [snowflake-jdbc-3.9 .2.jar: 3.9.2] в java.sql.DriverManager.getConnection (Неизвестный источник) ~ [na: 1.8.0_151] в java.sql.DriverManager.getConnection (Неизвестный источник) ~ [na: 1.8.0_151] в com.system.monitor.registry.RegistryRepository.findAll (RegistryRepository.java:70) ~ [классы /: na] в com.system. monitor.registry.RegistryRepository $$ FastClassBySpringCGLIB $$ 1199dc92.invoke () ~ [классы /: na] в org.springframework.cglib.proxy.MethodProxy.invoke (MethodProxy.java:218) ~ [spring-core-5.2.0 .RELEASE.jar: 5.2.0.RELEASE] в org.springframework.aop.framework.CglibAopProxy $ CglibMethodInvocation.invokeJoinpoint (CglibAopProxy.java:769) ~ [spring-aop-5.2.0.RELEASE.jar. RELEASE] в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:163) ~ [spring-aop-5.2.0.RELEASE.jar: 5.2.0.RELEASE] в org.soping.framework.a. CglibAopProxy $ CglibMethodInvocation.proceed (CglibAopProxy.java:747) ~ [spring-aop-5.2.0.RELEASE.jar: 5.2.0.RELEASE] по адресу org.springframework.dao.support.PersistenceExceptionTranslationInterception.Interception13 ) ~ [spring-tx-5.2.0.RELEASE.jar: 5.2.0.RELEASE] в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvo cation.java:186) ~ [spring-aop-5.2.0.RELEASE.jar: 5.2.0.RELEASE] в org.springframework.aop.framework.CglibAopProxy $ CglibMethodInvocation.proceed (CglibAopProxy.java:747) ~ [spring -aop-5.2.0.RELEASE.jar: 5.2.0.RELEASE] в org.springframework.aop.framework.CglibAopProxy $ DynamicAdvisedInterceptor.intercept (CglibAopProxy.java:689) ~ [spring-aop-5.2.0.RELEASE. банка: 5. 2.0.RELEASE] в com.system.monitor.registry.RegistryRepository $$ EnhancerBySpringCGLIB $$ b552203e.findAll () ~ [классы /: na] в com.system.monitor.registry.RegistryController.getAllRegistries (RegistryController.java:19) ~ [classes /: na] at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) ~ [na: 1.8.0_151] at sun.reflect.NativeMethodAccessorImpl.invoke (неизвестный источник) ~ [na: 1.8.0_151] at sun. Reflect.DelegatingMethodAccessorImpl.invoke (Неизвестный источник) ~ [na: 1.8.0_151] в java.lang.reflect.Method.invoke (Неизвестный источник) ~ [na: 1.8.0_151] в org.springframework.web.method.support. InvocableHandlerMethod.doInvoke (InvocableHandlerMethod.java:190) ~ [spring-web-5.2.0.RELEASE.jar: 5.2.0.RELEASE] в org.springframework.web.method.support.InvocableHandlerMethod.quest ( ) ~ [spring-web-5.2.0.RELEASE.jar: 5.2.0.RELEASE] в org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invo keAndHandle (ServletInvocableHandlerMethod.java:106) ~ [spring-webmvc-5.2.0.RELEASE.jar: 5.2.0.RELEASE] в org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerHandlerMaplerMaplerMappingHandlerHandlerMaplerAdapterMappingHandlerHandlerMaplerAdapter. : 888) ~ [spring-webmvc-5.2.0.RELEASE.jar: 5.2.0.RELEASE] в org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal (RequestMappingHandlerAdapter.java:793) ~ [ spring-webmvc-5.2.0.RELEASE.jar: 5.2.0.RELEASE] в org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle (AbstractHandlerMethodAdapter.java:87) ~ [spring-webmvc-5.2.0 .RELEASE.jar: 5.2.0.RELEASE] в org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:1040) ~ [spring-webmvc-5.2.0.RELEASE.jar: 5.2.0.RELEASE] в org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:943) ~ [spring-webmvc-5.2.0.RELEASE.jar: 5.2.0.RELEASE] в org.springframework.web.servlet. FrameworkServlet.processRequest (FrameworkServlet.java:1006) ~ [spring-webmvc-5.2.0.RELEASE.jar: 5.2.0.RELEASE] в org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:898) ~ [spring-webmvc-5.2.0.RELEASE.jar: 5.2.0.RELEASE] в javax.servlet.http.HttpServlet.service (HttpServlet.java:634) ~ [tomcat-embed-core-9.0.27.jar: 9.0.27] в org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java:883) ~ [spring-webmvc-5.2. 0.RELEASE.jar: 5.2.0.RELEASE] в javax.servlet.http.HttpServlet.service (HttpServlet.java:741) ~ [tomcat-embed-core-9.0.27.jar: 9.0.27] в орг. apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:231) ~ [tomcat-embed-core-9.0.27.jar: 9.0.27] в org.apache.catalina.core.ApplicationFilterChain.doFilter (Application.FilterChain : 166) ~ [tomcat-embed-core-9.0.27.jar: 9.0.27] на org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:53) ~ [tomcat-embed-websocket- 9.0.27.jar: 9.0.27] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:193) ~ [tomcat-embed-core-9.0.27.jar: 9.0.27] в org. apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [tomcat-embed-core-9.0.27.jar: 9.0.27] в org.springframework.web.filter.RequestContextFilter.doFilterInternal.ContextFilter.doFilterInternal.java (Request : 100) ~ [spring-web-5.2.0.RELEASE.jar: 5.2.0.RELEASE] в или g.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:119) ~ [spring-web-5.2.0.RELEASE.jar: 5.2.0.RELEASE] в org.apache.catalina.core.ApplicationFilterDoFilter.in. (ApplicationFilterChain.java:193) ~ [tomcat-embed-core-9.0.27.jar: 9.0.27] в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [tomcat-embed- core-9.0.27.jar: 9.0.27] в org.springframework.web.filter.FormContentFilter.doFilterInternal (FormContentFilter.java:93) ~ [spring-web-5.2.0.RELEASE.jar: 5.2.0.RELEASE ] в org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:119) ~ [spring-web-5.2.0.RELEASE.jar: 5.2.0.RELEASE] в org.apache.catalina.core.ApplicationFilterC .internalDoFilter (ApplicationFilterChain.java:193) ~ [tomcat-embed-core-9.0.27.jar: 9.0.27] в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [tomcat- embed-core-9.0.27.ja r: 9.0.27] в org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal (CharacterEncodingFilter.java:201) ~ [spring-web-5.2.0.RELEASE.jar: 5.2.0.RELEASE] в org.springframework. web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:119) ~ [spring-web-5.2.0.RELEASE.jar: 5.2.0.RELEASE] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilava : 193) ~ [tomcat-embed-core-9.0.27.jar: 9.0.27] в org.apache.catalina.core. ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) ~ [tomcat-embed-core-9.0.27.jar: 9.0.27] в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:202) ~ [tomcat -embed-core-9.0.27.jar: 9.0.27] в org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:96) [tomcat-embed-core-9.0.27.jar: 9.0.27 ] в org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:526) [tomcat-embed-core-9.0.27.jar: 9.0.27] в org.apache.catalina.core.StandardHostValve.invoke ( StandardHostValve.java:139) [tomcat-embed-core-9.0.27.jar: 9.0.27] в org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:92) [tomcat-embed-core-9.0 .27.jar: 9.0.27] в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:74) [tomcat-embed-core-9.0.27.jar: 9.0.27] в org.apache. catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:343) [tomcat-embed-core-9.0.2 7.jar: 9.0.27] в org.apache.coyote.http11.Http11Processor.service (Http11Processor.java:408) [tomcat-embed-core-9.0.27.jar: 9.0.27] в org.apache.coyote .AbstractProcessorLight.process (AbstractProcessorLight.java:66) [tomcat-embed-core-9.0.27.jar: 9.0.27] в org.apache.coyote.AbstractProtocol $ ConnectionHandler.process (AbstractProtocol.java:861) [tomcat- embed-core-9.0.27.jar: 9.0.27] в org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun (NioEndpoint.java:1579) [tomcat-embed-core-9.0.27.jar: 9.0.27] в org.apache.tomcat.util.net.SocketProcessorBase.run (SocketProcessorBase.java:49) [tomcat-embed-core-9.0.27.jar: 9.0.27] в java.util.concurrent.ThreadPoolExecutor .runWorker (Неизвестный источник) [na: 1.8.0_151] в java.util.concurrent.ThreadPoolExecutor $ Worker.run (Неизвестный источник) [na: 1.8.0_151] в org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable .run (TaskThread.java:61) [tomcat-embed-core-9.0.27.jar: 9.0.27] на java.lang.T hread.run (Неизвестный источник) [na: 1.8.0_151] - person Afshan Sheikh; 15.11.2019