1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Segurança

Discussão em 'Programação' iniciada por pmaster, 12 de Janeiro de 2009. (Respostas: 17; Visualizações: 918)

  1. pmaster

    pmaster Power Member

    Boa noite a todos.

    Estou a desenvolver uma aplicação de gestão de stocs. Num programa convêm ter segurança por vários motivos. E sendo feito por nós, queremos sempre torná-lo o mais seguro possível. Eu não tenho muita experiencia em programação, e gostava que alguém me ajuda-se neste aspecto.
    Gostava de saber o que aconselham a fazer e aspectos que deva seguir para o fim de ter uma aplicação mais segura.



    Obrigado :)
     
  2. bandalho_zune

    bandalho_zune I'm cool cuz I Fold

    A autenticação dos utilizadores no inicio do programa acho que é indispensável e talvez criar mecanismos que façam cópias de segurança á base de dados...
    Se precisares de ajuda nalguma destas opiniões diz qualquer coisa.



    Cumps
     
  3. pmaster

    pmaster Power Member

    Sugeres um login no inicio? sim eu já fiz isso e encriptei a password..
    Pesso desculpa deveria ter focado isto no inico, mas a nivel de segurança foi só o que fiz.

    Isso de fazer cópias de segurança ás bases de dados é de facto algo de muita importancia!
    Vou pesquisar sobre isso para ver a melhor maneira de fazer os backups.

    Obrigado :)
     
  4. bandalho_zune

    bandalho_zune I'm cool cuz I Fold

    Eu tenho por habito logo no inicio criar um form splash que para alem de apresentar a aplicação efectua um teste á conexão da base de dados, isto evita muitas vezes que a aplicação "estoure" se a conexão não tiver sido feita.
    Quanto ás cópias de segurança ou outra duvida é só dizer.



    Cumps
     
  5. pmaster

    pmaster Power Member

    Uma questão. O backup das bases de dados é feito pelo mysql através de código ou tem de ser através do windows? ou qual a melhor maneira?

    Muito Obrigado :)
     
  6. bandalho_zune

    bandalho_zune I'm cool cuz I Fold

    No meu caso costumo o usar o mysqldump que faz parte da lista de utilitários do mysql.
    Chamas o executável no código e atavés da classe FileStream crias o ficheiro de backup, normalmente *.sql
    Se precisares posso-te dar um exemplo.


    Cumps
     
  7. Aparicio

    Aparicio /dev/mod
    Staff Member

  8. pmaster

    pmaster Power Member

    Bom, pelo que vi o mysql dump é exelente super prático e muito simples.. li num site que para fazer o backup iamos ao prompt e escreviamos:

    C:\mysqldump -u <root> -p <a> BD > BD.sql

    quando faço isto abre uma janela em dos e pede a password. Eu insiro a password e desaparece.. fico sem saber se ficou o backup feito.
    Fiz uma pesquisas no windows com o nome BD e nao me aparece nada..

    Se alguem já usou eu queria saber se é assim que se processe ou onde vai parar o backup.

    Obrigado :)
     
  9. bandalho_zune

    bandalho_zune I'm cool cuz I Fold

    O comando está quase correcto, tens é que dar o caminho para onde ele vai guardar o ficheiro da backup, então seria:
    Código:
    C:\mysql\bin\mysqldump.exe --host=localhost --user=root --password=xxx nome_base_dados > C:\backup.sql
    
    É de notar que neste exemplo parto do principio que o mysqldump.exe se encontra em C:\mysql\bin\

    Mas para a tua aplicação seria mais útil que este comando fosse gerado automaticamente através de código.
    Vai pesquisando sobre o tema e se quiseres posso postar um exemplo.



    Cumps
     
  10. pmaster

    pmaster Power Member

    Resultou maravilha muito obrigado :)

    Agora tenho de trabalhar no restauro dos backups.

    Bandalho_zune - falas na função shell?

    Muito obrigado :)
     
  11. bandalho_zune

    bandalho_zune I'm cool cuz I Fold

    Para executar o comando no código uso a função Process() para chamar o executável (mysqldump.exe).
     
  12. pmaster

    pmaster Power Member

    Já entendi obrigado :)

    Se não fosse abusar queria saber se estou a usar o código correto para fazer o restauro. Pelo que já vi na net estou a proceder correctamente:

    Código:
    C:\mysql\bin\mysqldump.exe --host=localhost --user=root --password=xxx nome_base_dados < C:\
    backup.sql 
    Depois de executar esta linha aparece o seguinte código que me está a parecer que foi feito o restauro com sucesso.

    Código:
    -- MySQL dump 10.11
    --
    -- Host: localhost    Database: login
    -- ------------------------------------------------------
    -- Server version       5.0.51a-community-nt
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
    /*!40103 SET TIME_ZONE='+00:00' */;
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0
    */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
    
    --
    -- Table structure for table `relog`
    --
    
    DROP TABLE IF EXISTS `relog`;
    SET @saved_cs_client     = @@character_set_client;
    SET character_set_client = utf8;
    CREATE TABLE `relog` (
      `username` varchar(45) NOT NULL,
      `ps` varchar(45) NOT NULL,
      PRIMARY KEY  (`username`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    SET character_set_client = @saved_cs_client;
    
    --
    -- Dumping data for table `relog`
    --
    
    LOCK TABLES `relog` WRITE;
    /*!40000 ALTER TABLE `relog` DISABLE KEYS */;
    INSERT INTO `relog` VALUES ('a','a');
    /*!40000 ALTER TABLE `relog` ENABLE KEYS */;
    UNLOCK TABLES;
    /*!40103 SET [email protected]_TIME_ZONE */;
    
    /*!40101 SET [email protected]_SQL_MODE */;
    /*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */;
    /*!40014 SET [email protected]_UNIQUE_CHECKS */;
    /*!40101 SET [email protected]_CHARACTER_SET_CLIENT */;
    /*!40101 SET [email protected]_CHARACTER_SET_RESULTS */;
    /*!40101 SET [email protected]_COLLATION_CONNECTION */;
    /*!40111 SET [email protected]_SQL_NOTES */;
    
    -- Dump completed on 2009-01-14 17:58:07
    
    C:\Programas\MySQL\MySQL Server 5.0\bin>mysqldump.exe --host=localhost --user=ro
    ot --password=xxx login < C:\backup.sql 
    Mas não faz restauro nenhum porque eu altero a BD e fasso o backup, e insiro texto na BD para ver se realmente faz o restauro. Quando faço o restauro a BD fica sempre igual nao altera nada.

    Não sei se me fiz entender.. muito obrigado pela atenção e ajuda :)
     
  13. bandalho_zune

    bandalho_zune I'm cool cuz I Fold

    O comando mais uma vez esta quase correcto apenas tens que reparar que o mysqldump apenas faz o dump da base de dados e não o contrario, para isso usas mesmo o mysql.exe, ex:
    Código:
    C:\mysql\bin\mysql.exe --host=localhost --user=root --password=xxx nome_base_dados < C:\
    backup.sql
    


    Cumps
     
  14. pmaster

    pmaster Power Member

    EIII que espetáculo funcionou 5*!!

    Muito Obrigado Bandalho_zune pela atenção Obrigado ;)
     
  15. bandalho_zune

    bandalho_zune I'm cool cuz I Fold

    Sempre ás ordens :)


    Cumps
     
  16. pmaster

    pmaster Power Member

    Uma duvida que me surgiu:


    Mas se só chamas o executavel ele nao faz nada pois não? Como passas os outros parametros?

    Desculpa não ter perguntado antes mas quando estava a tentar, pensei que pelo pront do windows dava e assim com a função shell tinha o problema resolvido, mas como não funciona pus me a pensar e lembreime desta duvida.

    Obrigado :)
     
  17. bandalho_zune

    bandalho_zune I'm cool cuz I Fold

    Não é assim tão linear, tens que usar o ProcessStartInfo() para lhe passar os argumentos, eu dou-te um exemplo:
    Código:
    public static string Backup(string _Path)
            {
                string FinalPath = "";
                try
                {
                    string path = "";
                    if (_Path == "")
                    {
                        path = AppDomain.CurrentDomain.BaseDirectory + @"\Backups\";
                    }
                    else
                    {
                        path = _Path + "\\";
                    }
                    DateTime tms = System.DateTime.Now;
                    string FileName = "ProgramaXPTO_" + tms.Day.ToString() + tms.Month.ToString() + tms.Year.ToString() + "_" + tms.Hour.ToString() + tms.Minute.ToString() + tms.Second.ToString() + ".sql";
                    FinalPath = path + FileName;
    
                    FileStream StreamDB = new FileStream(FinalPath, FileMode.Create, FileAccess.Write);
                    using (StreamWriter SW = new StreamWriter(StreamDB,Encoding.Default))
                    {
                        ProcessStartInfo proc = new ProcessStartInfo();
                        string cmd = " --host=localhost --user=root --password=xxxx nome_base_dados";
                        proc.FileName = "C:\\mysql\\bin\\mysqldump.exe";
                        proc.RedirectStandardInput = false;
                        proc.RedirectStandardOutput = true;
                        proc.UseShellExecute = false;
                        proc.WindowStyle = ProcessWindowStyle.Minimized;
                        proc.Arguments = cmd;
                        proc.CreateNoWindow = true;
                        Process p = Process.Start(proc);
                        
                        SW.Write(p.StandardOutput.ReadToEnd());
                        p.WaitForExit();
                        p.Close();
                        SW.Close();
                        StreamDB.Close();
                    }
                }
                catch (Exception ex)
                {
                    ex.Data.Clear();
                }
                return FinalPath;
            }
    
    Neste método das-lhe o caminho onde guardar a cópia de segurança ou então deixas vazio e ele guarda na pasta backups na raiz da tua aplicação.
    Se tiveres dúvidas acerca de alguma coisa deste código é só dizer!


    Cumps
     
  18. pmaster

    pmaster Power Member

    Hum já entendi! perfeito!

    Muito Obrigado Bandalho-zune :)
     

Partilhar esta Página