Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > Не могу создать пользователя в MySQL


Автор: Vahgo 1.5.2007, 18:55
Столкнулся со странной проблемой - не могу создать пользователя... Пробовал, используя GRANT и напрямую - безуспешно. Даж ошибку конкретно не выдает, тока "DBD::mysql::db prepare warning: файл, 10 строка" + "Error: файл, 10 строка". Вот, непосредственно, код:

Вариант с GRANT:

Код

use strict;
use DBI;
use warnings;

my $user_name = "user";
my $DB_name = "test";
my $user_pass = "secret";
my $dbh = DBI->connect("DBI:mysql:mysql",'root','xxx') || 
        die "Connecting error: DBI::errstr";
my $sth = $dbh->prepare("GRANT SELECT,INSERT ON $DB_name TO $user_name\@localhost IDENTIFIED BY \'$user_pass\'") ||
        die "Error: $dbh->errstr";
$sth->execute;
$sth->finish();
$dbh->disconnect();


Та же самая команда при наборе в шеле MySQL работает.

Вариант с INSERT:

Код

use strict;
use DBI;
use warnings;

my $user_name = "user";
my $DB_name = "test";
my $user_pass = "secret";
my $dbh = DBI->connect("DBI:mysql:mysql",'root','xxx') || 
        die "Connecting error: DBI::errstr";
my $sth = $dbh->prepare("INSERT INTO user (Host,User,Password)
            VALUES ('localhost',$user_name,PASSWORD($user_pass))") || die "Error: $DBI::errstr";
$sth->execute;
$sth = $dbh->prepare("INSERT INTO db (Host,Db,User,Select_priv,Insert_priv) 
            VALUES ('localhost',$DB_name,$user_name,'Y','Y')") ||  die "Error: $DBI::errstr";
$sth->execute;
$sth->finish();
$dbh->disconnect();

Заранее спасибо за помощь...

Автор: Бонифаций 2.5.2007, 11:54
а без prepare сделать? скажем

$dbh->do("GRANT ....") or die DBI::errstr


Автор: Vahgo 2.5.2007, 19:31
Ошибка уже содержательнее:
Код

DO: Something wrong while try to prepare query This command is not supported in the prepared statement protocol yet
Error: DBI::db=HASH(0x82ad3f8)->errstr at ... line 12

Эт что значит, GRANT не поддерживается!? Как ж так??!! 

Автор: Бонифаций 3.5.2007, 00:11
Пробуем

Код

use DBI;

$d = DBI->connect("dbi:mysql:test","root") or die DBI::errstr ;
$d -> do("GRANT SELECT,INSERT ON test.* TO w\@localhost IDENTIFIED BY \'mpassw\'") or die DBI::errstr;


Все отработало без ошибок. Какие у вас версии perl, dbd:mysq и mysql ?

Автор: Бонифаций 3.5.2007, 00:33
у меня:

mysql> select version();
+----------------------------+
| version()                  |
+----------------------------+
| 5.0.38-Ubuntu_0ubuntu1-log | 
+----------------------------+
1 row in set (0.00 sec)

# perl -v

This is perl, v5.8.8 built for i486-linux-gnu-thread-multi





Автор: Vahgo 3.5.2007, 19:52
Все точь-в-точь к у тебя smile 
Но, тем не менее, не работает... smile Копировал твою строку с do (на всякий русский случай) - не работает...

Автор: Бонифаций 3.5.2007, 21:31
тэкс. ubuntu то есть... какая версия libdbd-mysql-perl установлено? у меня 3.0002

Автор: Vahgo 3.5.2007, 22:30
А у меня  3.0008-1build1... Это ты к чему?

Автор: Vahgo 4.5.2007, 21:51
Переустановил libdbd-mysql-perl (той же версии) и все заработало. Глюк какой-то... Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)