Considerando que você já possui um servidor PostgreSQL corretamente instalado, configurado e funcionando em seu sistema, e também que você possui no mínimo algumas noções sobre SQL e sobre o PostgreSQL, crie o seguinte banco de dados de teste, por exemplo através do "psql", o terminal interativo do PostgreSQL:
# createdb teste
Saída do comando:
CREATE DATABASE
Entre a seguir no banco de dados "teste" recém criado:
# psql teste
No terminal interativo, digite a seguinte linha de comandos SQL:
teste=#
create table teste (nome varchar(30), endereco varchar(30), telefone varchar(30));
Saída do comando:
CREATE TABLE
A sequência de comandos acima criou o banco de dados "teste"; a seguir entramos neste banco de dados através do terminal interativo "psql"; finalmente criamos dentro do banco de dados a tabela "teste", contendo os campos "nome", "endereco" e "telefone", todos do tipo "varchar" de até 30 caracteres, conforme demonstrado abaixo:
teste=#
\d teste
Table "public.teste"
Column | Type | Modifiers
----------+-----------------------+-----------
nome | character varying(30) |
endereco | character varying(30) |
telefone | character varying(30) |
A seguir insira os seguintes dados na tabela recém criada, através dos comandos SQL:
teste=#
insert into teste values ('Pedro', 'Rua Um 256', '3256-7785');
Saída do comando:
INSERT 17385 1
teste=#
insert into teste values ('Paulo', 'Rua Dois 344', '3256-9423');
Saída do comando:
INSERT 17386 1
teste=#
insert into teste values ('Maria', 'Rua Quatro 52', '3256-4982');
Saída do comando:
INSERT 17387 1
Verifique agora o conteúdo de sua tabela:
teste=#
select * from teste;
Saída do comando:
nome | endereco | telefone
-------+---------------+-----------
Pedro | Rua Um 256 | 3256-7785
Paulo | Rua Dois 344 | 3256-9423
Maria | Rua Quatro 52 | 3256-4982
(3 rows)
Para um teste mais efetivo, crie uma senha criptografada para o usuário do banco de dados, que por padrão é o usuário "postgres" na instalação (substitua a palavra 'senha' por uma boa senha aleatória com números e letras):
teste=#
alter user postgres with encrypted password 'senha';
Saída do comando:
ALTER USER
Você poderá verificar a alteração realizada acima através do seguinte comando:
teste=#
select * from pg_shadow;
Saída do comando:
usename | usesysid | usecreatedb | usesuper | usecatupd |
passwd | valuntil | useconfig
postgres | 1 | t | t | t |
md5df745e1d739eeb8388a86357549c809f | |
(1 row)
A seguir modifique o seu pg_hba.conf como segue:
# vi pg_hba.conf
# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
Salve e saia do arquivo.
Observe que:
1) Da forma acima, configuramos o método de autenticação por senha criptografada (md5), para todos os acessos locais na própria máquina, a todos os bancos de dados e por todos os usuários cadastrados no PostgreSQL; esta é uma medida de segurança interessante, uma vez que estamos considerando que o servidor de bancos de dados está instalado na mesma máquina do servidor Apache/PHP, e mesmo que o mesmo seja invadido remotamente, o acesso local ao servidor de bancos de dados estará protegido por senha criptografada;
2) Caso você deseje instalar o Apache/PHP em uma máquina diferente daquela onde está instalado o servidor de bancos de dados, por exemplo, em uma DMZ na rede local ("demitarized zone" - máquinas que se encontram diretamente expostas à Internet, sem proteção de "firewall"), você deverá adicionar a seguinte linha no arquivo acima (pg_hba.conf), substituindo o endereço abaixo utilizado pelo de sua rede local, se for outro:
host all all 192.168.1.0/24 md5
Neste caso, ajuste também as configurações de seu "firewall", para que ele permita o acesso da máquina localizada na "DMZ" ao servidor de bancos de dados, que provavelmente encontra-se "atrás" do "firewall".
Note que, neste caso, você deverá ter a mesma versão do PostgreSQL instalada na máquina do Apache/PHP, apenas para efeito de compilação/instalação do PHP, como já explicado anteriormente; ou, de alguma forma, você deverá gerar ou obter o pacote do PHP para sua distribuição, com o suporte ao PostgreSQL já compilado.
3) Embora o código PHP não seja exibido no "browser" da máquina cliente, quando de sua execução (o PHP processa o "script" no servidor e só envia o resultado para o cliente), é conveniente tomar todas as medidas de segurança visando proteger o conteúdo do "script" em PHP que fará o acesso ao banco de dados (em nosso caso /var/www/htdocs/teste.php), como por exemplo, através do ajuste de suas permissões de leitura e escrita, já que o mesmo conterá a senha de acesso ao banco de dados.
Além disso, é conveniente que você consulte os manuais do Apache, PHP, PostgreSQL e "firewall", se houver, visando aumentar sua segurança contra acessos não autorizados, invasivos e potencialmente danosos.
Finalmente, faça o servidor PostgreSQL reler o arquivo de configuração:
/usr/lib/postgresql/bin/pg_ctl reload -D /var/lib/postgres/data
Saída do comando:
postmaster successfully signaled
Para fazer um teste de autenticação, tente o acesso através do "psql" através de outra máquina na rede:
psql -h [nome_do_servidor] -d teste -U postgres
Password: (entre com a senha, que NÃO será mostrada na tela)
Se tudo der certo, você verá a seguir a seguinte mensagem, e após o "prompt" do "psql":
Welcome to psql 8.0.24, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
teste=#
Ou seja, seu banco de dados de teste está pronto para ser acessado através do PHP com autenticação através de senha criptografada, e podemos passar agora à próxima etapa.