Segurança

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 :)
 
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
 
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 :)
 
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
 
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 :)
 
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
 
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 :)
 
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
 
Resultou maravilha muito obrigado :)

Agora tenho de trabalhar no restauro dos backups.

Bandalho_zune - falas na função shell?

Muito obrigado :)
 
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 TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_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 :)
 
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
 
Uma duvida que me surgiu:

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


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 :)
 
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
 
Back
Topo