среда, 15 декабря 2010 г.

Создание пользователя root в MySQL

Ставил ispCP Omega. При установке была бага с преднастройщиком Postfix

hosting:/usr/local/src/ispcp/ispcp-omega-1.0.7# aptitude install $(cat ./docs/Debian/debian-packages-`lsb_release -cs`)





    ┌──────────────────────────────────┤ Postfix Configuration ├──────────────────
    │                                                                                 
    │                                  Bad recipient delimiter                        
    │                                                                                 
The recipient delimiter must be a single character. 'question skipped' is        
what you entered.  
    │                                         OK                                      │                                                                                 │ 
    └─────────────────────────────────────────────────────────────────────────────




Вообщем я много раз жал ентер, и одноременно Ctrl+С, таким образом остановил установку, далее забутался. Потом анологично повтрил усаановку, и когда меня преднастройщи Postfix спрашивал о hostname FQDN,  на повторный вопрос я ответил нет. Устанока продолжилась...
Далее када все поставилось я перешел к этапу конифигурирования базы. Вот тут и вылезла проблема с отсутствием пользователя root.


debconf-show postfix



Есть база данных. Не заходит под root. Что делать?
Идем в  /etc/mysql/debian.cnf и видим что при устаноки базы по умолчанию создался логин и пароль. Заходим. 
hosting:/usr/local/src/ispcp/ispcp-omega-1.0.7# cat /etc/mysql/debian.cnf
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = CGsdvZpFplfMHq9R
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
user     = debian-sys-maint
password = CGsdvZpFplfMHq9R
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

hosting:~# mysql -u debian-sys-maint -p
Enter password: CGsdvZpFplfMHq9R
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 34
Server version: 5.0.51a-24+lenny4 (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

Выбираем бузу mysql
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

Смотрим таблицу user
mysql> select * from user;
+-----------+------------------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+
| Host      | User             | Password                                  | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections |
+-----------+------------------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+
| localhost | debian-sys-maint | *B0EB27A689F6C17DCA846AEA8DF794B21493B4A3 | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                | N                | N              | N                   | N                  | N                |          |            |             |              |             0 |           0 |               0 |                    0 | 


Как видно пользователя root нет. При установке система по каим-то причинам его не создала, поэтому его нада создать вручную, чем мы сейчас и займемся. 
Стандартным методом GRANT ALL PRIVILEGES создать не получиться:

mysql> GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY '123' WITH GRANT OPTION;
ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)

Повидемому нашему, по умолчанию, созданному ситемой пользователю debian-sys-maint не хватает прав на команду GRANT ALL PRIVILEGES.
Мы видем что почти под всеми привелегиями стоит Y а под некоторыми N
 Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv 
N                              N                                    N                              N                          N

Под параметром Create_user_priv  стоит N, поэтому мы и не можем создать для root'а, либо любого другого пользователя привелегии с помощью команды GRANT. Однако разрешенная привелегия Insert_priv позволяет нам вставить привелегии. Поэтому прибегним к хитрости. Создадим пользователя другой командой:

INSERT INTO user (Host,User,Password,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Reload_priv,Shutdown_priv, Process_priv,File_priv,Grant_priv,References_priv,Index_priv,Alter_priv,Show_db_priv,Super_priv,Create_tmp_table_priv,Lock_tables_priv, Execute_priv,Repl_slave_priv,Repl_client_priv,Create_view_priv,Show_view_priv,Create_routine_priv,Alter_routine_priv,Create_user_priv,max_questions,max_updates,max_connections,max_user_connections) VALUES ('localhost','root',PASSWORD('123'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','0','0','0','0');

Это все одна команда в одну строчку! на конце на забываем знак ;

Итак, мы добавляем в базе mysql в таблицу user суперпользователя root
Всего в таблице user 37 столбцов:
№1-3. Первые три это как видно Host- это домен откуда разрешаем заходить,его значение localhost. User это root. Потом идет пароль 123. 
№ 4-29. Далее идут привелегии я насчитал 26 шт. Select_priv,Insert_priv и т.д. из которых пользователю debian-sys-maint по умалчанию созданому системой разрешены только  21, кроме последних 5 помеченных N. Мы же в свою очередь создаем все привелегии со значением  
№ 30-33. Далее пропускаем 4 значения для  ssl_type | ssl_cipher | x509_issuer | x509_subject  (видно пустые солбцы)
№ 34-37. Для последних четырех столбцов указываем четыре нуля.

Затем чтобы привилегии вступили в силу выполняем команду:
mysql> FLUSH PRIVILEGES;

Позже паролшь можно будет сменить камандами:
mysql> UPDATE user SET Password=PASSWORD('123') WHERE User='root' and Host='localhost';
mysql> FLUSH PRIVILEGES;

И перезапускаем базу:
hosting:~# /etc/init.d/mysql restart
Stopping MySQL database server: mysqld.                                                                                      
Starting MySQL database server: mysqld.                                                                                      
Checking for corrupt, not cleanly closed and upgrade needing tables..

Проверив таиблицу user увидем что во всех столбцах с привелегиями стоят Y:
mysql> select * from user;
| localhost | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                | Y                | Y              | Y                   | Y                  | Y                |          |            |             |              |             0 |           0 |               0 |                    0 | 

Поздровляю root создан!
Надеюсь Вам поможет. Сам не один час бился вот по этим ссылкам:


aka_delix