Proteção de Banco de Dados MySQL

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Proteção de Banco de Dados MySQL

Mensagem por Itamar M. Lins Jr. »

Olá!
Olha ai o que provavelmente ele fez.
Captura de tela 2023-08-19 142312.png
Grande proteção.
Ninguém que está te ensinando essa coisa(criptografar strings) faz isso.
Não seja o primeiro a fazer, pois de qualquer lugar que desejar puxar os dados vai precisar passar o algoritmo para descriptografar.
Os dados pertencem a quem digita não pertencem a você.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Proteção de Banco de Dados MySQL

Mensagem por cjp »

Sim, o problema é que nossa rede tem milhares (sem exagero) de computadores. Qualquer pessoa em qualquer desses computadores tem acesso ao meu computador pela rede. É impossível eu impedir que o hacker acesse o meu computador.
Por isso, preciso de um jeito de impedir que o hacker consiga acessar o meu banco de dados (que está no provedor, não na rede).
Toda ajuda é bem-vinda.
Inacio de Carvalho Neto
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Proteção de Banco de Dados MySQL

Mensagem por clodoaldomonteiro »

Olá!

Pra ter a segurança que vc quer, o seu servidor onde está seu banco, não deve dar acesso externo, somente local mesmo, mas aí vc pensa q isso é loucura, como os outros vão acessar o banco de dados ou outros serviços, tipo PHP, Python e etc???

A solução é usar a arquitetura MVC, sigla do termo em inglês Model (modelo) View (visão) e Controller (Controle), já usamos aqui em alguns projetos, e aí vc vai ter que ajustar muita coisa na sua solução desktop, e somado a isso, uma solução para transacionar os dados, que seria uma API RESTful "é uma interface que dois sistemas de computador usam para trocar informações de forma segura pela internet. A maioria das aplicações de negócios precisa se comunicar com outras aplicações internas e de terceiros para executar várias tarefas." (peguei esse conceito da internet).

Aí é estudar muito essa arquitetura, pois se vc der qq acesso externo a seu servidor(es), pode ter certeza q alguém vai invadir um dia, nem que seja com ataques de força bruta, DoS e DDoS.

Foi muito trabalhoso e custoso implantar tudo isso aqui na minha empresa e confesso que nem sou eu o pai da criança, é meu sócio, que basicamente é focado somente nisso e toma 200% do tempo dele.

Mas depois vem as vantagens, pois como já temos toda a estrutura de servidores em Cloud na AWS, não temos nenhum servidor na empresa mais, já foi tudo pro lixo, bom voltando, caso eu queira acessar determinada tabela de um determinado DB, com um app desktop, é só ajustar nossa API pra receber as requisições via protocolo HTTP (Request) e tratar a resposta (Response) que vem em JSON.

Um exemplo de API de terceiros que uso com um app Desktop, é consulta a CNPJ, onde o fornecedor tem um WS ligado direto, esperando as requisições.
Link: http://receitaws.com.br/v1/cnpj/

Código: Selecionar todos

//A título de exemplo, sem compiação e testes.
//Passa um CNPJ para uma função de consulta e retorna um Hash com os dados do CNPJ para ser processado no DBF
Function Main()

   If Len( Trim(cCnpj) ) <> 14
      REturn .t.
   Endif

   hCnpj := CNPJ_Consulta( cCnpj )

   If hCnpj <> NIL

      If Len(hCnpj) > 2

         If nOpMenu = INCLUSAO
            ccr_nome   :=  PadR( cl_NulToString(hCnpj["nome"]), Len(ccr_nome) )
            ccr_fantas :=  PadR( cl_NulToString(hCnpj["fantasia"]), Len(ccr_fantas) )

            If Ptab( cl_NulToString(hCnpj["municipio"]), 'TBM', 2)
               tbm_codigo := TBM->tbm_codigo
            Endif

            ccr_cep    :=  PadR( cl_LimpaString( hCnpj["cep"])       , Len(ccr_cep) )
            ccr_lograd :=  PadR( cl_NulToString(hCnpj["logradouro"]) , Len(ccr_lograd) )
            ccr_numero :=  PadR( cl_NulToString(hCnpj["numero"])     , Len(ccr_numero) )
            ccr_comple :=  PadR( cl_NulToString(hCnpj["complemento"]), Len(ccr_comple) )
            ccr_bairro :=  PadR( cl_NulToString(hCnpj["bairro"])     , Len(ccr_bairro) )
            ccr_cidade :=  PadR( cl_NulToString(hCnpj["municipio"])  , Len(ccr_cidade) )
            ccr_uf     :=  PadR( cl_NulToString(hCnpj["uf"])         , Len(ccr_uf) )
            ccr_fones  :=  PadR( cl_NulToString(hCnpj["telefone"])   , Len(ccr_fones) )
            ccr_email  :=  PadR( cl_NulToString(hCnpj["email"])      , Len(ccr_email) )

            x := hCnpj["atividade_principal"]
            cna_codigo :=  cl_LimpaString( x[1]["code"] )

            x := aScan( aEmpresaTipo, { | a | Trim(Upper(a[2])) = cl_NulToString(hCnpj["porte"]) })
            If x > 0
               ccr_ETipo  :=  aEmpresaTipo[x, 1]
            Endif

         Else

            If LastKey() = 32 //K_F8
               CCR->ccr_nome   :=  hCnpj["nome"]
               CCR->ccr_fantas :=  PadR( cl_NulToString(hCnpj["fantasia"]), Len(ccr_fantas) )

               If Ptab( cl_NulToString(hCnpj["municipio"]), 'TBM', 2)
                  CCR->tbm_codigo := TBM->tbm_codigo
               Endif

               CCR->ccr_cep    :=  PadR( cl_LimpaString( hCnpj["cep"])       , Len(ccr_cep) )
               CCR->ccr_lograd :=  PadR( cl_NulToString(hCnpj["logradouro"]) , Len(ccr_lograd) )
               CCR->ccr_numero :=  PadR( cl_NulToString(hCnpj["numero"])     , Len(ccr_numero) )
               CCR->ccr_comple :=  PadR( cl_NulToString(hCnpj["complemento"]), Len(ccr_comple) )
               CCR->ccr_bairro :=  PadR( cl_NulToString(hCnpj["bairro"])     , Len(ccr_bairro) )
               CCR->ccr_cidade :=  PadR( cl_NulToString(hCnpj["municipio"])  , Len(ccr_cidade) )
               CCR->ccr_uf     :=  PadR( cl_NulToString(hCnpj["uf"])         , Len(ccr_uf) )
               CCR->ccr_fones  :=  PadR( cl_NulToString(hCnpj["telefone"])   , Len(ccr_fones) )
               CCR->ccr_email  :=  PadR( cl_NulToString(hCnpj["email"])      , Len(ccr_email) )

               x := hCnpj["atividade_principal"]
               CCR->cna_codigo :=  cl_LimpaString( x[1]["code"] )

               x := aScan( aEmpresaTipo, { | a | Trim(Upper(a[2])) = cl_NulToString(hCnpj["porte"]) })
               If x > 0
                  CCR->ccr_ETipo  :=  aEmpresaTipo[x, 1]
               Endif

               msg := 'Dados do Credor/Fornecedor atualizados automaticamente de acordo com o encontrado no site da Receita Federal.'
               MsgOK( msg )

            Endif

         Endif
      Else

         msg := 'não foi possível atualizar dados do Credor/Fornecedor.'
         MsgAtencao( msg )

      Endif

   Endif

   Return
   
   ////////////////////////////////////////////////////////////////////////////////
   //https://pctoledo.org/forum/viewtopic.php?f=43&p=155455#p155455
   //https://pctoledo.org/forum/viewtopic.php?f=4&t=23628 (com Header)
   //https://pctoledo.org/forum/viewtopic.php?f=4&t=17427 (usando a  hb_JSONDecode( cJSON, @hJSON ) )
   //https://nfe.io/docs/desenvolvedores/rest-api/consulta-de-cnpj-v1/ (para consultas)
   //https://pctoledo.org/forum/viewtopic.php?f=4&p=148594#p148594 (pode fazer FTP)
Function CNPJ_Consulta( cCnpj )
   Local mSite := "http://receitaws.com.br/v1/cnpj/", oHttp, hCNPJA := Hash(), mJSONCNPJ, hJSON := Hash()
   //mSite := "https://publica.cnpj.ws/cnpj/" //mais completo

   If Len( Trim(cCnpj) ) <> 14 .or. cCnpj = '00000000000000' .or. !VCGC(cCnpj)
      Return NIL
   Endif

   Begin Sequence

      Try
         oHttp := CreateObject("MSXML2.ServerXMLHTTP")
         oHttp:Open("GET", mSite + cCNPJ, .F.)
         oHttp:send()
      CATCH oError
         msg := 'Internet Error: 010' + CRLF
         msg  +=  'Aviso..: Erro verificado ao fazer requisição de CNPJ no Site indicado.' + HB_Eol()
         msg  +=  'Site...: ' + mSite + HB_Eol()
         msg  +=  'CNPJ...: ' + cCNPJ + HB_Eol()
         msg  +=  cl_getError(oError, .t.)

         msgError ( msg )

         hCNPJA := NIL

         Break
      End

      If Empty( oHttp:responseText )

         hCNPJA := NIL
         Break

      ElseIf '"ERROR"' $ oHttp:responseText
         msg := 'Request error: 015' + CRLF
         msg  +=  'Aviso..: O retorno da consulta de CNPJ está com erros.' + HB_Eol()
         msg  +=  '- Aguarde um minuto e tente novamente.' + HB_Eol()
         msg  +=  '- Verifique se o CNPJ é válido.' + HB_Eol()
         msg  +=  'Site...: ' + mSite + HB_Eol()
         msg  +=  'CNPJ...: ' + cCNPJ + HB_Eol()
         msg  +=  'Response:' + oHttp:responseText + HB_Eol()
         msg  +=  'Status..:' + Str(oHttp:status, 3) + HB_Eol()
         msg  +=  cl_getError(, .t.)

         MsgError ( msg, .t. )

         hCNPJA := NIL
         Break

      ElseIf 'Too many' $ oHttp:responseText
         msg := 'Request error: 020' + CRLF
         msg  +=  'Aviso..: Muitas tentativas de pesquisar CNPJ no Site indicado.' + HB_Eol()
         msg  +=  '- Aguarde um minuto e tente novamente.' + HB_Eol()
         msg  +=  'Site...: ' + mSite + HB_Eol()
         msg  +=  'CNPJ...: ' + cCNPJ + HB_Eol()
         msg  +=  'Response:' + oHttp:responseText + HB_Eol()
         msg  +=  'Status..:' + Str(oHttp:status, 3) + HB_Eol()

         MsgAtencao ( msg )

         hCNPJA := NIL
         Break
      Endif

      mJSONCNPJ  :=  HB_AnsiToOem(oHttp:responseText)

      hCNPJA     :=  JSonToHash( mJSONCNPJ )

      If hCNPJA = NIL
         ADOStringGrava(mJSONCNPJ + CRLF)
      Endif

      oHttp      :=  NIL

   End Sequence

   Return hCNPJA
O serviço para consulta do CNPJ está ligado 7 dias por semana, 24 horas por dia, esperando alguma requisição, não importando de onde ela venha, se de um navegador, tablet, PC, se mandou a requisição correta, ela vai ser processada e retornada uma resposta.

A API na verdade é uma aplicação desenvolvida em qualquer linguagem, VB, C#, C++, Node, Python, Java ou outra qualquer, que fica ligada no servidor esperando as requisições.

Espero ter ajudado, Abraços.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Proteção de Banco de Dados MySQL

Mensagem por Itamar M. Lins Jr. »

Olá!
que está no provedor,
Quem é o provedor ? Onde fica fisicamente ?

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Proteção de Banco de Dados MySQL

Mensagem por cjp »

O provedor é o KingHost, se não me engano, ele é sitiado no RS. Mas isso faz diferença?
Clodoaldo, vc está dizendo que o banco fica negado para acesso a terceiros e mesmo assim vc consegue fazer a consulta a ele de qualquer lugar? Como seria isso? Não entendi bem o exemplo que vc postou. Poderia me esclarecer isso, por favor?
Inacio de Carvalho Neto
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Proteção de Banco de Dados MySQL

Mensagem por clodoaldomonteiro »

Bom dia, Inácio.
cjp escreveu:O provedor é o KingHost, se não me engano, ele é sitiado no RS. Mas isso faz diferença?
Clodoaldo, vc está dizendo que o banco fica negado para acesso a terceiros e mesmo assim vc consegue fazer a consulta a ele de qualquer lugar? Como seria isso? Não entendi bem o exemplo que vc postou. Poderia me esclarecer isso, por favor?
Numa breve consulta, vi uma explicação muito boa nesse link: https://www.hostgator.com.br/blog/api-restful/

Outra coisa, vc fez um teste, se editando de Executável com o NotePad++, consegue achar as suas variáveis de acesso ao seu DB, por exemplo:
var "mServidor", var "mSenha", faça uma busca e veja se consegue achar, se sim, vc vai entender q qq um q editar seu executável vai poder achar o endereço do seu servidor e possivelmente sua senha.
No fonte, vc coloca:

Código: Selecionar todos

mServidor := "http://meusite.com.br"
mSenha := "123456"
Veja que no exemplo acima vc tem duas Strings com valores reservados nela, daí, se vc editar se .EXE, e fazer uma busca pelo conteúdo da variáveis, vai perceber que é uma vulnerabilidade salvar senhas como Strings.

Abraços.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Proteção de Banco de Dados MySQL

Mensagem por Itamar M. Lins Jr. »

Olá!
se não me engano
Se esse hacker tem acesso ao kinghost ele vai copiar mesmo.
Vc ainda não entendeu, alguém deu para ele acesso ao kinghost. Não tem problema com seu aplicativo.
Importa saber quem é que tem acesso a suas bases de dados, esteja ela onde for, pensei que era só vc que tinha acesso, mas vc nem sabe onde sua base SE ENCONTRA e quer proteger. Esse hacker ai pode até apagar ela...

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Proteção de Banco de Dados MySQL

Mensagem por cjp »

Código: Selecionar todos

Se esse hacker tem acesso ao kinghost ele vai copiar mesmo.
Vc ainda não entendeu, alguém deu para ele acesso ao kinghost. Não tem problema com seu aplicativo.
Importa saber quem é que tem acesso a suas bases de dados, esteja ela onde for, pensei que era só vc que tinha acesso, mas vc nem sabe onde sua base SE ENCONTRA e quer proteger. Esse hacker ai pode até apagar ela...
Até onde sei, ninguém deu acesso ao kinghost a esse hacker.
Ele acessou pela rede um computador que tinha o programa instalado e obteve acesso ao banco de dados. Não sei exatamente como (se pegou a senha no .exe, ou se de outra forma), sei apenas que ele usou um programa (não sei qual) para salvar todo o meu banco de dados no computador dele. No pouco que sei, entendi que ele, com esse programa, capturou a porta de acesso ao banco de dados que o programa estava usando e acessou diretamente o banco de dados, não necessariamente obteve a senha.

Ao contratar um provedor, eu preciso saber onde a base de dados é armazenada? Isso faz diferença?


Numa breve consulta, vi uma explicação muito boa nesse link: https://www.hostgator.com.br/blog/api-restful/
Vou estudar isso.


Outra coisa, vc fez um teste, se editando de Executável com o NotePad++, consegue achar as suas variáveis de acesso ao seu DB, por exemplo:
var "mServidor", var "mSenha", faça uma busca e veja se consegue achar, se sim, vc vai entender q qq um q editar seu executável vai poder achar o endereço do seu servidor e possivelmente sua senha.
No fonte, vc coloca:
Veja que no exemplo acima vc tem duas Strings com valores reservados nela, daí, se vc editar se .EXE, e fazer uma busca pelo conteúdo da variáveis, vai perceber que é uma vulnerabilidade salvar senhas como Strings.
Editei o .exe e achei sim a senha. Embora eu não salve dessa forma, mas, como eu sei a senha, foi fácil achar, bastou procurar pela senha. Quem não sabe a senha não acharia tão fácil assim.

Mas a questão é: como mudar isso? Como eu conseguiria não colocar a senha no .exe, e ainda assim permitir que os usuários do programa acessassem o banco de dados.
Inacio de Carvalho Neto
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Proteção de Banco de Dados MySQL

Mensagem por Fernando queiroz »

cjp escreveu: Editei o .exe e achei sim a senha. Embora eu não salve dessa forma, mas, como eu sei a senha, foi fácil achar, bastou procurar pela senha. Quem não sabe a senha não acharia tão fácil assim.

Mas a questão é: como mudar isso? Como eu conseguiria não colocar a senha no .exe, e ainda assim permitir que os usuários do programa acessassem o banco de dados.
use o velho CHR(XX) + CHR(XX) + CHR(XX)
Onde o XX é o ascii da letra, da uma complicada para achar
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Proteção de Banco de Dados MySQL

Mensagem por Itamar M. Lins Jr. »

Olá!
Ao contratar um provedor, eu preciso saber onde a base de dados é armazenada? Isso faz diferença?
Faz diferença saber quem tem acesso. Se vc me der acesso ao provedor eu posso apagar tudo, etc...
Enfim basta criptografar a senha no exe que é mais fácil e resolve seu problema. A outra parte é saber quem tem acesso ao kinghost.
Se ele copia suas bases de dados é pq ele tem acesso físico aos computadores. Não é pq ele é hacker.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
marco.prodata
Usuário Nível 3
Usuário Nível 3
Mensagens: 238
Registrado em: 30 Nov 2018 10:07
Localização: Caratinga

Proteção de Banco de Dados MySQL

Mensagem por marco.prodata »

cjp escreveu:

Código: Selecionar todos

Se esse hacker tem acesso ao kinghost ele vai copiar mesmo...
[/quote]

Amigo como funciona a sua estrutura, vc tem uma máquina nuvem, que foi instalada por vc? Qual sistema operacional dela? Os executaveis que acessam essa máquina, estão lá nela ou podem estar em qualquer computador?
O básico da segurança, é ter um sistema operacional atualizado e que seja mais seguro possível, eu gosto por exemplo de usar freebsd nos servidores em nuvem, a partir dai por exemplo, se tenho um banco de dados que só é acessado por site, uso postgresql, eu limito no arquivo de configuração do banco que só pode ser acessado por localhost, nesse caso só os sites hospedados no mesmo servidor tem acesso, como preciso acessar da empresa onde trabalho acrescento o ip da empresa tbm, e além da proteção direto no banco, adiciono no firewall da nuvem pra só acessar conexões desse ip da empresa, ou seja, se algum hacker quiser acessar, vai ter que ser usando algum computador da empresa, e mesmo assim, só vai acessar o que os programas conseguem acessar, a não ser que use alguma vunerabilidade das linguagens como php, java e etc, mas ai já tá além do meu trabalho, eu preciso manter sempre atualizado o sistema operacional e as ferramentas de linguagem.
Se o servidor não estiver na nuvem, vc precisa evitar que tenha acesso físico ao mesmo, se não for possível não tem como dar proteção.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Proteção de Banco de Dados MySQL

Mensagem por cjp »

use o velho CHR(XX) + CHR(XX) + CHR(XX)
Onde o XX é o ascii da letra, da uma complicada para achar
Gostei dessa ideia. Vou fazer isso. Embora ache que isso só não resolva. Como disse, não creio que o hacker tenha pego a senha no meu .exe, acho que ele pegou acesso direto ao banco de dados por meio desse programa que usou a porta que já estava aberta pelo meu sistema na rede.
Faz diferença saber quem tem acesso. Se vc me der acesso ao provedor eu posso apagar tudo, etc...
Enfim basta criptografar a senha no exe que é mais fácil e resolve seu problema. A outra parte é saber quem tem acesso ao kinghost.
Se ele copia suas bases de dados é pq ele tem acesso físico aos computadores. Não é pq ele é hacker.
Eu não dei acesso físico ao kinghost pra ninguém. Ele acessou por meio do computador dele, que está na mesma rede da minha organização, onde tenho meu programa instalado. Ao que sei, só quem tem acesso ao kinghost é o pessoal da própria kinghost.
Amigo como funciona a sua estrutura, vc tem uma máquina nuvem, que foi instalada por vc? Qual sistema operacional dela? Os executaveis que acessam essa máquina, estão lá nela ou podem estar em qualquer computador?
O básico da segurança, é ter um sistema operacional atualizado e que seja mais seguro possível, eu gosto por exemplo de usar freebsd nos servidores em nuvem, a partir dai por exemplo, se tenho um banco de dados que só é acessado por site, uso postgresql, eu limito no arquivo de configuração do banco que só pode ser acessado por localhost, nesse caso só os sites hospedados no mesmo servidor tem acesso, como preciso acessar da empresa onde trabalho acrescento o ip da empresa tbm, e além da proteção direto no banco, adiciono no firewall da nuvem pra só acessar conexões desse ip da empresa, ou seja, se algum hacker quiser acessar, vai ter que ser usando algum computador da empresa, e mesmo assim, só vai acessar o que os programas conseguem acessar, a não ser que use alguma vunerabilidade das linguagens como php, java e etc, mas ai já tá além do meu trabalho, eu preciso manter sempre atualizado o sistema operacional e as ferramentas de linguagem.
Se o servidor não estiver na nuvem, vc precisa evitar que tenha acesso físico ao mesmo, se não for possível não tem como dar proteção.
Tenho apenas uma hospedagem compartilhada no kinghost (ver: https://king.host/hospedagem-de-sites). Não sei qual o sistema operacional da máquina, e não tenho controle sobre ela. Já conversei com o pessoal do Kinghost sobre essa invasão, eles alegam que não são responsáveis, que o problema ocorreu aqui, não com eles.
Inacio de Carvalho Neto
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Proteção de Banco de Dados MySQL

Mensagem por Itamar M. Lins Jr. »

Olá!
Olhe ai sujeito... A pessoa pode ter acesso a essa tela.
Captura de tela 2023-08-22 115926.png
Não está no seu computador não entendeu ?
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Proteção de Banco de Dados MySQL

Mensagem por cjp »

Sim, não está no meu computador, está no provedor.
Mas, para ter acesso a essa tela, precisa da senha de acesso ao Kinghost. Esta nem está no meu .exe, só eu tenho.
Inacio de Carvalho Neto
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Proteção de Banco de Dados MySQL

Mensagem por clodoaldomonteiro »

Olá Inácio.

Pra ajudar na idéia do Fernando.

Código: Selecionar todos

   /////////////////////////////////////////////////////////////////////////////
   //Retorna uma string com os valores ASCii de uma sequˆncia de caracteres, formadada com CHR(xx)+
Function RetornaCHRString(cString)
   Local r := ''
   
   For i := 1 To Len(cString)
      r += 'CHR(' + LTrim(Str(ASC( SubStr(cString, i, 1) ) )) + ') + '
   Next
   
   Return r
   
Abraços.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Responder