日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

PostgreSQL數(shù)據(jù)源

PostgreSQL數(shù)據(jù)源為您提供讀取和寫入PostgreSQL雙向通道的功能,方便您后續(xù)可以通過向?qū)J胶湍_本模式配置數(shù)據(jù)同步任務(wù)。本文為您介紹DataWorks的PostgreSQL數(shù)據(jù)同步能力支持情況。

支持的版本

目前僅支持配置PostgreSQL數(shù)據(jù)源為PostgreSQL101112131415版本。您可以通過如下語句查看PostgreSQL數(shù)據(jù)庫的版本。

SHOW SERVER_VERSION;

使用限制

離線讀寫

說明

支持讀取視圖表。

PostgreSQL數(shù)據(jù)源支持Password認(rèn)證方式(支持SCRAM-SHA-256認(rèn)證方式),如果PostgreSQL數(shù)據(jù)庫端更改了密碼和密碼認(rèn)證方式,則需要更新數(shù)據(jù)源配置,并且重新測試連通性和手動運行相關(guān)任務(wù)驗證。

當(dāng)PostgreSQL中表名稱、字段名稱是以數(shù)字開頭,或者名稱中包含大小寫英文字母、中劃線(-)時需要使用雙引號("")進(jìn)行轉(zhuǎn)義,不進(jìn)行轉(zhuǎn)義會導(dǎo)致PostgreSQL插件讀取或?qū)懭隤ostgreSQL數(shù)據(jù)失敗。但是在PostgreSQL Reader和Writer插件中,雙引號("")為JSON關(guān)鍵字,因此,您需要使用反斜線(\)再次對雙引號("")進(jìn)行轉(zhuǎn)義。例如,表名稱為123Test,則轉(zhuǎn)義后表名稱為\"123Test\"

說明
  • 雙引號("")中,前引號(")和后引號(")均需使用反斜線(\)進(jìn)行轉(zhuǎn)義。

  • 向?qū)J讲恢С洲D(zhuǎn)義,您需要轉(zhuǎn)換為腳本模式進(jìn)行轉(zhuǎn)義。

使用腳本模式進(jìn)行轉(zhuǎn)義的代碼示例如下。

"parameter": {
    "datasource": "abc",
    "column": [
        "id",
        "\"123Test\"", //添加轉(zhuǎn)義符
],
"where": "",
"splitPk": "id",
"table": "public.wpw_test"
},

實時讀

數(shù)據(jù)集成實時同步任務(wù)存在如下約束與限制:

  • 數(shù)據(jù)集成對ADD COLUMN進(jìn)行了特別支持:

    • 約束:ADD COLUMN時不能有ADD COLUMNDROP COLUMN或者其他DDL的組合。

      重要

      ADD COLUMN時其他DROP COLUMN、 RNAME COLUMNALTER COLUMN的行為將使數(shù)據(jù)同步任務(wù)不能正常工作。

    • 限制:除了ADD COLUMN外,無法識別用戶的其他DDL操作。

  • 不支持ALTER TABLE/CREATE TABLE

  • 不支持TEMPORARY表、UNLOGGED表和Hyper表復(fù)制,PostgreSQL數(shù)據(jù)庫沒有提供機制來對這兩種類型的表進(jìn)行l(wèi)og解析訂閱。

  • 不支持Sequences復(fù)制(serial/bigserial/identity)。

  • 不支持TRUNCATE操作。

  • 不支持大對象復(fù)制(Bytea)。

  • 不支持視圖、物化視圖、外部表復(fù)制。

支持的字段類型

離線讀寫

支持大部分PostgreSQL類型,但也存在部分類型沒有支持的情況,請注意檢查您的數(shù)據(jù)類型。

針對PostgreSQL的類型轉(zhuǎn)換列表,如下所示。

類型分類

PostgreSQL數(shù)據(jù)類型

整數(shù)類

BIGINT、BIGSERIAL、INTEGER、SMALLINT和SERIAL

浮點類

DOUBLE PRECISION、MONEY、NUMERIC和REAL

字符串類

VARCHAR、CHAR、TEXT、BIT和INET

日期時間類

DATE、TIME和TIMESTAMP

布爾型

BOOL

二進(jìn)制類

BYTEA

說明
  • 除上述羅列字段類型外,其它類型均不支持。

  • PostgreSQL Reader中MONEY、INET和BIT需要您使用a_inet::varchar類似的語法進(jìn)行轉(zhuǎn)換。

數(shù)據(jù)同步前準(zhǔn)備

在DataWorks上進(jìn)行數(shù)據(jù)同步前,您需要參考本文提前在PostgreSQL側(cè)進(jìn)行數(shù)據(jù)同步環(huán)境準(zhǔn)備,以便在DataWorks上進(jìn)行PostgreSQL數(shù)據(jù)同步任務(wù)配置與執(zhí)行時服務(wù)正常。以下為您介紹PostgreSQL同步前的相關(guān)環(huán)境準(zhǔn)備。

準(zhǔn)備工作1:創(chuàng)建賬號并配置賬號權(quán)限

您需要規(guī)劃一個數(shù)據(jù)庫的登錄賬號用于后續(xù)執(zhí)行操作,此賬號需要擁有數(shù)據(jù)庫的REPLICATION、 LOGIN權(quán)限。

說明

實時同步只支持邏輯復(fù)制機制,邏輯復(fù)制使用發(fā)布和訂閱模型,其中一個或多個訂閱者訂閱發(fā)布者節(jié)點上的一個或多個發(fā)布。訂閱者從他們訂閱的發(fā)布中提取數(shù)據(jù)。

表的邏輯復(fù)制通常從對發(fā)布者數(shù)據(jù)庫上的數(shù)據(jù)進(jìn)行快照并將其復(fù)制到訂閱者開始。完成后,發(fā)布者上的更改會實時發(fā)送給訂閱者。

  1. 創(chuàng)建賬號。

    操作詳情請參見創(chuàng)建賬號和數(shù)據(jù)庫

  2. 配置權(quán)限。

    檢查賬號是否有replication權(quán)限。

    select userepl from pg_user where usename='xxx'

    預(yù)期返回結(jié)果為True,返回False則表示無權(quán)限,您可以通過如下語句進(jìn)行授權(quán)。

    ALTER USER <user> REPLICATION;

準(zhǔn)備工作2:檢查是否支持備庫

SELECT pg_is_in_recovery()

目前僅支持主庫,預(yù)期返回結(jié)果為False,返回True時表示是備庫,實時同步不支持備庫,需修改數(shù)據(jù)源配置信息為主庫的信息,請參見配置PostgreSQL數(shù)據(jù)源

準(zhǔn)備工作3:檢查wal_level是否為logical

show wal_level

wal_level指定了wal_log的級別,預(yù)期返回結(jié)果為logical,否則不支持邏輯復(fù)制機制。

準(zhǔn)備工作4:檢查是否可以啟動wal_sender進(jìn)程

-- 查詢 max_wal_senders
show max_wal_senders;

-- 查詢 pg_stat_replication 數(shù)量
select count(*) from pg_stat_replication

當(dāng)max_wal_senders不為空,且max_wal_senders值大于pg_stat_replication數(shù)量時,則表示有空閑可用的wal_sender進(jìn)程。PostgreSQL數(shù)據(jù)庫會為同步數(shù)據(jù)程序啟動wal_sender進(jìn)程來給訂閱者發(fā)送日志。

對于每一個需要同步的表,需要手動執(zhí)行ALTER TABLE [tableName] REPLICA IDENTITY FULL語句進(jìn)行授權(quán),否則實時同步任務(wù)會報錯。

PostgreSQL實時同步任務(wù)啟動后,會在數(shù)據(jù)庫中自動創(chuàng)建slot、publications,slot名稱格式為:di_slot_ + 解決方案ID ,publication名稱格式為:di_pub_ + 解決方案ID,當(dāng)實時同步任務(wù)停止或下線后,需手動刪除,否則可能會導(dǎo)致PostgreSQL WAL持續(xù)增長。

創(chuàng)建數(shù)據(jù)源

在進(jìn)行數(shù)據(jù)同步任務(wù)開發(fā)時,您需要在DataWorks上創(chuàng)建一個對應(yīng)的數(shù)據(jù)源,操作流程請參見創(chuàng)建并管理數(shù)據(jù)源詳細(xì)的配置參數(shù)解釋可在配置界面查看對應(yīng)參數(shù)的文案提示

如果您的PostgreSQL數(shù)據(jù)庫開啟了SSL認(rèn)證,那么您在添加DataWorks的PostgreSQL數(shù)據(jù)源時也需要開啟SSL認(rèn)證,具體操作流程請參見附錄二:PostgreSQL數(shù)據(jù)源增加SSL認(rèn)證

數(shù)據(jù)同步任務(wù)開發(fā):PostgreSQL同步流程引導(dǎo)

數(shù)據(jù)同步任務(wù)的配置入口和通用配置流程可參見下文的配置指導(dǎo)。

單表離線同步任務(wù)配置指導(dǎo)

整庫離線讀、單表/整庫全增量實時讀等同步任務(wù)配置指導(dǎo)

操作流程請參見數(shù)據(jù)集成側(cè)同步任務(wù)配置

常見問題

  • 主備同步數(shù)據(jù)恢復(fù)問題

    主備同步問題指PostgreSQL使用主從災(zāi)備,備庫從主庫不間斷恢復(fù)數(shù)據(jù)。由于主備數(shù)據(jù)同步存在一定的時間差,特別在于某些特定情況,例如網(wǎng)絡(luò)延遲等問題,導(dǎo)致備庫同步恢復(fù)的數(shù)據(jù)與主庫有較大差別,從備庫同步的數(shù)據(jù)不是一份當(dāng)前時間的完整鏡像。

  • 一致性約束

    PostgreSQL在數(shù)據(jù)存儲劃分中屬于RDBMS系統(tǒng),對外可以提供強一致性數(shù)據(jù)查詢接口。例如一次同步任務(wù)啟動運行過程中,當(dāng)該庫存在其他數(shù)據(jù)寫入方寫入數(shù)據(jù)時,由于數(shù)據(jù)庫本身的快照特性,PostgreSQL Reader完全不會獲取到寫入的更新數(shù)據(jù)。

    上述是在PostgreSQL Reader單線程模型下數(shù)據(jù)同步一致性的特性,PostgreSQL Reader可以根據(jù)您配置的信息使用并發(fā)數(shù)據(jù)抽取,因此不能嚴(yán)格保證數(shù)據(jù)一致性。

    當(dāng)PostgreSQL Reader根據(jù)splitPk進(jìn)行數(shù)據(jù)切分后,會先后啟動多個并發(fā)任務(wù)完成數(shù)據(jù)同步。多個并發(fā)任務(wù)相互之間不屬于同一個讀事務(wù),同時多個并發(fā)任務(wù)存在時間間隔,因此這份數(shù)據(jù)并不是完整的、一致的數(shù)據(jù)快照信息。

    針對多線程的一致性快照需求,目前在技術(shù)上無法實現(xiàn),只能從工程角度解決。工程化的方式存在取舍,在此提供以下解決思路,您可以根據(jù)自身情況進(jìn)行選擇。

    • 使用單線程同步,即不再進(jìn)行數(shù)據(jù)切片。缺點是速度比較慢,但是能夠很好保證一致性。

    • 關(guān)閉其它數(shù)據(jù)寫入方,保證當(dāng)前數(shù)據(jù)為靜態(tài)數(shù)據(jù),例如鎖表、關(guān)閉備庫同步等。缺點是可能影響在線業(yè)務(wù)。

  • 數(shù)據(jù)庫編碼問題

    PostgreSQL在服務(wù)器端僅支持EUC_CN和UTF-8兩種簡體中文編碼,PostgreSQL Reader底層使用JDBC進(jìn)行數(shù)據(jù)抽取,JDBC天然適配各類編碼,并在底層進(jìn)行了編碼轉(zhuǎn)換。因此PostgreSQL Reader不需您指定編碼,可以自動獲取編碼并轉(zhuǎn)碼。

    對于PostgreSQL底層寫入編碼和其設(shè)定的編碼不一致的混亂情況,PostgreSQL Reader對此無法識別,也無法提供解決方案,導(dǎo)出結(jié)果有可能為亂碼。

  • 增量數(shù)據(jù)同步的方式

    PostgreSQL Reader使用JDBC SELECT語句完成數(shù)據(jù)抽取工作,因此可以使用SELECT…WHERE…進(jìn)行增量數(shù)據(jù)抽取,方式如下:

    • 數(shù)據(jù)庫在線應(yīng)用寫入數(shù)據(jù)庫時,填充modify字段為更改時間戳,包括新增、更新、刪除(邏輯刪除)。對于該類應(yīng)用,PostgreSQL Reader只需要where條件后跟上一同步階段時間戳即可。

    • 對于新增流水型數(shù)據(jù),PostgreSQL Reader在where條件后跟上一階段最大自增ID即可。

    對于業(yè)務(wù)上無字段區(qū)分新增、修改數(shù)據(jù)的情況,PostgreSQL Reader無法進(jìn)行增量數(shù)據(jù)同步,只能同步全量數(shù)據(jù)。

  • SQL安全性

    PostgreSQL Reader提供querySql語句交給您自己實現(xiàn)SELECT抽取語句,PostgreSQL Reader本身對querySql不進(jìn)行任何安全性校驗。

附錄一:腳本Demo與參數(shù)說明

離線任務(wù)腳本配置方式

如果您配置離線任務(wù)時使用腳本模式的方式進(jìn)行配置,您需要按照統(tǒng)一的腳本格式要求,在任務(wù)腳本中編寫相應(yīng)的參數(shù),詳情請參見通過腳本模式配置離線同步任務(wù),以下為您介紹腳本模式下數(shù)據(jù)源的參數(shù)配置詳情。

Reader腳本Demo

配置一個從PostgreSQL數(shù)據(jù)庫同步抽取數(shù)據(jù)作業(yè),使用腳本開發(fā)的詳情請參見通過腳本模式配置離線同步任務(wù)

{
    "type":"job",
    "version":"2.0",//版本號。
    "steps":[
        {
            "stepType":"postgresql",//插件名。
            "parameter":{
                "datasource":"",//數(shù)據(jù)源。
                "column":[//字段。
                    "col1",
                    "col2"
                ],
                "where":"",//篩選條件。
                "splitPk":"",//用splitPk代表的字段進(jìn)行數(shù)據(jù)分片,數(shù)據(jù)同步會啟動并發(fā)任務(wù)進(jìn)行數(shù)據(jù)同步。
                "table":""http://表名。
            },
            "name":"Reader",
            "category":"reader"
        },
        { 
            "stepType":"stream",
            "parameter":{},
            "name":"Writer",
            "category":"writer"
        }
    ],
    "setting":{
        "errorLimit":{
            "record":"0"http://錯誤記錄數(shù)。
        },
        "speed":{
            "throttle":true, //當(dāng)throttle值為false時,mbps參數(shù)不生效,表示不限流;當(dāng)throttle值為true時,表示限流。
            "concurrent":1, //作業(yè)并發(fā)數(shù)。
            "mbps":"12"http://限流,此處1mbps = 1MB/s。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Reader腳本參數(shù)

參數(shù)

描述

是否必選

默認(rèn)值

datasource

數(shù)據(jù)源名稱,腳本模式支持添加數(shù)據(jù)源,此配置項填寫的內(nèi)容必須與添加的數(shù)據(jù)源名稱保持一致。

table

選取的需要同步的表名稱。

column

所配置的表中需要同步的列名集合,使用JSON的數(shù)組描述字段信息 。默認(rèn)使用所有列配置,例如[ * ]。

  • 支持列裁剪,即可以挑選部分列進(jìn)行同步。

  • 支持列換序,即列可以不按照表schema信息順序進(jìn)行同步。

  • 支持常量配置,您需要按照MySQL SQL語法格式,例如["id", "table","1", "'mingya.wmy'", "'null'", "to_char(a+1)", "2.3" , "true"]

    • id為普通列名。

    • table為包含保留字的列名。

    • 1為整型數(shù)字常量。

    • 'mingya.wmy'為字符串常量(注意需要加上一對單引號)。

    • 'null'為字符串。

    • to_char(a+1)為計算字符串長度函數(shù)。

    • 2.3為浮點數(shù)。

    • true為布爾值。

  • column必須顯示指定同步的列集合,不允許為空。

splitPk

PostgreSQL Reader進(jìn)行數(shù)據(jù)抽取時,如果指定splitPk,表示您希望使用splitPk代表的字段進(jìn)行數(shù)據(jù)分片,數(shù)據(jù)同步會啟動并發(fā)任務(wù),以提高數(shù)據(jù)同步的效能:

  • 推薦splitPk用戶使用表主鍵,因為表主鍵通常情況下比較均勻,因此切分出來的分片也不容易出現(xiàn)數(shù)據(jù)熱點。

  • splitPk僅支持整型數(shù)據(jù)切分,不支持字符串、浮點、日期等其它類型 。如果您指定其它非支持類型,忽略splitPk功能,使用單通道進(jìn)行同步。

  • 如果splitPk不填寫,包括不提供splitPk或者splitPk值為空,數(shù)據(jù)同步視作使用單通道同步該表數(shù)據(jù) 。

where

篩選條件,PostgreSQL Reader根據(jù)指定的columntablewhere條件拼接SQL,并根據(jù)該SQL進(jìn)行數(shù)據(jù)抽取。例如在測試時,您可以使用where條件指定實際業(yè)務(wù)場景,通常會選擇當(dāng)天的數(shù)據(jù)進(jìn)行同步,指定where條件為id>2 and sex=1

  • where條件可以有效地進(jìn)行業(yè)務(wù)增量同步。

  • where條件不配置或者為空,視作全表同步數(shù)據(jù)。

querySql(高級模式,向?qū)J讲惶峁?/p>

在部分業(yè)務(wù)場景中,where配置項不足以描述所篩選的條件,您可以通過該配置型來自定義篩選SQL。當(dāng)配置該項后,數(shù)據(jù)同步系統(tǒng)會忽略tables、columns和splitPk配置項,直接使用該配置的內(nèi)容篩選數(shù)據(jù)。例如需要進(jìn)行多表JOIN后同步數(shù)據(jù),使用select a,b from table_a join table_b on table_a.id = table_b.id。當(dāng)您配置querySql時,PostgreSQL Reader直接忽略table、column和where條件的配置。

fetchSize

該配置項定義了插件和數(shù)據(jù)庫服務(wù)器端每次批量數(shù)據(jù)獲取條數(shù),該值決定了數(shù)據(jù)集成和服務(wù)器端的網(wǎng)絡(luò)交互次數(shù),能夠較大地提升數(shù)據(jù)抽取性能。

說明

fetchSize值過大(>2048)可能造成數(shù)據(jù)同步進(jìn)程OOM。

512

Writer腳本Demo

腳本配置示例如下,詳情請參見上述參數(shù)說明。

{
  "type":"job",
  "version":"2.0",//版本號。
  "steps":[ 
    {
      "stepType":"stream",
      "parameter":{},
      "name":"Reader",
      "category":"reader"
    },
    {
      "stepType":"postgresql",//插件名。
      "parameter":{
        "datasource":"",//數(shù)據(jù)源。
        "column":[// 字段。
          "col1",
          "col2"
        ],
        "table":"",//表名。
        "preSql":[],//執(zhí)行數(shù)據(jù)同步任務(wù)之前率先執(zhí)行的SQL語句。
        "postSql":[],//執(zhí)行數(shù)據(jù)同步任務(wù)之后率先執(zhí)行的SQL語句。
      },
      "name":"Writer",
      "category":"writer"
    }
  ],
  "setting":{
    "errorLimit":{
      "record":"0"http://錯誤記錄數(shù)
    },
    "speed":{
      "throttle":true,//當(dāng)throttle值為false時,mbps參數(shù)不生效,表示不限流;當(dāng)throttle值為true時,表示限流。
      "concurrent":1, //作業(yè)并發(fā)數(shù)。
      "mbps":"12"http://限流,此處1mbps = 1MB/s。
    }
  },
  "order":{
    "hops":[
      {
        "from":"Reader",
        "to":"Writer"
      }
    ]
  }
}

Writer腳本參數(shù)

參數(shù)

描述

是否必選

默認(rèn)值

datasource

數(shù)據(jù)源名稱,腳本模式支持添加數(shù)據(jù)源,該配置項填寫的內(nèi)容必須要與添加的數(shù)據(jù)源名稱保持一致。

table

選取的需要同步的表名稱。

writeMode

選擇導(dǎo)入模式,目前支持insert和copy兩種方式:

  • insert:執(zhí)行PostgreSQL的insert into...values... 語句,將數(shù)據(jù)寫入PostgreSQL中。當(dāng)數(shù)據(jù)出現(xiàn)主鍵/唯一性索引沖突時,待同步的數(shù)據(jù)行寫入PostgreSQL失敗,當(dāng)前記錄行成為臟數(shù)據(jù)。建議您優(yōu)先選擇insert模式。

  • copy:PostgreSQL提供copy命令,用于表與文件(標(biāo)準(zhǔn)輸出,標(biāo)準(zhǔn)輸入)之間的相互復(fù)制。數(shù)據(jù)集成支持使用copy from將數(shù)據(jù)加載到表中。建議您在遇到性能問題時再嘗試使用該模式。

insert

column

目標(biāo)表需要寫入數(shù)據(jù)的字段,字段之間用英文逗號分隔。例如"column":["id","name","age"]。如果要依次寫入全部列,使用(*)表示,例如"column":["*"]

preSql

執(zhí)行數(shù)據(jù)同步任務(wù)之前率先執(zhí)行的SQL語句。目前向?qū)J絻H允許執(zhí)行一條SQL語句,腳本模式可以支持多條SQL語句,例如清除舊數(shù)據(jù)。

postSql

執(zhí)行數(shù)據(jù)同步任務(wù)之后執(zhí)行的SQL語句。目前向?qū)J絻H允許執(zhí)行一條SQL語句,腳本模式可以支持多條SQL語句,例如加上某一個時間戳。

batchSize

一次性批量提交的記錄數(shù)大小,該值可以極大減少數(shù)據(jù)集成與PostgreSQL的網(wǎng)絡(luò)交互次數(shù),并提升整體吞吐量。但是該值設(shè)置過大可能會造成數(shù)據(jù)集成運行進(jìn)程OOM情況。

1,024

pgType

PostgreSQL特有類型的轉(zhuǎn)化配置,支持bigint[]、double[]、text[]、Jsonb和JSON類型。配置示例如下。

{
    "job":
    {
        "content":
        [{
            "reader": {...},
            "writer":
            {
                "parameter":
                {
                    "column":
                    [
                        // 目標(biāo)表字段列表
                        "bigint_arr",
                        "double_arr",
                        "text_arr",
                        "jsonb_obj",
                        "json_obj"
                    ],
                    "pgType":
                    {
                        // 特殊的類型設(shè)置,key為目標(biāo)表的字段名,value為字段類型。
                        "bigint_arr": "bigint[]",
                        "double_arr": "double[]",
                        "text_arr": "text[]",
                        "jsonb_obj": "jsonb",
                        "json_obj": "json"
                    }

                }
            }
        }]
    }
}

附錄二:PostgreSQL數(shù)據(jù)源增加SSL認(rèn)證

PostgreSQL SSL認(rèn)證文件說明

在DataWorks上創(chuàng)建或修改PostgreSQL數(shù)據(jù)源連接方式,支持配置SSL認(rèn)證方式,SSL認(rèn)證相關(guān)的配置項說明,具體如下。

PostgreSQL數(shù)據(jù)庫

DataWorks的PostgreSQL數(shù)據(jù)源配置

SSL鏈路加密

客戶端加密

配置ACL

配置項

說明

開啟

不啟用

不涉及

Truststore證書文件

可選,客戶端使用該證書來認(rèn)證服務(wù)器。

  • 不配置:使用普通鏈路。

  • 配置:使用SSL加密鏈路。

啟用

配置ACL為prefer

  • Keystore證書文件

  • 私鑰文件

  • 私鑰密碼

Keystore證書文件私鑰文件均可選,配置ACL為prefer表示服務(wù)端不強制校驗客戶端。

  • 如果私鑰文件未加密,使用SSL加密鏈路連接數(shù)據(jù)庫,校驗私鑰文件。

  • 如果私鑰文件加密,則必須配置私鑰密碼才可正常校驗私鑰文件,成功連通。

配置ACL為verify-ca

  • Keystore證書文件:必須配置。為客戶端CA證書,客戶端需要使用該證書向服務(wù)器證明自己的身份。

  • 私鑰文件:必須配置。客戶端持有該私鑰文件,不對外公開,用來與上傳到服務(wù)器的Keystore證書文件進(jìn)行身份認(rèn)證。

  • 私鑰密碼:可選配置。如果私鑰文件被密碼保護(hù),則需要填寫私鑰密碼,反之則可不填寫。

說明
  • ACL配置設(shè)置為prefer時,不會強制校驗客戶端內(nèi)容。

    • 如果SSL認(rèn)證時不配置任何文件,走普通鏈路。

    • 如果SSL認(rèn)證時添加了認(rèn)證文件,可參考以上表格相對應(yīng)描述。

  • ACL配置設(shè)置為verify-ca時,保證Keystore證書文件私鑰文件以及私鑰密碼三個配置項配置,即可創(chuàng)建數(shù)據(jù)源。

獲取PostgreSQL SSL認(rèn)證文件

本文將以RDS PostgreSQL實例為例生成SSL認(rèn)證證書。

  1. Truststore證書文件獲取方式。

    Truststore 證書文件獲取的具體信息可以參考使用云端證書快速開啟SSL加密

    1. 進(jìn)入RDS實例列表,單擊查看對應(yīng)區(qū)域的RDS實例,并點擊目標(biāo)實例ID,進(jìn)入實例信息頁面。

    2. 選擇需要保護(hù)的連接串,具體操作如下圖所示:

    image

    說明
    • 如果已開啟外網(wǎng)地址,系統(tǒng)將同時顯示內(nèi)網(wǎng)和外網(wǎng)兩個連接地址。云端證書只能對一個連接地址進(jìn)行保護(hù),而內(nèi)網(wǎng)連接地址相對更安全,推薦您對外網(wǎng)連接地址進(jìn)行保護(hù)。查看內(nèi)網(wǎng)和外網(wǎng)地址的具體方法。請參考查看內(nèi)外網(wǎng)地址

    • 如果您需要同時對內(nèi)網(wǎng)和外網(wǎng)連接地址進(jìn)行保護(hù),可以參考使用自定義證書開啟SSL加密

    • 配置云端證書后,實例的運行狀態(tài)將會變成修改SSL中,該狀態(tài)持續(xù)三分鐘左右,請耐心等待運行狀態(tài)變更為運行中后再進(jìn)行后續(xù)操作。

    c. 單擊下載CA證書,即可獲取到Truststore證書文件。

    image

    下載的CA證書包含3個文件,在DataWorks配置PostgreSQL數(shù)據(jù)源時,將后綴為.pem的文件或后綴為.p7b文件上傳到Truststore 證書文件配置項中。

  2. Keystore證書文件私鑰文件私鑰密碼的獲取與配置。

    前提條件:已完成使用云端證書快速開啟SSL加密使用自定義證書開啟SSL加密以及擁有OpenSSL工具。

    說明

    如果您使用的是Linux系統(tǒng),則系統(tǒng)已自帶OpenSSL工具,無需進(jìn)行安裝。如果您使用Windows系統(tǒng),請獲取OpenSSL軟件包并安裝。

    Keystore證書文件私鑰文件私鑰密碼獲取與配置的具體信息可以參考配置客戶端CA證書

    1. 在Linux系統(tǒng)上的OpenSSL工具或在Windows系統(tǒng)上安裝OpenSSL軟件,生成自簽名證書(ca1.crt)和自簽名證書密鑰(ca1.key)。

      openssl req -new -x509 -days 3650 -nodes -out ca1.crt -keyout ca1.key -subj "/CN=root-ca1"
    2. 生成客戶端證書請求文件(client.csr)和客戶端證書私鑰(client.key)。

      openssl req -new -nodes -text -out client.csr -keyout client.key -subj "/CN=<客戶端用戶名>"

      該命令中-subj參數(shù)后的CN取值請配置為客戶端訪問數(shù)據(jù)庫的用戶名。

    3. 生成客戶端證書(client.crt)。

      openssl x509 -req -in client.csr -text -days 365  -CA ca1.crt -CAkey ca1.key -CAcreateserial  -out client.crt
    4. 如果您的RDS PostgreSQL服務(wù)器需要驗證客戶端CA證書,那么您需要打開生成的客戶端自簽名證書ca1.crt文件,復(fù)制證書內(nèi)容粘貼在請?zhí)顚懣蛻舳俗C書授權(quán)機構(gòu)公鑰內(nèi)容對話框內(nèi),作為客戶端CA證書。image

    5. 在RDS側(cè)配置好客戶端CA證書后,在DataWorks上配置PostgreSQL數(shù)據(jù)源時,需要將客戶端證書私鑰client.key轉(zhuǎn)換為client.pk8文件,并將client.pk8上傳至DataWorks的PostgreSQL數(shù)據(jù)源配置的私鑰文件配置項中。

      cp client.key client.pk8
    6. 配置私鑰密碼。

      openssl pkcs8 -topk8 -inform PEM -in client.key -outform der -out client.pk8 -v1 PBE-MD5-DES
      說明

      在執(zhí)行配置私鑰密碼命令時,必須輸入密碼。如果您設(shè)置了密碼,則在DataWorks的PostgreSQL數(shù)據(jù)源配置中的私鑰密碼也需要使用相同的密碼。

配置 PostgreSQL SSL 認(rèn)證文件

在將獲取到的證書文件上傳到DataWorks的PostgreSQL配置項時,其對應(yīng)操作如下:

image

配置ACL進(jìn)入RDS實例列表,單擊查看對應(yīng)區(qū)域的RDS實例,并點擊目標(biāo)實例ID,進(jìn)入實例信息頁面后,點擊數(shù)據(jù)安全性 > 配置ACL單擊修改后,可以選擇不同SSL認(rèn)證方法,可參考強制客戶端開啟SSL連接

image

說明
  • 若ACL認(rèn)證方法為prefer,則PostgreSQL服務(wù)器不會對客戶端證書進(jìn)行強制校驗。

  • 若在RDS PostgreSQL中配置了ACL認(rèn)證方法為verify-ca,則在配置DataWorks的PostgreSQL數(shù)據(jù)源時,需要上傳正確的客戶端證書,保證服務(wù)器能夠檢查客戶端認(rèn)證真?zhèn)巍?/p>