Trabalhar com bancos de dados do SQL Server usando a extensão tds_fdw - Amazon Relational Database Service

Trabalhar com bancos de dados do SQL Server usando a extensão tds_fdw

Você pode usar a extensão tds_fdw do PostgreSQL para acessar bancos de dados compatíveis com o protocolo de fluxo de dados tabular (TDS), como bancos de dados do Sybase e do Microsoft SQL Server. Esse invólucro de dados externos permite que você se conecte pela instância de banco de dados do RDS for PostgreSQL a bancos de dados que usam o protocolo TDS, incluindo o Amazon RDS for Microsoft SQL Server. Para obter mais informações, consulte a documentação do tds-fdw/tds_fdw no GitHub.

A extensão tds_fdw é compatível com o Amazon RDS for PostgreSQL versões 14.2, 13.6 e posteriores.

Configurar o banco de dados do RDS for PostgreSQL para usar a extensão tds_fdw

Nos procedimentos a seguir, você pode encontrar um exemplo de configuração e uso de tds_fdw com uma instância de banco de dados do RDS for PostgreSQL. Antes de se conectar a um banco de dados do SQL Server usando tds_fdw, é necessário obter os seguintes detalhes da instância:

  • Nome de host ou endpoint. Para uma instância de banco de dados do RDS for SQL Server, você pode encontrar o endpoint usando o console. Escolha a guia “Connectivity & security” (Conectividade e segurança) e procure na seção “Endpoint and port” (Endpoint e porta).

  • Número da porta. O número da porta padrão para o Microsoft SQL Server é 1433.

  • O nome do banco de dados. O identificador do banco de dados.

Você também precisa fornecer acesso no grupo de segurança ou na lista de controle de acesso (ACL) para a porta 1433 do SQL Server. Tanto a instância de banco de dados do RDS for PostgreSQL como a instância de banco de dados do RDS for SQL Server precisam de acesso à porta 1433. Se o acesso não estiver configurado corretamente, ao tentar consultar o Microsoft SQL Server, será exibida a seguinte mensagem de erro:

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
Para usar tds_fdw a fim de se conectar a um banco de dados do SQL Server
  1. Conecte-se à instância de banco de dados do PostgreSQL usando uma conta que tenha a função rds_superuser:

    psql --host=your-DB-instance.aws-region.rds.amazonaws.com --port=5432 --username=test –-password
  2. Instale a extensão tds_fdw:

    test=> CREATE EXTENSION tds_fdw; CREATE EXTENSION

Depois que a extensão for instalada na instância de banco de dados do RDS for PostgreSQL, configure o servidor externo.

Para criar o servidor externo

Execute essas tarefas na instância de banco de dados do RDS for PostgreSQL usando uma conta com privilégios rds_superuser.

  1. Crie um servidor externo na instância de banco de dados do RDS para 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

    Para acessar dados não ASCII do lado do SQLServer, crie um link de servidor com a opção character_set na instância de banco de dados do RDS para PostgreSQL:

    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. Conceda uso a um usuário que não tenha permissões da função rds_superuser; por exemplo, user1:

    test=> GRANT USAGE ON FOREIGN SERVER sqlserverdb TO user1;
  3. Conecte-se como user1 e, em seguida, crie um mapeamento para um usuário do SQL Server:

    test=> CREATE USER MAPPING FOR user1 SERVER sqlserverdb OPTIONS (username 'sqlserveruser', password 'password'); CREATE USER MAPPING
  4. Crie uma tabela externa vinculada a uma tabela do SQL Server:

    test=> CREATE FOREIGN TABLE mytab (a int) SERVER sqlserverdb OPTIONS (table 'MYTABLE'); CREATE FOREIGN TABLE
  5. Consulte a tabela externa:

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

Usar criptografia em trânsito para a conexão

A conexão do RDS for PostgreSQL com o SQL Server usa criptografia em trânsito (TLS/SSL), dependendo da configuração do banco de dados do SQL Server. Se o SQL Server não estiver configurado para criptografia, o cliente do RDS for PostgreSQL que faz a solicitação ao banco de dados do SQL Server retornará ao estado de não criptografado.

Você pode aplicar a criptografia para a conexão com instâncias de banco de dados do RDS for SQL Server definindo o parâmetro rds.force_ssl. Para saber como, consulte Forçar conexões com a instância de banco de dados para usar SSL. Para obter mais informações sobre a configuração de SSL/TLS para o RDS for SQL Server, consulte Usar SSL com uma instância de banco de dados do Microsoft SQL Server.