Нека погледнем отблизо нещата по-добре. Първата уловима разлика показва различни версии на MySQL сървър спрямо другата система.
Команда
mysql --version
изпълнена в терминала, съобщава, че под Ubuntu 10.04 разполагам с версия 5.1.70.
Същата команда изпълнена в LinuxMint 14 отговаря 5.5.32.
Пълният списък от опции на 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 и отново добре дошъл.
Повторих действията си под Ubuntu 10.04 и тук всичко бе по местата си. Ясно се вижда, как MySQL ме реже.
ОК. Нека сведем нещата до общ вид и видим възможностите на този потребител. Отново набираме команда
mysql
в LinuxMint 14, а след нея
SHOW DATABASES;
Става ясно, че този потребител вижда само една база данни дошла от инсталацията на MySQL. Опит за създаване на нова база данни
CREATE DATABASE `db_name`
или пълния синтаксис на командата
води до неуспех и следния отговор:
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'db_name'Отлично. Пипнахме го! Някакъв анонимен user ' ', комуто са дадени права само за информативно четене. Този потребител е създаден от инсталацията. Дадена му е възможност за връзка с MySQL, един вид тест, че сървъра работи. На свой ред е желателно да го изтрием, особено ако преминем в production режим.
От напомнените теми в началото знаем, че инсталацията на MySQL се проведе под системни администраторски права и за супер потребител ни бе посочен root, на когото назначихме парола.
Да влезем под неговата регистрация в MySQL и свършим замисленото. Излизаме и отново влизаме с потребителско име root и парола му, след което преглеждаме списъка с база данни.
- exit
- mysql -u root -p -h localhost
- 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;
Пробваме отново да влезем с анонимния акаунт и получаваме отказ.
Отлично! Свършихме половината работа. Нека свършим останалата до край.
Отново се логваме като 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 сървъра. Замисълът се свежда до проста команда.
За случая ще използвам име 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 може да бъзика само база данни db_test. Следва да се създадат таблици и добави съдържание, за съответния проект, което ще направим в бъдеща среща.
За тези, които не им стана ясно и не могат без GUI-приложение показвам снимки от phpMyAdmin.
И преди раздяла едно важно уточнение.
При логване в 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 име_на_база_данни и задължително ще ви поиска парола на следващия ред, която няма да се вижда. Въпрос на вкус и параноя как ще се ползвате монитора.
до нови срещи ^.^
0 Response to "MySQL монитор. Създаване на база данни"
Публикуване на коментар