rozlisovanie velkosti pismen v MySQL

Sekcia: Konfigurácia 05.05.2007 | 18:40
xxxx   Návštevník
Ahojte

Mohli by ste mi poradit ako zapnem rozlisovanie velkosti pismen v tabulkach MySQL.

Diki
    • Re: rozlisovanie velkosti pismen v MySQL 05.05.2007 | 21:38
      Avatar Frantisek Klabzuba Debian  Používateľ
      tvoja otazka nedava zmysel, mohol by si ju upresnit? Pravdepodobne mas na mysli nejakeho klienta.
      • Re: rozlisovanie velkosti pismen v MySQL 05.05.2007 | 22:10
        xxxx   Návštevník

        Nazorny priklad. Mam napr. tabulku "users":

        create table users( userID smallint not null auto_increment primary key, nick varchar(20) not null , passwd varchar(30) not null);

        Vytvorim dvoch uzivatelov:

        insert into users set nick='User',passwd='heslo';

        insert into users set nick='user',passwd='heslo';

        Pri vybere prikazom select nick from users where nick='Users'; dostanem vsak obidva nicky. Aj Users a aj users.

        Pochopitelne???

        • Re: rozlisovanie velkosti pismen v MySQL 05.05.2007 | 22:39
          Avatar Frantisek Klabzuba Debian  Používateľ
          o boze, sory, ja som cital "písiem" akoze fonty...
        • Re: rozlisovanie velkosti pismen v MySQL 05.05.2007 | 22:42
          Avatar borg Fedora  Administrátor
          collate je to co hladas
          • Re: rozlisovanie velkosti pismen v MySQL 05.05.2007 | 23:07
            xxxx   Návštevník
            ???
            • Re: rozlisovanie velkosti pismen v MySQL 06.05.2007 | 00:29
              Avatar srigi   Používateľ
              Jasne, pri vytvarani tabulky nastav kazdemy stlpcu aj Collate [radenie] (to je to ako sa usporaduvaju vysledky podla narodnostnych zvyklosti, u nas napr. nasleduje "ch" po "h", v USA po "c") a obmedz requerst tak aby vracal iba jeden vysledok.

              BTW za ziadnych okolnosti neukladaj heslo ako plain-text!!
              • Re: rozlisovanie velkosti pismen v MySQL 06.05.2007 | 14:58
                xxxx   Návštevník
                A v konfiguracii MySQL sa neda zapnut rozlisovanie pisiem?
              • Re: rozlisovanie velkosti pismen v MySQL 06.05.2007 | 17:20
                xxxx   Návštevník
                Mozes napisat priklad vytvorenia tej tabulky? A ako mam ukladat heslo?
                Dik
                • Re: rozlisovanie velkosti pismen v MySQL 06.05.2007 | 18:31
                  Avatar srigi   Používateľ
                  CREATE TABLE `users` (
                  `id`        TINYINT UNSIGNED  NOT NULL AUTO_INCREMENT,
                  `username`  VARCHAR(30)      NOT NULL DEFAULT '',
                  `passwd`    VARCHAR(40)      NOT NULL DEFAULT '',
                  `salt` VARCHAR(10) NOT NULL DEFAULT '',
                  
                  PRIMARY KEY (`id`),
                  UNIQUE KEY `salt` (`salt`),
                  UNIQUE KEY `username` (`username`)
                  
                  ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_slovak_ci;
                  • Re: rozlisovanie velkosti pismen v MySQL 06.05.2007 | 18:43
                    Avatar srigi   Používateľ
                    Pre heslo pouzivam ukladanie otlacku v SHA1. Ma to jednu kozmeticku chybu. Ak dvaja usery zvolia rovnake heslo, do DB sa ulozi aj rovnaky otlacok (hash) hesla. To je neprijemne ak sa jednemu z nich podari naburat k DB a zistit otlacky hesiel vsetkych userov. Potom lahko zisti, ze niekto ma rovnake heslo ako on a zneuzije to.

                    Preto sa odporuca pred ulozenim otlacku do DB, heslo vhodne zmiesat s nejakym nahodnym retazcom (salt) a ulozit otlacok tohoto noveho retazca. Zistilo sa, ze obycajne zretezenie hesla a salt je postacujuce.
                    $salt = random_str(10);
                    $hash = sha1($passwd.$salt);
                    
                    $sql_query = "INSERT INTO `users` (`id`, `username`, `passwd`, `salt`) VALUES
                    (NULL, '$login', '$hash', '$salt')";
                    Pri prihlasovani usera potom znova zretazis heslo z formulara a salt z DB a opat vypocitas SHA1 a porovnas s tym z DB.

                    BTW to s tym rozlisovanim velkosti pismen, urob to tak, ze rovnake retazce s roznou velkostou zakazes. Vsetky retazce transformuj na male pismena, a ked novy user pouzije napr. rovnaky nick ale len s inou velkostou pismen, oznamis mu, ze taky nick sa uz pouziva.
                    • Re: rozlisovanie velkosti pismen v MySQL 07.05.2007 | 14:05
                      xxxx   Návštevník
                      JJ. Dik. staci `username` VARCHAR(30) UNIQUE NOT NULL DEFAULT ''. Databaza nepovoli pridanie usera s rovnakym username.
                      • Re: rozlisovanie velkosti pismen v MySQL 07.05.2007 | 17:18
                        Avatar srigi   Používateľ
                        Hlavne pouzi tie triky na ukladanie hesla. Bezpecnost app nadovsetko. Inak rad som poradil.
                        • Re: rozlisovanie velkosti pismen v MySQL 07.05.2007 | 19:10
                          xxxx   Návštevník
                          :D.Dik. Programujes v PHP? Ako dlho?
                          • Re: rozlisovanie velkosti pismen v MySQL 07.05.2007 | 21:19
                            Avatar srigi   Používateľ
                            Robil som nejaku app postavenu na PHP a MySQL.
                            UNIQUE KEY Ti zabezpeci, ze do tabulky nemozes do stlpcu, nad ktorym je zavedena, ulozit roznaky string (neviem preco MySQL neroznava velkost pismen - mal si pravdu). Ja to pouzivam prave na `username` a `salt`.

                            SALT-u som dal tiez podmienku, ze ak funkcia $salt = random_str(10); vygeneruje nahodou taky isty retazec ako je uz v tabulke ulozeny, generujem nove SALT az kym nie je skutocne UNIQUE.

                            Znazornim, co sa stane v tomto pripade. Vygenerujem SALT a pokusim sa ho ulozit do tabulky.
                            /* MySQL data
                              on column `salt`*/
                            ----------------------
                            
                               abc
                               def
                               ghi
                               jkl
                               [ ] <- `abc`
                                |
                                \-----> mysql error code 1062
                            

                            PHP kod:
                            $salt = random_str(10);
                            $hash = sha1($passwd.$salt);
                            
                            $sql_query = "INSERT INTO `users` (`id`, `username`, `passwd`, `salt`) VALUES
                                          (NULL, '$login', '$hash', '$salt')";
                            @$result = mysql_query($sql_query);
                            if (!$result) {
                            
                              // check if errors is because of duplicate entry
                              if (mysql_errno() == 1062) {
                            
                                // yes we have duplicate entry
                                // now we must check if duplicate `salt` or `username`
                            
                                $foo = eregi("'$login'", mysql_error());
                                if ($foo != false) {
                            
                                  // we have duplicate `username`
                                  // tu musis osetrit situaciu, ze user zadal rovnaky nick
                            
                                } else {
                            
                                  // unbelievable, `salt` that app generated, is duplicate entry
                                  // generate new `salt` value until no error
                            
                                  do {
                            
                                    $salt = random_str(10);
                                    $sql_query = "INSERT INTO `users` (`id`, `username`, `passwd`, `salt`) VALUES
                                                  (NULL, '$login', '$hash', '$salt')";
                                    @$result = mysql_query($sql_query);
                                    if (!$result) {
                                      require("./inc.errors/mysql-write.php");
                                      exit;
                                    }
                            
                                  } while (mysql_errno() == 1062);
                            
                            
                                } else {
                            
                                  // some other sort of error, not duplicate entry
                            
                                }
                            
                              } else {
                            
                                // everything went O.K.
                            
                              }
                        • Re: rozlisovanie velkosti pismen v MySQL 07.05.2007 | 19:21
                          xxxx   Návštevník
                          Joj a este ze naco sluzi to UNIQUE KEY
                          • Re: rozlisovanie velkosti pismen v MySQL 07.05.2007 | 22:01
                            xxxx   Návštevník
                            Ta funkcia random_str mi nefunguje(Call to undefined function random_str() in). Treba nejaky balicek PEAR?