Punta de Choros

27 декември 2009

На 2009г й оставаха 120ч съществуване. От календара падна поредния лист с дата 27 декември и към 10.30ч сутринта ме събуди звън от телефона.

Инсталация на Microsoft шрифтове в Ubuntu 16.04

14 януари 2017

нсталация на Microsoft шрифтове в Ubuntu се поражда от идеята браузърите в различните системи, да показват еднакво текстовото съдържанието на интернет страниците.

Ubuntu 16.04 инсталация на USB disk on Key

19 ноември 2016

Арсеналът ми от мобилни компютри съдържа Fujitsu Lifebook AH530. Това е бюджетна машина от 2011г на Intel Core i5-480M процесор и 4GB DDR3 RAM памет.

gparted

Paragon ExtFS for Windows

30 юли 2016

ExtFS for Windows е утилита на Paragon Software разработена през 2013г. Тя представлява решение, предоставящо пълен достъп на четене и на запис до раздели ...

msvcr100.dll is missing Windows 10

04 октомври 2016

Майк Патерсън от Plixer, компания по компютърната сигурност, публикува доклад , че Windows 10 изпраща данни в криптиран вид от вашата машина на всеки пет минути. Той е направил максимума, за да спре изтичането, но системата продължавала да изпраща информация.


Публикация Ubuntu LAMP инсталация показва как се инсталира MySQL сървър в Ubuntu 10.04. Същата идея показва публикация Инсталация на Apache, PHP, MySQL и phpMyAdmin в Lubuntu 12.04_64, с лека уговорка, че системата в последствие бе подменена на LinuxMint 14 (Ubuntu 12.10). Подробности тук.

Нека погледнем отблизо нещата по-добре. Първата уловима разлика показва различни версии на MySQL сървър спрямо другата система.
Команда

mysql --version

изпълнена в терминала, съобщава, че под Ubuntu 10.04 разполагам с версия 5.1.70.

MySQL версия

Същата команда изпълнена в LinuxMint 14 отговаря 5.5.32.

MySQL версия

Пълният списък от опции на MySQL - монитор дава команда

mysql --help

На практика редица опции са дублирани от кратък и пълен начин за изпълнение на команда. Например,

mysql --version

може да се сведе до лаконичното

mysql -V

Забележете, с главна буква, докато с малка

mysql -v

отговаря за Write more. (-v -v -v gives the table output format).

В един прекрасен ден аз се събудих от чуруликане на птички и се заех с MySQL версия под LinuxMint 14. Още сънен вместо голяма буква V напечатах малка v и за мое учудване сървъра изплющя приветствие. Това не ми хареса и набрах начисто отново само

mysql

Ново 20 и отново добре дошъл.

MySQL access enable

Повторих действията си под Ubuntu 10.04 и тук всичко бе по местата си. Ясно се вижда, как MySQL ме реже.

MySQL access denied

ОК. Нека сведем нещата до общ вид и видим възможностите на този потребител. Отново набираме команда

mysql

в LinuxMint 14, а след нея

SHOW DATABASES;

SHOW DATABASES

Става ясно, че този потребител вижда само една база данни дошла от инсталацията на MySQL. Опит за създаване на нова база данни

CREATE DATABASE `db_name`

или пълния синтаксис на командата

CREATE DATABASE IF NOT EXISTS `db_name` CHARACTER SET utf8 COLLATE utf8_general_ci;

води до неуспех и следния отговор:
ERROR 1044 (42000):
Access denied for user ''@'localhost' to database 'db_name'
Отлично. Пипнахме го! Някакъв анонимен user ' ', комуто са дадени права само за информативно четене. Този потребител е създаден от инсталацията. Дадена му е възможност за връзка с MySQL, един вид тест, че сървъра работи. На свой ред е желателно да го изтрием, особено ако преминем в production режим.

От напомнените теми в началото знаем, че инсталацията на MySQL се проведе под системни администраторски права и за супер потребител ни бе посочен root, на когото назначихме парола.

Инсталация на MySQL

Да влезем под неговата регистрация в MySQL и свършим замисленото. Излизаме и отново влизаме с потребителско име root и парола му, след което преглеждаме списъка с база данни.
  1. exit
  2. mysql -u root -p -h localhost
  3. SHOW DATABASES;
SHOW DATABASES

Този път всичко лъсна като тиган на месечина. Няма скрито-покрито. Да килнем анонимното куче и направим нещата профи. Избираме база данни mysql и правим заявка.

USE mysql

Забележете, командата не изисква в края точка с запетая (диалект на MySQL).

Извеждаме списък с таблиците, съдържащи се в база данни mysql

SHOW TABLES;

За отговор получаваме това:
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
24 rows in set (0.00 sec)
Най-отдолу се чете името на таблица user. С команди синоними може да прегледаме полета на таблицата.

SHOW FIELDS FROM user;

SHOW COLUMNS FROM user;

Това упражнение направете на вашата машина. По-интересно е съдържанието на таблицата.

SELECT * FROM user \G

Извадка от отговора показва, че в 5-ти и 6-ти row User-ът е анонимен.
*************************** 5. row ***************************
                  Host: localhost
                  User: 
              Password: 
           Select_priv: N
           Insert_priv: N
           Update_priv: N
           Delete_priv: N
           Create_priv: N
             Drop_priv: N
           Reload_priv: N
         Shutdown_priv: N
          Process_priv: N
             File_priv: N
            Grant_priv: N
       References_priv: N
            Index_priv: N
            Alter_priv: N
          Show_db_priv: N
            Super_priv: N
 Create_tmp_table_priv: N
      Lock_tables_priv: N
          Execute_priv: N
       Repl_slave_priv: N
      Repl_client_priv: N
      Create_view_priv: N
        Show_view_priv: N
   Create_routine_priv: N
    Alter_routine_priv: N
      Create_user_priv: N
            Event_priv: N
          Trigger_priv: N
Create_tablespace_priv: N
              ssl_type: 
            ssl_cipher: 
           x509_issuer: 
          x509_subject: 
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: 
 authentication_string: NULL
*************************** 6. row ***************************
                  Host: proacer
                  User: 
              Password: 
           Select_priv: N
           Insert_priv: N
           Update_priv: N
           Delete_priv: N
           Create_priv: N
             Drop_priv: N
           Reload_priv: N
         Shutdown_priv: N
          Process_priv: N
             File_priv: N
            Grant_priv: N
       References_priv: N
            Index_priv: N
            Alter_priv: N
          Show_db_priv: N
            Super_priv: N
 Create_tmp_table_priv: N
      Lock_tables_priv: N
          Execute_priv: N
       Repl_slave_priv: N
      Repl_client_priv: N
      Create_view_priv: N
        Show_view_priv: N
   Create_routine_priv: N
    Alter_routine_priv: N
      Create_user_priv: N
            Event_priv: N
          Trigger_priv: N
Create_tablespace_priv: N
              ssl_type: 
            ssl_cipher: 
           x509_issuer: 
          x509_subject: 
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: 
 authentication_string: NULL
Оха, пипнахме го по свалени гащи, за което го изтриваме.

DELETE FROM mysql.user WHERE User=' ';
Query OK, 2 rows affected (0.00 sec)
Отлично! Ние сме победители. За финал.

FLUSH PRIVILEGES;

Пробваме отново да влезем с анонимния акаунт и получаваме отказ.

MySQL версия

Отлично! Свършихме половината работа. Нека свършим останалата до край.
Отново се логваме като root и създаваме тестова база данни на име db_test.

CREATE DATABASE db_test

Счита се за добър стил имена на бази, таблици и полета, да се пишат в апострофи (` `), но се разрешава техния пропуск.

Отново преглеждаме списъка с бази данни.

SHOW DATABASES;

И логично списъка е разширен с новодопълнението.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db_test            |
| editor             |
| mysql              |
| phpmyadmin         |
| test               |
| wordpress          |
+--------------------+
7 rows in set (0.00 sec)
Подобен начин на опериране крие риск за сигурността. Потребител root притежава супер права и неговата дискредитация може да доведе до фатални последствия. Узнавайки паролата му, злоумишленик може да напакости. Поради това много по-добре е да се създаде потребител с конкретни права за конкретна база данни и по този начин се ограничи периметъра му на действие из MySQL сървъра. Замисълът се свежда до проста команда.

GRANT ALL PRIVILEGES ON db_test.* TO 'username'@'localhost' IDENTIFIED BY 'password';

За случая ще използвам име johnsmith и парола butterflyman, а след изпълнение на заявката ще видя привилегиите му по следния начин.

SHOW GRANTS FOR 'johnsmith'@'localhost';

Резултат.
+------------------------------------------------------------------------------------------------------------------+
| Grants for johnsmith@localhost                                                                                   |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'johnsmith'@'localhost' IDENTIFIED BY PASSWORD '*3C295F2245E099B1FD99F137D352EA2CC7967865' |
| GRANT ALL PRIVILEGES ON `db_test`.* TO 'johnsmith'@'localhost'                                                   |
+------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

Отново преглеждаме списъка с бази данни.

johnsmith@localhost

Вижда се, че johnsmith може да бъзика само база данни db_test. Следва да се създадат таблици и добави съдържание, за съответния проект, което ще направим в бъдеща среща.

За тези, които не им стана ясно и не могат без GUI-приложение показвам снимки от phpMyAdmin.

johnsmith@localhost

johnsmith@localhost

И преди раздяла едно важно уточнение.
При логване в mysql, параметър -u уточнява името на потребителя. Няма значение дали ще напишете името слято с параметъра или чрез пробел.

mysql -u user_name

mysql -uuser_name

Нюансът настъпва при параметър -p. Той изисква парола на потребителя. Ако не желаете да бъде виждана от човек, стоящ зад гърба ви пропуснете въвеждането и на следващия ред мониторът ще я поиска, без да реагира на въведените символи. Дори звездички няма да се появят, за да скрие броя символи на вашата парола.

mysql -u user_name -p

Слято с параметъра, например, парола 123456 ще изглежда так.

mysql -u user_name -p123456

Но, има едно но, ако след параметър -p се въведе име, мониторът ще ги приеме за име на база данни и ще ви отведе при нея. Така постъпих при последния пример.

mysql -u johnsmith -p db_test

По този начин се съкращава команда USE име_на_база_данни и задължително ще ви поиска парола на следващия ред, която няма да се вижда. Въпрос на вкус и параноя как ще се ползвате монитора.






до нови срещи   ^.^
05.10.2013 profruit 

0 Response to "MySQL монитор. Създаване на база данни"

Публикуване на коментар

Този блог е реинкарнация на първите ми опити за споделяне в нета. На времето започнах с къси разкази на преживяното. После се обезсмисли и превърнах блога си в системно радио. Пиша единствено неща, които карат душата ми да живее: Ubuntu, WEB, Photoshop, Фотография, Споделено и т.н. Това е моето системно радио, разбирате ли? Моята вълна и вие сте на нея сега.

Архив на блога