ITPub博客

首页 > 数据库 > 数据库开发技术 > 使用hdbsql连接HANA Cloud中的HANA数据库

使用hdbsql连接HANA Cloud中的HANA数据库

原创 数据库开发技术 作者:数据库杂记 时间:2023-06-06 08:30:21 0 删除 编辑


使用hdbsql连接HANA Cloud中的HANA数据库

前言

HANA数据库的命令行客户端工具,叫hdbsql。hdb前缀表示的就是HANA DB。也正如它的jdbc驱动:com.sap.db.jdbc.Driver,  文件名:ngdbc-<version>jar

当HANA数据库只是本地安装时,它的连接也比较直观。

 hdbsql         -n <host>[:<port>]
                -d <database name>
                -u <user_name>
                -p <password>

可是在Cloud 环境当中,就不一样了。涉及到证书与SSL加密。

补充HANA的JDBC驱动误区

HANA的JDBC分两种,一种是面向Cloud的,另一种是面向非Cloud的。其库的mvn定义如下:

OnPremise System
<dependency>
<groupId>com.sap.db.jdbc</groupId>
<artifactId>ngdbc</artifactId>
<version>[2.5.49,)</version>
</dependency>

Cloud system
<dependency>
<groupId>com.sap.cloud.db.jdbc</groupId>
<artifactId>ngdbc</artifactId>
<version>[2.7.7,)</version>
</dependency>

这两个驱动文件名形式相同,但是里边java包的名字是不一样的。

OnPremise系统中的JDBC:https://int.repositories.cloud.sap/ui/native/build-releases/com/sap/db/jdbc/ngdbc/2.14.7/  (on premise)

Cloud系统中的JDBC: https://int.repositories.cloud.sap/ui/native/build-releases/com/sap/cloud/db/jdbc/ngdbc/2.14.7/ (Cloud)

至于版本,要跟具体的HANA数据库服务器版本相匹配即可。

如果把Cloud的JDBC误用于OnPremise或反过来,在少数情况下,可能出现不可预料的错误。很多开发人员都没有意识到这一点。最常见的错误是将OnPremise的JDBC用于所有的环境。

hdbsql连接Cloud中的HANA

我们再来看看hdbsql连接Cloud时要注意什么?

给定一个连接信息:

"url": "jdbc:sap://#########hhhhhhhhhhhh:443?encrypt=true&validateCertificate=true&currentschema=6D436A932BAE4307BD99C794B584604F",
"certificate": "-----BEGIN CERTIFICATE-----***\n-----END CERTIFICATE-----",
"database_id": "ccccc-75fc-40eb-9dd7-*********",
"driver": "com.sap.db.jdbc.Driver",
"hdi_password": "Qd0DB1FXVE4StL2n9AAAAAAAAAAAAAAAaaa",
"hdi_user": "BBBBBBBBBBBBBBBBB************",
"host": "cccc-75fc-CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC",
"password": "Xg24dRgS58*****************************",
"port": "443",
"schema": "SSSSSSSSSSSSSSsss**************",
"tenantId": "tenantId",
    "user": "UUUUUUUUUUUUUUU**************"

出于安全的目的,这里隐去了相关值的信息。

一般情况下,使用下述命令行进行连接:

 hdbsql         -n <host>[:<port>]
                -d <database name>
                -u <user_name>
                -p <password>

不做任何配置直接连接Cloud HANA DB会出如下错误:

hdbsql -n <host> -u myuser -p password

* -10709: Connection failed (RTE:[300010] Cannot create SSL context: Error in api.SSL_CTX_set_default_pse_by_name D:\tools\sap\hdbclient\\sapcli.pse - SSL error [4129]: Unknown error, General error: 0x00001021 | SAPCRYPTOLIB | SSL_CTX_set_default_pse_by_name
SAPCRYPTO API error
The PSE file does not exist.
0xa1d50108 | TOKEN_TOKPSE | SSL_CTX_set_default_pse_by_name
Token application not existing
Cannot open PSE (PSE=D:\tools\sap\hdbclient\\sapcli.pse, SECUDIR=D:\tools\sap\hdbclient\, user=Administrator Administrator Administrator)
0xa1d50108 | TOKEN_TOKPSE | sec_SSL_CTX_set_asc
Token application not existing
 (ErrCode: 4129) (3afc2648-75fc-40eb-9dd7-b444e5dd7a60.hna0.canary-eu10.hanacloud.ondemand.com:443))

我们需要进行如下配置:

1、设置:sapgenpse gen_pse

PSE owner指定为: "CN=Client 001"即可.  PIN码直接置为空串。

D:\tools\sap\hdbclient>sapgenpse gen_pse -p "D:\tools\sap\hdbclient\sapcli.pse"
Please enter PSE PIN/Passphrase:
Please reenter PSE PIN/Passphrase:

!!! WARNING: For security reasons it is recommended to use a PIN/passphrase
!!! WARNING: which is at least 8 characters long and contains characters in
!!! WARNING: upper and lower case, numbers and non-alphanumeric symbols.

get_pse: Distinguished name of PSE owner: CN=Client 001
Certificate Request:
 Signed Part:
  Subject:                             CN=Client 001
  Key:                                 rsaEncryption (2048 bits)
  Attributes:                          None
 Signature:
  Signature algorithm:                 sha256WithRsaEncryption (1.2.840.113549.1.1.11)
  Signature:                           <Not displayed>

PKCS#10 certificate request for "D:\tools\sap\hdbclient\sapcli.pse":

-----BEGIN CERTIFICATE REQUEST-----
MIICWjCCAUICAQAwFTETMBEGA1UEAxMKQ2xpZW50IDAwMTCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBALJQ+LitFwpi0xYhDhszNtLREdDVFYaNjYfLugQ9
tvsW78SvoA8c7l7lr5q8vRT2iH2V7wkhggAe7+ELR5rPkuyWuMfdXeXqWFvfkQjx
lARjX***************************************************JkiJpxwI
N1y/NwAl1VvtsO49i26NNdTYM42FDKkK0FwIf+5INcdKk3hHtA0NpjQ9z/CPo1kj
W9QgfGK4l99fXP8dvteUiwZZY82nTq0z1Xqml2DNG5HDdXJuiXPR5XfqWcHfnTEv
gT04eViGHBSWWpKPxmiPsMa04KhT56n3ivUz/900
-----END CERTIFICATE REQUEST-----

2、下载根证书

从网站:https://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt

3、导入根证书

sapgenpse maintain_pk -p "D:\tools\sap\hdbclient\sapcli.pse" -a d:\logs\DigiCertGlobalRootCA.crt

D:\tools\sap\hdbclient>sapgenpse maintain_pk -p "D:\tools\sap\hdbclient\sapcli.pse" -a d:\logs\DigiCertGlobalRootCA.crt
 maintain_pk for PSE "D:\tools\sap\hdbclient\sapcli.pse"
----------------------------------------------------------------------------
Subject               :   CN=DigiCert Global Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US

 PKList updated (1 entries total, 1 newly added)

这样添加完之后,就可以顺利的连接HANA数据库了。

4、连接HANA

D:\tools\sap\hdbclient>hdbsql -n mydb.region.hanacloud.ondemand.com:443 -u <user> -p password

Welcome to the SAP HANA Database interactive terminal.

Type:  \h for help with commands
       \q to quit

hdbsql=> \h

hdbsql=> \dt
List of tables
Schema,Name
SEAN940SK2PNO59YS77FRI6MPSFMP_123,TEST
SYS,DUMMY
SYS,INDEX_TYPE_ADVISOR_RESULT_TYPE
SYS,INSUFFICIENT_PRIVILEGE_ERROR_DETAILS_TYPE
SYS,PARAMETER_PROPERTIES_PROCEDURE_TYPE
SYS,REMOTE_SOURCE_PROPERTIES_TYPE
SYS,RESTART_PREDICTION_RESULT_TYPE
SYS,RESTART_PROGRESS_RESULT_TYPE
SYS,SQLSCRIPT_LOGGING_TABLE_TYPE
_SYS_BI,AMS_STATUS
_SYS_TASK,DQ_REFERENCEDATA_EXPIRY_RESULT
_SYS_TASK,GENERATE_PARTITION_FILTERS_OPTIONS
_SYS_TASK,GENERATE_PARTITION_FILTERS_RESULT
_SYS_TASK,PROFILE_FREQUENCY_DISTRIBUTION_COLUMNS
_SYS_TASK,PROFILE_FREQUENCY_DISTRIBUTION_RESULT
_SYS_TASK,PROFILE_METADATA_COLUMNS
_SYS_TASK,PROFILE_METADATA_RESULT
_SYS_TASK,PROFILE_SEMANTIC_COLUMNS
_SYS_TASK,PROFILE_SEMANTIC_RESULT
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
19 rows selected (overall time 112.513 msec; server time 3089 usec)

hdbsql=> create table t123(id int, col2 varchar(32))
0 rows affected (overall time 23.342 msec; server time 4584 usec)

hdbsql=> insert into t123 values(1, 'wang'), (2, 'zhou');
* 257: sql syntax error: incorrect syntax near ",": line 1 col 35 (at pos 35) SQLSTATE: HY000
hdbsql=> insert into t123 values(1, 'wang');
1 row affected (overall time 24.532 msec; server time 2736 usec)

hdbsql=> insert into t123 SELECT n.ELEMENT_NUMBER as t, 'test' from SERIES_GENERATE_DECIMAL(1,0,1000) n;
1000 rows affected (overall time 27.541 msec; server time 2176 usec)
hdbsql=> select count(*) from t123;
COUNT(*)

1001

1 row selected (overall time 40.331 msec; server time 331 usec)





原文作者:数据库杂记;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2019-04-22

  • 博文量
    276
  • 访问量
    160365