Ir para conteúdo
  • Cadastre-se

dev botao

Troca de Opinião e Sugestões - Inclusão/Exclusão Registros


  • Este tópico foi criado há 4072 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Moderadores

Bom dia

Estive conversando com o Isaque e com o Régys, trocando ideias de como tratar o novo requisito do Bloco VII

Onde devemos evidenciar no caso de inserir ou remover registros por meio de um gerenciador de banco os registros

D1, E1, P1, C1 e R01 seguindo as orientações do manual e do ato cotepe.

Bom tive uma ideia e sugestão de como tratar isso, criando uma tabela com dois campos, em um o nome das tabelas e o outro

com um hash, sendo o nome das tabelas chave para ter somente um registro para cada tabela,

ao efetuar o insert ou excluir pelo sistema registros das tabelas que façam parte das validações, atualizo o hash

com o count(*) + algum key para não ficar tão obvio e fácil a sua alteração, pois precisa ser um método rápido de ser realizado

uma carga de pdv não pode passar de segundos ou minutos.

mas recai em um porem, se for excluído o arquivo vai gerar o erro, mas ao inserir um outro ele vai validar pois o count volta ao original, mas também o registro inserido estará incorreto e será evidenciado no arquivo, a mesma vale se for inserido um registro e depois removido que seria o contrario do teste

gostaria de ter opiniões e idéias dos amigos

ps. conversando com um homologador ele me falou o seguinte, que era pra se ater a atender o requisito, se ele excluir ou inserir um registro e evidenciar isso no arquivo está correto, pois não vai ser verificado se isso ou aquilo modificando vai voltar ao valor original.

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • 8 meses depois ...
  • Consultores

Estive olhando o teste 115, e até agora não achei uma maneira melhor de fazer isso além da proposta aqui pelo Juliomar.

Alguém "bolou" alguma alternativa melhor?

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Elton, essa está sendo a melhor forma que encontrei até agora mas tem esse furo ai que o Juliomar falou, se excluir e incluir um registro o count vai bater, mas tem um porém, o registro incluído por fora aparece como alterado dai já inválida o arquivo, no dia da minha ultima homologação, já na ER 01.11 eles aceitaram.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

  • Consultores

Pois é, mas não teria nem sentido eles recusarem isso.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Pessoal eu fiz da seguinte forma.

Criei uma tabela de LOGS, como mencionado nos outros Posts

CREATE TABLE LOG_DADOS (

    ORIGEM  DORIGEM NOT NULL /* DORIGEM = VARCHAR(10) */,

    CODIGO  DCODIGO NOT NULL /* DCODIGO = INTEGER */,

    DATA    DDATA NOT NULL /* DDATA = TIMESTAMP */,

    "HASH"  DMD5 NOT NULL /* DMD5 = VARCHAR(32) */

);

Então a cada Inclusão eu altero o LOG de dados com o HASH, a Origem(DAV, R... e etc)...mas na hora de ler os dados eu faço a seguinte consulta Exemplo para os DAVS.
           ConsultaSQL :=

             ' select L.CODIGO, D.CODIGO_AGRUP, D.DT_EMISSAO, ' +

             ' D.CLIENTE, D.NOME, D.ENDERECO, D.CIDADE, ' +

             ' D.UF, D.CPF_CNPJ, D.RG_IE, D.BAIRRO, ' +

             ' D.CEP , D.VLR_ITENS, D.VLR_DESCONTO, D.VLR_TOTAL, ' +

             ' D.VENDEDOR, D.CCF, D.CANCELADO, D.COO, D.NUMECF, ' +

             ' D.VENDA, D.VLR_ACRESCIMO, D.NOME_VENDEDOR, D.SELECIONADO, ' +

             ' D.HASH, D.SITUACAO, D.COO_IMPRESSAO, L."HASH" AS HASH_LOG, L.DATA ' +

             ' from DAVS D ' +

             ' right join VER_LOG_DADOS ('+ QuotedStr('DAV') + ') L ON ( D.codigo = L.codigo ) ' +

             ' where CAST(L.DATA AS DATE) >= :DT_INICIAL AND CAST(L.DATA AS DATE)  <= :DT_FINAL ' +

             ' ORDER BY D.CODIGO ';


           Query.sql.Text := ConsultaSQL;

           Query.Open;

           Query.First;

           //

           While Not(Query.Eof) Do

                 Begin

                   //

                   DAV := TDAVVO.Create;

                   //

                   DAV.ID           := Query.FieldByName('CODIGO').AsInteger;


                   if Query.FieldByName('DT_EMISSAO').IsNull then

                      DAV.DT_EMISSAO   := Query.FieldByName('DATA').AsDateTime

                   else

                      DAV.DT_EMISSAO   := Query.FieldByName('DT_EMISSAO').AsDateTime;


                   DAV.VLR_TOTAL    := Query.FieldByName('VLR_TOTAL').AsFloat;

                   DAV.COO          := Query.FieldByName('COO').AsInteger;

                   DAV.COO_IMP      := Query.FieldByName('COO_IMPRESSAO').AsInteger;

                   DAV.Id_Agrup     := Query.FieldByName('CODIGO_AGRUP').AsInteger;

                   DAV.Cliente      := Query.FieldByName('CLIENTE').AsInteger;

                   DAV.Nome         := Query.FieldByName('NOME').AsString;

                   DAV.Endereco     := Query.FieldByName('ENDERECO').AsString;

                   DAV.Bairro       := Query.FieldByName('BAIRRO').AsString;

                   DAV.Cidade       := Query.FieldByName('CIDADE').AsString;

                   DAV.UF           := Query.FieldByName('UF').AsString;

                   DAV.CEP          := Query.FieldByName('CEP').AsString;

                   DAV.CPF_CNPJ     := Query.FieldByName('CPF_CNPJ').AsString;

                   DAV.RG_IE        := Query.FieldByName('RG_IE').AsString;

                   DAV.CCF          := Query.FieldByName('CCF').AsInteger;

                   DAV.VLR_ITENS    := Query.FieldByName('VLR_ITENS').AsFloat;

                   DAV.VLR_DESCONTO := Query.FieldByName('VLR_DESCONTO').AsFloat;

                   DAV.HASH         := Query.FieldByName('HASH').AsString;

                   DAV.HASH_LOG     := Query.FieldByName('HASH_LOG').AsString;


                   //

                   ListaDAV.Add(DAV);

                   //

                   Query.next;

                   //

                 End;

           //

           Result := ListaDAV;
Essa consulta me retorna os registros de DAVS e seus respectivos LOGS...qdo um DAV é excluído a Consulta é retornada sem os dados do DAV, mas com os dados necessários para criar a Linha...que são as colunas, L.CODIGO e HASH_LOG...os outros virão em branco, assim como o HASH não bate com o Log do HASH do LOG eu sei que foi apagada. Creio que resolve todas assituações...concordam comigo? Abaixo o Código da função completo:
procedure DAVEmitidos(DtInicial, DtFinal: TDateTime; Arquivo, Abrir: Boolean);

Var slArquivo: TStringList;

    ListaDAV: TObjectList;

    i, Cod_Rel_Paf:integer;

    R06: TR06VO;

    D2: TRegistroD2;

    Impressora: TImpressoraVO;

    ArqNom: String;

begin

  //

  Try

    //

    ListaDAV := TDAVController.ListarDAVPeriodo(DtInicial, DtFinal);

    //

    If Assigned(ListaDAV) Then

       Begin

         //

         If (Arquivo) Then

            Begin

              // registro D1

              // preencher header do arquivo

              PreencherHeader(DMEcf.ACBrPAF.PAF_D.RegistroD1);


              // registro D2

              DMEcf.ACBrPAF.AssinarArquivo := False;

              DMEcf.ACBrPAF.PAF_D.RegistroD2.Clear;


              //dados da impressora

              Impressora := TImpressoraController.CarregarImpressora(1);

              //

              For i := 0 To ListaDAV.Count - 1 Do

                  Begin

                    //

                    D2                := DMEcf.ACBrPAF.PAF_D.RegistroD2.New;

                    //

                    D2.RegistroValido := TDAVController.VerificarHASH(TDAVVO(ListaDAV.Items[i]));

                    //

                    D2.NUM_FAB        := Impressora.Serie;

                    D2.MF_ADICIONAL   := Impressora.MFD;

                    D2.TIPO_ECF       := Impressora.Tipo;

                    D2.MARCA_ECF      := Impressora.Marca;

                    D2.MODELO_ECF     := Impressora.Modelo;

                    D2.NUMERO_ECF     := Impressora.NUMERO_ECF;

                    D2.COO            := IntToStr(TDAVVO(ListaDAV.Items[i]).COO);

                    D2.NUM_DAV        := Format('%.13d', [TDAVVO(ListaDAV.Items[i]).Id]);

                    D2.DT_DAV         := TDAVVO(ListaDAV.Items[i]).DT_EMISSAO; // Verificar

                    D2.TIT_DAV        := Impressora.DAV_NOME;

                    D2.VLT_DAV        := TDAVVO(ListaDAV.Items[i]).VLR_TOTAL;

                    //

                  End;

              //

              ArqNom := ExtractFilePath(Application.ExeName) + 'Arquivos\DAVEmitidos.txt';


              DMEcf.ACBrPAF.SaveFileTXT_D('DAVEmitidos.txt');


              DMEcf.Assinar(ArqNom, true);


              if Abrir then

                Abrir_Arq( ArqNom );


              //

            End

         Else

            Begin

              //

              Try

                //

                slArquivo := TStringList.Create;

                //

                slArquivo.Add(Replicate('=', DMEcf.ECF.Colunas));

                slArquivo.Add(Centraliza('DAV EMITIDOS', DMEcf.ECF.Colunas));

                slArquivo.Add(Centraliza('PERIODO: ' + DateToStr(DtInicial) + ' A ' + DateToStr(DtFinal), DMEcf.ECF.Colunas));

                slArquivo.Add(Replicate('=', DMEcf.ECF.Colunas));

                //             ...05...10...15...20...25...30...35...40...45...

                slArquivo.Add('NUMERO     DT EMIS  TITULO     IMP   COO     VLR');

                            // 0000000001 01/01/01 ORCAMENTO 0001

                slArquivo.Add(Replicate('=', DMEcf.ECF.Colunas));

                //

                For i := 0 To ListaDAV.Count - 1 Do

                    slArquivo.Add(Format('%.10d %8s %-7s %5s %5s %7s',

                                        [TDAVVO(ListaDAV.Items[i]).ID,

                                         FormatDateTime('dd/mm/yy', TDAVVO(ListaDAV.Items[i]).DT_EMISSAO),

                                         'ORÇAMENT',

                                         FormatFloat('###0', TDAVVO(ListaDAV.Items[i]).COO_IMP),

                                         FormatFloat('###0', TDAVVO(ListaDAV.Items[i]).COO),

                                         FormatFloat('#,##0.00', TDAVVO(ListaDAV.Items[i]).VLR_TOTAL)]));

                //

                slArquivo.Add(Replicate('=', DMEcf.ECF.Colunas));


                if DMECF.VCODIGO_REL_GER_PAF <> '' then

                  Cod_Rel_Paf := Strtoint(Trim(DMECF.VCODIGO_REL_GER_PAF))

                else

                  Cod_Rel_Paf := 2;


                DMEcf.ECF.RelatorioGerencial(slArquivo, 1, Cod_Rel_Paf);


                { TODO : Está correta essa implementação para gravação do registro R06? }

                Try

                  //

                  R06 := TR06VO.Create;

                  //

                  R06.USUARIO     := 1;

                  R06.COO         := StrToInt(DMEcf.ECF.NumCOO);

                  R06.GNF         := StrToInt(DMEcf.ECF.NumGNF);

                  R06.GRG         := StrToInt(DMEcf.ECF.NumGRG);

                  R06.CDC         := StrToInt(DMEcf.ECF.NumCDC);


                  R06.NUM_FABRICACAO := DMEcf.ECF.NumSerie;

                  R06.MF_ADICIONAL   := DMEcf.ECF.MFAdicional;

                  R06.MODELO      := DMEcf.ModeloECF;

                  R06.NUM_ECF     := DMEcf.NumeroECF;

                  R06.DATA        := DMEcf.ECF.DataHora;


                  R06.Denominacao := 'RG';

                  R06.DataEmissao := FormatDateTime('yyyy-mm-dd', DMEcf.ECF.DataHora);

                  R06.HoraEmissao := FormatDateTime('hh:nn:ss', DMEcf.ECF.DataHora);

                  //

                  TRegistroRController.GravaR06(R06);

                  { TODO : Precisamos fazer alguma coisa em relacao ao registro R07? }

                Except

                  //

                  On E:Exception Do

                     MessageDlg(E.Message, mtError, [mbOk], 0);

                  //

                End;

                //

              Finally

                //

                slArquivo.Free;

                slArquivo := Nil;

                //

              End;

              //

            End;

            //

       End

       //

    Else

       Application.MessageBox('Não existem DAV para o período informado.', 'Informação do Sistema', MB_OK + MB_ICONINFORMATION);

    //

  Finally

    //

    ListaDAV.Free;

    ListaDAV := Nil;

    //

  End;

  //

end;

Link para o comentário
Compartilhar em outros sites

  • Consultores

Essa é uma maneira que eu não tinha considerado ainda.

O problema é que se alguém apagar o registro na tabela de DAV e depois ir na tabela LOG_DADOS e apagar o registro correspondente, o programa não vai conseguir acusar nada.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Rsss...cara..se pensarmos por esse lado...poderíamos criptografar os dados na tabela de Log..para ninguém saber o que tem la..mas sempre tem uns que podem sair apagando tudo e todos nas tabelas...e isso eu creio que não tem como controlar...na realidade acho que o governo esta tentando cercar uma coisa que não tem como, mas fazer o que.

Mas vcs acham que da forma que fiz não daria certo?

Link para o comentário
Compartilhar em outros sites

  • Consultores

Rsss...cara..se pensarmos por esse lado...poderíamos criptografar os dados na tabela de Log..para ninguém saber o que tem la..mas sempre tem uns que podem sair apagando tudo e todos nas tabelas...e isso eu creio que não tem como controlar...na realidade acho que o governo esta tentando cercar uma coisa que não tem como, mas fazer o que.

Mas vcs acham que da forma que fiz não daria certo?

Criptografar os dados na tabela de log seria uma ajuda. Mas quanto a se daria certo, seria melhor verificar com os homologadores.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Terminei os testes de Inclusão e exclusão e tirei algumas conclusões.

No ER ele diz que o registro excluido ( Um DAV por exemplo ) o mesmo deve aparecer no arquivo de Dav Emitidos...e com a técnica de fazer um COUNT dos registro isso não seria possível, da forma que eu fiz com o LOG foi possível fazer isso.

Alguém que já fez sua homologação poderia dar mais detalhes de como foram os testes destes requisitos?

Se possível mais de uma pessoa em órgãos diferentes, pois já percebi que cada Homologador define o que tem que ser feito em casos mais complexos como estes.

Obrigado pela atenção de todos.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Em minhas homologações o teste consiste em excluir, e verificar se o cabeçalho está marcado com ???, não havendo necessidade de mostrar o registro excluído, até porque ele foi excluído.

Mas é sempre bom verificar com o homologador, vai que ele entendeu diferente o requisito.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

  • Consultores

Terminei os testes de Inclusão e exclusão e tirei algumas conclusões.

No ER ele diz que o registro excluido ( Um DAV por exemplo ) o mesmo deve aparecer no arquivo de Dav Emitidos...

Como o Regys explicou, você entendeu errado. Pedir isso seria contraditório. Se foi excluído como ele vai aparecer?

EDIT: Pensando bem, se aparecesse algum dado do registro que foi excluído, o homologador, se for exigente, pode até mesmo questionar de onde estão vindo os dados já que ele os excluiu. Daí ao ser mostrado essa sua tabela, se ele excluísse os dados dela o programa conseguiria acusar a alteração?

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Se for excluído das duas Tabelas DAV e LOGS não seria possível detectar a exclusão, mas como o Arquivo de LOGS esta num formato que a olho Nú não pode ser entendido, já que o mesmo foi criptografado, ele teria que apagar o conteúdo da tabela inteira.

Percorri a Rotina e é possível tanto fazer a linha aparecer com os dados mínimos como também fazer com que a mesma não seja impressa....agora a dúvida seria, faço aparecer ou não faço?...ou mesmo mudo a rotina para o formato que vcs fizeram ( COUNT ).

Link para o comentário
Compartilhar em outros sites

  • Consultores

Neste respeito, estou com o Regys. Verifique com o homologador.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Pessoal, estou fazendo esse teste e tenho a seguinte idéia para evitar essa questão de excluir/incluir e ainda assim ficar validado.

Nas tabelas, tenho um campo que recebe um inteiro ÚNICO, gerado em código Delphi, esse número nunca se repete.

Ao invés de gravar o Count dos registros, poderia gravar um AVG desse campo, pois ai quando algum registro for excluído/inserido o HASH não vai bater com o comparado com o sistema.

é claro que a rotina de gravar o hash no sistema, deve verificar se o atual é válido.

O que acham?

Segue a função de retornar um valor único inteiro

function TDao.GeraChave():string;

var

DataInt : Integer;

SecInt : Integer;

NewReg : Integer;

Fator : integer;

begin

Sleep(2);

Fator := 12;

Inc(Fator);

NewReg := MilliSecondsBetween(0, Now) + Fator;

if (NewReg < 0) then

begin

NewReg := (NewReg * -1);

end;

Result := IntToStr(NewReg);

end;

Link para o comentário
Compartilhar em outros sites

Ok, agora me respondam uma coisa: vcs sabem que o hash de 2 coisas diferentes pode dar o mesmo valor ne?

Eu acho esse teste um absurdo! Se o cara TEM acesso ao banco de dados, ele faz o que QUISER! nao adianta fazer hash, ou sei la o que, sempre tem um jeito

de passar por cima...

Ai vcs podem falar pra mim: "Ah mas vai dificultar pro cara"

Entao se eu criptografar TODAS as informacoes do meu banco SEMPRE, garanto que vai ser BEEEEM mais dificil, mas nenhum homologador vai aceitar, ou to errado?

Link para o comentário
Compartilhar em outros sites

Ok, agora me respondam uma coisa: vcs sabem que o hash de 2 coisas diferentes pode dar o mesmo valor ne?

Essa eu não sabia...MD5 por exemplo pode da o mesmo valor?

Entao se eu criptografar TODAS as informacoes do meu banco SEMPRE, garanto que vai ser BEEEEM mais dificil, mas nenhum homologador vai aceitar, ou to errado?

Eu acho que realmente seria mais interessante gravar a informação criptografada com uma chave que o PAF escolher, só que o banco todo já acho um exagero, mas só nos principais registros já acho válido sim, é mais eficiente do que permitir o cara modificar a informação e então na geração do arquivo é que va ser evidenciada a adulteração.

Mas...voltando ao assunto, afinal, não tem jeito, temos que nos adequar, o que vcs acham da forma de falei?

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Ok, agora me respondam uma coisa: vcs sabem que o hash de 2 coisas diferentes pode dar o mesmo valor ne?

Eu acho esse teste um absurdo! Se o cara TEM acesso ao banco de dados, ele faz o que QUISER! nao adianta fazer hash, ou sei la o que, sempre tem um jeito

de passar por cima...

Ai vcs podem falar pra mim: "Ah mas vai dificultar pro cara"

Entao se eu criptografar TODAS as informacoes do meu banco SEMPRE, garanto que vai ser BEEEEM mais dificil, mas nenhum homologador vai aceitar, ou to errado?

A chance de um hash bater com outro existe sim, mas é muito remota, por isso ele é utilizado para esse tipo de situação, sendo utilizado inclusive por grandes empresas para diversos fins que exigem a validação de um texto ou arquivo, concordo que não é o mais seguro mas é o mais rápido é util.

Quanto a fazer o que quiser no banco de dados, o usuário sim vai fazer, mas o que o SEFAZ quer é que isso fique evidenciado, não é para barrar e para validar.

Tem como o usuário burlar, com certeza tem, afinal de contas estamos falando de informática, onde o impossível não existe, mas tomando as devidas precauções o requisito vai ser atendido e a validação esperada para o arquivo também.

A forma apresentada pelos colegas é uma das diversas formas possíveis, não quer dizer que é infalível nem tão pouco inquebrável, mas como dito, a idéia é validar e não barrar.

Você pode utilizar uma solução onde o seu banco de dados seja criptografado e inacessível ao usuário, sendo passível de consulta e atualização somente pela sua aplicação, isso vai constar no seu laudo e os testes do bloco VII não serão realizados.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

Oi Regys, entendi.

Entao se eu falar no dia da homologacao que o banco de dados é inacessivel por fora da aplicacao. Como por exemplo, um servidor FreeBSD que tem um banco de dados postgres onde o unico jeito de acessar é atraves da aplicacao. O homologador vai simplesmente fazer essa observação no meu laudo, e pular os testes do bloco VII?

O que vc acha?

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Oi Regys, entendi.

Entao se eu falar no dia da homologacao que o banco de dados é inacessivel por fora da aplicacao. Como por exemplo, um servidor FreeBSD que tem um banco de dados postgres onde o unico jeito de acessar é atraves da aplicacao. O homologador vai simplesmente fazer essa observação no meu laudo, e pular os testes do bloco VII?

O que vc acha?

Ele vai tentar acessar e procurar formas de fazer isso, eles já tem uma ideia de quais podem e quais não podem, o postgress por exemplo é um banco que possui gerenciador de acesso e senha então não vão aceitar isso, mas uma aplicação que possua banco de dados próprio inacessível de qualquer forma que não seja a aplicação que a utiliza, essa sim vai ter uma observação no laudo e os testes serão pulados.

Eu já vi isso acontecer com aplicativos cobol usando bases de dados próprias e até em delphi mesmo, mas o programador criou toda a estrutura de dados em formato próprio inacessível por fora da aplicação.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

Entendi o que vc quis dizer.

Mas acho que isso é meio insensato... Se eu estou fazendo uma declaração que em hipotese algum o usuario do sistema terá acesso ao banco de dados, ou mesmo acesso à um usuario do banco com permissao alterar, pra que ficar insistindo na hipotese que o usuario do sistema vai abrir o banco de dados e modificar os dados?

Tem senha e permissao no banco de dados para nao acontecer esse tipo de coisa, não?

Entendo que a moral do requisito é evidenciar e não barrar. Mas se eu to falando que ESTÁ barrado, nao precisaria evidenciar...

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Agora eu volto a pergunta a você, tem certeza mesmo que o seu banco de dados é inviolável? eu conheço forma de obter acesso administrador a praticamente todos os BDs do mercado hoje, comercial ou não comercial. Como você tem certeza que está barrado? e se não estiver, não seria o caso de evidenciar isso?

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

Mas ai cai naquilo que vc disse: nada é impossivel, nem mesmo o usuario descobrir qual hash que vc esta fazendo e forja-lo direto no banco...

Desse jeito tbm nao daria para evidenciar...

Mas tudo bem, já me convenci que vou ter que fazer, mesmo achando ilógico...

Só que agora vc me despertou uma curiosidade. Como vc consegue acessar um banco postgres como administrador sem ter a senha?

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 4072 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.