Server version: 5.0.37 FreeBSD port: mysql-server-5.0.37Сабж.
Описываю: пользователь user_name с доступом только к базе вида data_base может создать и базу data?base
В таблицах db и user базы mysql нет ни малейшего намёка на data?base а только data_base В таблице user базы mysql у пользователя username стоит No по всем правам, доступ определяется только в таблице db и только к одной единственной базе. Вот show grants под пользователем:
GRANT USAGE ON *.* TO 'user_name'@'192.168.1.10' IDENTIFIED BY PASSWORD 'qwerty'
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES ON `data_base`.* TO 'user_name'@'192.168.1.10'Причём, такая ерунда по всем логинам\базам с символом подчёркивания.
В какую сторону копать и гуглить?
А в таблице mysql.user у него нет случайно глобальных привелегий?
>А в таблице mysql.user у него нет случайно глобальных привелегий?Нет никаких. И он не может создать какие-то другие базы, только такую же как у него есть но с заменой "_" на "?" Есть подозрение, что MySQL позволяет заменять этот символ.
Вот выборка из user по нему:
select * from user where user like 'user_name';
| 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 || 192.168.1.10 | user_name | qwerty | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | | | | | 0 | 0 | 0 | 0 |
А вот выборка из db
select * from db where user like 'user_name';
| Host | Db | User | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Create_tmp_table_priv | Lock_tables_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Execute_priv || 192.168.1.10 | date_base | user_name | Y | Y | Y | Y | Y | Y | N | N | Y | Y | N | Y | N | N | N | N | N |
В базе mysql я более нигде не нашёл ни хост 192.168.1.10 ни юзера user_name
Ведь было написано что нет. Для проверки создал аналогичное у себяselect * from mysql.user where user='user_name'\G
*************************** 1. row ***************************
Host: %
User: user_name
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
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0Проблему подтверждаю в Server version: 5.0.51a-6 (Debian). Надо бы сходить в их багзиллу, но лень.
>Server version: 5.0.37 FreeBSD port: mysql-server-5.0.37
>В какую сторону копать и гуглить?Всё, всем спасибо, разобрался...
http://dev.mysql.com/doc/refman/5.0/en/grant.html
The “_” and “%” wildcards are allowed when specifying database names in GRANT statements that grant privileges at the global or database levels. This means, for example, that if you want to use a “_” character as part of a database name, you should specify it as “\_” in the GRANT statement, to prevent the user from being able to access additional databases matching the wildcard pattern; for example, GRANT ... ON `foo\_bar`.* TO ....
То есть в mysql.db база data_base должна быть экранирована т.е. date\_base Также это желательно и с юзером сделать.
Интересный момент, никогда не обращал внимания, может потому что ни разу не понадобилось создавать/использовать базу данных с _ в имени.
>Интересный момент, никогда не обращал внимания, может потому что ни разу не
>понадобилось создавать/использовать базу данных с _ в имени.Я тоже. Видимо потому что я обычно пользую phpMyAdmin, он пади это дело на автомате фиксит.