A conexão entre o MapServer e o PostGIS é feita através de uma string de conexão, permitindo que qualquer pessoa que tenha acesso ao Mapfile possa ver os parâmetros de acesso ao Banco de Dados, imaginem isto nas mãos de uma pessoa mal intencionada. A mesma poderia realizar qualquer ação no BD, desde de alterar registros, ou até mesmo apagar todos os dados.
Para impedir que isso aconteça, pode ser criada uma role de acesso com permissão apenas de leitura, desta forma não haveria problema da string de conexão cair em mãos erradas.
Para criar a regra, temos que acessar o Banco de Dados da aplicação e digitar as seguintes instruções SQL:
-- Criando o usuário webgis: CREATE USER webgis WITH PASSWORD '--123456--'; -- Removendo todos os privilégios -- deste usuário no esquema public: REVOKE ALL PRIVILEGES ON SCHEMA public FROM webgis; -- Dando permissão apenas de leitura (SELECT) -- no esquema public a este usuário: GRANT SELECT ON ALL TABLES IN SCHEMA public TO webgis;
OBS: em versões mais antigas do PostgreSQL não é possível definir uma role para todo o esquema, sendo necessário setar tabela por tabela as permissões do usuário criado.
Para que uma mesma string de conexão possa ser aproveitada em mais de uma camada, pode ser utilizado o recurso INCLUDE no mapfile que contém o(s) layer(s):
LAYER NAME 'rodovias' TYPE LINE STATUS DEFAULT CONNECTIONTYPE postgis #--- Include com os parâmetros da conexão ---- INCLUDE 'conn.map' DATA 'geom FROM rodovias USING UNIQUE gid USING srid=29185' CLASS NAME 'Rodovias' STYLE WIDTH 1.96 COLOR 255 0 0 END END END
e no conteúdo do arquivo conn.map, colocamos a string de conexão:
CONNECTION "dbname='atlas' host=localhost port=5432 user='webgis' password='--123456--'"
Caso seja do interesse do desenvolvedor, a string de conexão também pode ser criptografada com o utilitário msencrypt, aumentando ainda mais a segurança:
Pelo Terminal, entre na pasta da aplicação e digite:
msencrypt -keygen mykey.txtEm seguida criptografe a string de conexão:
msencrypt -key mykey.txt "dbname='atlas' host=localhost port=5432 user='webgis' password='--123456--'" #--- Resultado mostrado no Terminal (string criptografada) --- 93E8501D65EA2F92A5C7E6E1412F834F8652B7727F6464087F97B0C6FB5CE23369F5DD2A301A94CB857E61D3EE2F68A03CE0DE2953F13F07DD77159274563E83D74942FB7861534CNo início do mapfile, é definido o objeto CONFIG MS_ENCRYPTION_KEY:
MAP NAME "Exemplo" EXTENT 258948 9180428 301662 9206961 SIZE 600 600 UNITS meters # path até o arquivo mykey.txt, gerado anteriormente: CONFIG MS_ENCRYPTION_KEY "mykey.txt" . . .
Por último, abra o arquivo conn.map e substitua a string atual pela criptografada (sem quebras de linha):
CONNECTION "{ 93E8501D65EA2F92A5C7E6E1412F834F8652B7727F64640 87F97B0C6FB5CE23369F5DD2A301A94CB857E61D3EE2F68 A03CE0DE2953F13F07DD77159274563E83D74942FB7861534C }"
Mesmo (sendo pouco provável) que a string possa ser descriptografada, ainda assim o acesso ao Banco de Dados é realizado por uma role que só consegue realizar SELECT. Desta forma estamos garantindo um acesso "blindado" ao BD.
Nenhum comentário:
Postar um comentário