Profruit banner

Умен звънец в openHAB

16 декември 2023

Телефонът е винаги с мен и сега, където и да се намирам получавам известие от openHAB, че някой е позвънил и чака пред вратата. А ако ме няма вкъщи става ясно часа и датата на последното позвъняване.

Tasmota Multipress

30 септември 2023

Идеята е Sonoff Touch T1 US 2 в салона, да управлява освен своето осветление и това в кухнята, а още вентилатора.

DIY 12V 1A WiFi Router UPS

22 април 2023

При поредно прекъсване на захранването вкъщи, батерията на нoтбука и двата UPS автоматично превключват на аварийно захранване и едновременно полита съобщение за конфуза

Zigbee2MQTT клониране

21 януари 2023

... как да клонираме съществуваща настройка на Zigbee2MQTT без да се налага последвало интервю на zigbee-устройствата.

LD2410 - бюджетен датчик присъствие в openHAB

11 февруари 2023

Цената на HLK-LD2410 зададе име на поредната тема в моя блог. С негова помощ се постига "народен" датчик присъствие в домашната автоматизация. . ...


Публикация 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 монитор. Създаване на база данни"

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

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

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