使用 tds_fdw 擴充功能處理 SQL 資料庫 - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 tds_fdw 擴充功能處理 SQL 資料庫

您可以使用 PostgreSQL tds_fdw 擴充功能來存取支援表格式資料串流 (TDS) 協議的資料庫,如 Sybase 和 Microsoft SQL Server 資料庫。此外部資料包裝函式可讓您從 Aurora PostgreSQL 資料庫叢集連線到使用 TDS 協議的資料庫,包括 Amazon RDS for Microsoft SQL Server。如需詳細資訊,請參閱 GitHub 上的 tds-fdw/tds_fdw 文件。

Amazon Aurora PostgreSQL 版本 13.6 及更新版本支援 tds_fdw 擴充功能。

設定 Aurora PostgreSQL 資料庫以使用 tds_fdw 擴充功能

在以下程序中,您可以找到設定及使用 tds_fdwAurora PostgreSQL 資料庫叢集 的範例。您必須取得執行個體的以下詳細內容,然後才能使用 tds_fdw 連線到 SQL Server 資料庫:

  • 主機名稱或端點。如果是 RDS for SQL Server 資料庫執行個體,您可以使用主控台找到端點。選擇 Connectivity & security (連線和安全) 索引標籤,然後查看「端點和連線埠」區段。

  • 連線埠號碼。Microsoft SQL 伺服器的預設連線埠號是 1433。

  • 資料庫的名稱。資料庫識別符。

您也必須提供 SQL 連線埠 1433 的安全群組或存取控制清單 (ACL) 的存取權限。Aurora PostgreSQL 資料庫叢集 和 RDS for SQL 資料庫執行個體都需要存取連線埠 1433。如果存取權限未正確設定,當您嘗試查詢 Microsoft SQL Server 時,您會看到以下錯誤訊息:

ERROR: DB-Library error: DB #: 20009, DB Msg: Unable to connect: Adaptive Server is unavailable or does not exist (mssql2019.aws-region.rds.amazonaws.com), OS #: 0, OS Msg: Success, Level: 9
使用 tds_fdw 連線到 SQL Server 資料庫
  1. 使用有 rds_superuser 角色的帳戶連線到您的 Aurora PostgreSQL 資料庫叢集的主要執行個體

    psql --host=your-cluster-name-instance-1.aws-region.rds.amazonaws.com --port=5432 --username=test –-password
  2. 安裝 tds_fdw 擴充功能:

    test=> CREATE EXTENSION tds_fdw; CREATE EXTENSION

擴充功能安裝到您的 Aurora PostgreSQL 資料庫叢集 之後,您就可以設定外部伺服器。

建立外部伺服器

使用有 rds_superuser 權限的帳戶,在 Aurora PostgreSQL 資料庫叢集上執行這些任務。

  1. Aurora PostgreSQL 資料庫叢集中建立外部伺服器:

    test=> CREATE SERVER sqlserverdb FOREIGN DATA WRAPPER tds_fdw OPTIONS (servername 'mssql2019.aws-region.rds.amazonaws.com', port '1433', database 'tds_fdw_testing'); CREATE SERVER

    如要存取 SQLServer 端上的非 ASCII 資料,請使用 Aurora PostgreSQL 資料庫叢集 中的 character_set 選項建立伺服器連結:

    test=> CREATE SERVER sqlserverdb FOREIGN DATA WRAPPER tds_fdw OPTIONS (servername 'mssql2019.aws-region.rds.amazonaws.com', port '1433', database 'tds_fdw_testing', character_set 'UTF-8'); CREATE SERVER
  2. 將權限授予沒有 rds_superuser 角色權限的使用者,例如 user1

    test=> GRANT USAGE ON FOREIGN SERVER sqlserverdb TO user1;
  3. 以 user1 身分連線,然後建立一個 SQL Server 使用者的映射:

    test=> CREATE USER MAPPING FOR user1 SERVER sqlserverdb OPTIONS (username 'sqlserveruser', password 'password'); CREATE USER MAPPING
  4. 建立連結至 SQL Server 資料表的外部資料表:

    test=> CREATE FOREIGN TABLE mytab (a int) SERVER sqlserverdb OPTIONS (table 'MYTABLE'); CREATE FOREIGN TABLE
  5. 查詢外部資料表:

    test=> SELECT * FROM mytab; a --- 1 (1 row)

對連線使用傳輸中加密

Aurora PostgreSQL 到 SQL Server 的連線使用傳輸中加密 (TLS/SSL),具體取決於 SQL Server 資料庫組態。如果 SQL 伺服器未設定為加密,則 RDS for PostgreSQL 用戶端對 SQL Server 資料庫發出的請求將回退為未加密。

您可以透過設定 rds.force_ssl 參數,強制加密 RDS for SQL Server 資料庫執行個體的連線。若要了解作法,請參閱強制使用 SSL 連線至資料庫執行個體。如需有關 RDS for SQL Server 的 SSL/TLS 組態的詳細資訊,請參閱對 Microsoft SQL Server 資料庫執行個體使用 SSL