PostgreSQL e C++ (libpq)



Documentos relacionados
Sistemas de Informação

Bases de Dados. Lab 1: Introdução ao ambiente. Figura 1. Base de dados de exemplo

SQL. Ambientes de programação O catálogo do sistema. Cristina C. Vieira Departamento de Engenharia Eletrónica e Informática

Iniciar o Data Adapter Configuration Wizard. Toolbox Data Duplo clique em OleDbDataAdapter. Botão next na caixa de diálogo

PostgreSQL. André Luiz Fortunato da Silva Analista de Sistemas CIRP / USP alf@cirp.usp.br

Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados. Prof. Josenildo Silva jcsilva@ifma.edu.br

Bases de Dados. Lab 1: Introdução ao ambiente

A API em C do MySQL. Variáveis em C Funções em C Ponteiros em C

Bases de Dados 1º semestre

Bases de Dados. O ficheiro create-bank.sql contém um conjunto de instruções SQL para criar a base de dados de exemplo ilustrada na figura 1.

PostgreSQL Performance

PHP INTEGRAÇÃO COM MYSQL PARTE 2

Bases de Dados. Lab 7: Desenvolvimento de aplicações com PHP

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Os dados no MySQL são armazenado em tabelas. Uma tabela é uma colecção de informação relacionada e consiste em colunas e linhas.

Revisando sintaxes SQL e criando programa de pesquisa. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

JDBC (Java Database Connectivity) Padrão de Projeto DAO (Data Access Object) Roteiro para instalação do banco de dados e do driver JDBC

Aula 1 Acesso a Banco de Dados

Prof. Carlos Majer Aplicações Corporativas UNICID

JDBC Tópicos avançados de acesso a base de dados relacional

O módulo possui um submódulo para a definição dos schemas da base de dados.

BANCO DE DADOS WEB. Professor Luciano Roberto Rocha

- O MySQL para além da sua utilização em modo linha de comandos, também pode ser utilizado através de ferramentas gráficas.

PHP (Seções, Cookies e Banco de Dados)

Curso de PHP. FATEC - Jundiaí

UFG - Instituto de Informática

BD SQL Server. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04

AULA APLICAÇÕES PARA WEB SESSÕES E LOGIN E SENHA

BANCO DE DADOS: SQL. Edson Anibal de Macedo Reis Batista. 27 de janeiro de 2010

Armazenamento organizado facilitando SCRUD; Agiliza processo de desenvolvimento de sistemas;

SQL TGD/JMB 1. Projecto de Bases de Dados. Linguagem SQL

Curso PHP Aula 08. Bruno Falcão

BD Oracle. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04

Álgebra Relacional. Conjunto de operações que usa uma ou duas relações como entrada e gera uma relação de saída. Operações básicas:

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL

MySQL. Prof. César Melo. com a ajuda de vários

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger

Manipulação de Banco de Dados com Java 1. Objetivos

Exemplo25 Leitura de dados de arquivos txt. Passos para a elaboração da aplicação:

1. Assinale as afirmações que são verdadeiras e as que são falsas, corrigindo-as:

Bases de Dados 2007/2008. Aula 1. Referências

DEPARTAMENTO DE ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA DA UNIVERSIDADE DE COIMBRA

Leonardo Gresta Paulino Murta

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

Programação WEB II. PHP e Banco de Dados. progweb2@thiagomiranda.net. Thiago Miranda dos Santos Souza

Gestão de Segurança da Informação. Segurança de Banco de Dados ( SQL Injection, APBIDS, Modelagem )

SQL - Criação de Tabelas

Componentes da linguagem C++

trigger insert, delete, update

MANUAL DO EXCEL. Um campo é um espaço que contém determinada informação (ex: Nome do cliente X, Telefone do Sr. Y)

Sockets. André Restivo. April 29, Faculdade de Engenharia da Universidade do Porto. André Restivo (FEUP) Sockets April 29, / 27

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

TECNOLOGIA EM SISTEMAS PARA INTERNET PROJETO DE BANCO DE DADOS

Programação SQL. Manipulação de Dados. DML Data Manipulation Language

MANIPULANDO BANCO DE DADOS NO POSTGRESQL SEM FAZER USO DE COMANDOS SQL

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

MIOLO 2.0 DAO. Ely Edison Matos

DESENVOLVIMENTO DE SOFTWARE

Comandos de Manipulação

JDBC Java Database Connectivity

P S I 2. º A N O F 5 M E S T R E / D E T A L H E E P E S Q U I S A. Criar uma relação mestre-detalhe. Pesquisa de informação

PHP INTEGRAÇÃO COM MYSQL PARTE 1

Programação 1. Rafael Vargas Mesquita. ftp://ftp.ci.ifes.edu.br/informatica/rafael/

Android e Bancos de Dados

JAVA JDBC Java Database Connectivity

Banco de Dados SQL (Structured Query Language) Ana Paula Toome Wauke

UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN CURSO SUPERIOR DE TECNOLOGIA EM SISTEMAS PARA INTERNET. Programação para Internet I

SQL: Interrogações simples

XSS - CROSS-SITE SCRIPTING

Trabalhando com conexão ao banco de dados MySQL no Lazarus. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

Criar uma aplicação JPA2 com EclipseLink e H2

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

SQL UMA ABORDAGEM INTERESSANTE

Manipulação de Banco de Dados com Java. Ms. Bruno Crestani Calegaro Maio/ 2015

Tarefa Orientada 15 Manipulação de dados

Transações Seguras em Bancos de Dados (MySQL)

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Treinamento sobre SQL

BANCO DE DADOS. info 3º ano. Prof. Diemesleno Souza Carvalho

Segurança de Dados no PostgreSQL

LINGUAGEM SQL. SQL Server 2008 Comandos iniciais

Desenvolvimento de Aplicações para Internet Aula 9

Linguagem SQL Sub-linguagem DDL

Programação para Android. Aula 07: Persistência de dados Shared Preferences, Internal e External Storage

No Fedora, instalamos os pacotes "mysql" e "mysql-server", usando o yum:

Bancos de Dados I. Integridade semântica

Vamos Criar um Ponto de Restauro no Windows

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

Pedro F. Carvalho OCP Oracle g LINGUAGEM SQL. São José do Rio Preto

8. Outros tipos de Transação (Modo de Transação de Autoconfirmação e Modo Implícito)

Programação para Android. Aula 08: Persistência de dados SQL

JDBC Acessando Banco de Dados

Neste tutorial irá criar uma animação simples com base num desenho do Mechanical Desktop.

Entendendo Injeção de SQL

SQL. SQL é uma linguagem de consulta que implementa as operações da álgebra relacional de forma bem amigável.

Transcrição:

PostgreSQL e C++ (libpq) André Restivo Faculdade de Engenharia da Universidade do Porto April 5, 2013 André Restivo (FEUP) PostgreSQL e C++ (libpq) April 5, 2013 1 / 18

Sumário 1 Introdução 2 Ligação 3 Manipulação 4 Perguntas 5 SQL Injection André Restivo (FEUP) PostgreSQL e C++ (libpq) April 5, 2013 2 / 18

Outline Introdução 1 Introdução 2 Ligação 3 Manipulação 4 Perguntas 5 SQL Injection André Restivo (FEUP) PostgreSQL e C++ (libpq) April 5, 2013 3 / 18

libpq Introdução A libpq é uma biblioteca que permite a uma aplicação escrita em C ou C++ usar uma base de dados PostgreSQL. Documentação: http://www.postgresql.org/docs/8.3/static/libpq.html Para compilar um programa que usa a libpq é necessário fazer include de um ficheiro header: #i n c l u d e <p o s t g r e s q l / l i b p q f e. h> E linkar com a biblioteca quando se compila: g++ l i b p q. cpp o l i b p q l p q André Restivo (FEUP) PostgreSQL e C++ (libpq) April 5, 2013 4 / 18

Outline Ligação 1 Introdução 2 Ligação 3 Manipulação 4 Perguntas 5 SQL Injection André Restivo (FEUP) PostgreSQL e C++ (libpq) April 5, 2013 5 / 18

Ligação Ligação Para nos ligarmos à base de dados, usamos o comando PQconnectdb. Este comando recebe como parâmetro uma connection string que contém entre outras as variáveis: host, username e password. O resultado deste comando, no caso de ser bem sucedido, é um apontador para uma variável do tipo PGconn que representa uma ligação à base de dados. PGconn PQconnectdb ( const char c o n n i n f o ) ; PGconn conn = PQconnectdb ( " h o s t = vdbm. f e. up. pt u s e r = exemplo password = exemplo " ) ; André Restivo (FEUP) PostgreSQL e C++ (libpq) April 5, 2013 6 / 18

Ligação Ligação Devemos sempre verificar se a ligação foi bem sucedida. Primeiro devemos verificar se o comando PQconnectdb retornou null Depois se a ligação está ok. O comando PQStatus retorna o estado da ligação. i f (! conn ) { cout << " F a i l e d to connect to Database " << e n d l ; e x i t ( 1); } i f ( PQstatus ( conn )!= CONNECTION_OK) { cout << " F a i l e d to connect to Database " << e n d l ; e x i t ( 1); } André Restivo (FEUP) PostgreSQL e C++ (libpq) April 5, 2013 7 / 18

Ligação Ligação Quando já não precisarmos da ligação à base de dados, devemos sempre libertá-la. P Q f i n i s h ( conn ) ; André Restivo (FEUP) PostgreSQL e C++ (libpq) April 5, 2013 8 / 18

Outline Manipulação 1 Introdução 2 Ligação 3 Manipulação 4 Perguntas 5 SQL Injection André Restivo (FEUP) PostgreSQL e C++ (libpq) April 5, 2013 9 / 18

Manipulação Manipulação Para executar uma query que não retorna resultados, usamos a função PQexec. Este comando retorna um apontador para uma variável do tipo PGresult. P G r e s u l t PQexec ( PGconn conn, const char command ) ; PGresult r es = PQexec ( conn, "DELETE FROM empregado WHERE id = " + emp_id ) ; André Restivo (FEUP) PostgreSQL e C++ (libpq) April 5, 2013 10 / 18

Manipulação Manipulação Devemos sempre testar se o comando executou corretamente usando a função PQresultStatus. i f ( P Q r e s u l t S t a t u s ( r e s )!= PGRES_COMMAND_OK) { cout << " F a i l e d to e x e c u t e q u e r y " << << P Q r e s u l t S t a t u s ( r e s ) << e n d l ; e x i t ( 1); } André Restivo (FEUP) PostgreSQL e C++ (libpq) April 5, 2013 11 / 18

Outline Perguntas 1 Introdução 2 Ligação 3 Manipulação 4 Perguntas 5 SQL Injection André Restivo (FEUP) PostgreSQL e C++ (libpq) April 5, 2013 12 / 18

Perguntas Perguntas Para fazer uma pergunta à base de dados também se usa o comando PQexec. A única diferença está na forma como se verifica se o comando executou corretamete. E no fato da variável retornada conter a resposta à pergunta. P G r e s u l t r e s = PQexec ( p s q l, " s e l e c t emp_id, emp_nome from empregado " ) ; i f ( P Q r e s u l t S t a t u s ( r e s )!= PGRES_TUPLES_OK) { cout << " F a i l e d to e x e c u t e q u e r y " << << P Q r e s u l t S t a t u s ( r e s ) << e n d l ; e x i t ( 1); } André Restivo (FEUP) PostgreSQL e C++ (libpq) April 5, 2013 13 / 18

Perguntas Perguntas Para sabermos quantos resultados foram retornados usamos a função PQntuples(res). Para obtermos um valor do resultados usamos a função PQgetvalue que nos permite obter o valor uma célula representada pelo número da linha e da coluna. f o r ( i n t row = 0 ; row < PQntuples ( r e s ) ; row++) { cout << PQgetvalue ( res, row, 0) << << PQgetvalue ( res, row, 1) << endl ; } André Restivo (FEUP) PostgreSQL e C++ (libpq) April 5, 2013 14 / 18

Outline SQL Injection 1 Introdução 2 Ligação 3 Manipulação 4 Perguntas 5 SQL Injection André Restivo (FEUP) PostgreSQL e C++ (libpq) April 5, 2013 15 / 18

SQL Injection SQL Injection Um ataque informático muito comum é o chamado SQL Injection. Se os parâmetros de uma query não forem tratados devidamente, principalmente se vierem de uma fonte não confiável, corremos o risco de executar comandos que não desejávamos. Por exemplo: Imaginemos uma query que lista os empregados na base de dados com um determinado nome: PQexec ( psql, "SELECT emp_id, emp_nome FROM empregado WHERE emp_nome = " + emp_nome + " " ) ; O que acontece se o utilizador introduzir o nome: ;DELETE FROM empregado;- - André Restivo (FEUP) PostgreSQL e C++ (libpq) April 5, 2013 16 / 18

SQL Injection SQL Injection Uma forma de nos protegermos contra este tipo de ataques é usarmos funções que tratam as strings antes de as usarmos numa query. Outra é usarmos prepared statements. PGresult PQexecParams ( PGconn conn, c o n s t char command, i n t nparams, c o n s t Oid paramtypes, c o n s t char c o n s t paramvalues, const i n t paramlengths, const i n t paramformats, i n t r e s u l t F o r m a t ) ; André Restivo (FEUP) PostgreSQL e C++ (libpq) April 5, 2013 17 / 18

SQL Injection SQL Injection http://xkcd.com/327/ http://alicebobandmallory.com/articles/2010/09/23/ did-little-bobby-tables-migrate-to-sweden http://gizmodo.com/5498412/ sql-injection-license-plate-hopes-to-foil-euro-traffic-cameras André Restivo (FEUP) PostgreSQL e C++ (libpq) April 5, 2013 18 / 18