привилегии предоставления perl DBI - PullRequest
0 голосов
/ 31 октября 2011

Пожалуйста, помогите понять, что я здесь делаю не так.Я полагаю, что сбежать неправильно, но я не могу найти работоспособный пример в Google.

my $host = "localhost";
my $port = "3306";
my $user = "root";
my $pass = "111";
my $db_name = "test";
my $db_user = "test";
my $db_pass = "test";

my $dsn = "dbi:mysql::$host:$port";
my $dbh = DBI->connect($dsn, $user, $pass) or die "Unable to connect: $DBI::errstr\n";

$dbh->do("CREATE DATABASE $db_name");
$dbh->do("CREATE USER $db_user\@$host");
$dbh->do("GRANT ALL ON $db_name.* TO $db_user\@$host IDENTIFIED BY $db_pass");

$dbh->disconnect();

Ошибка:

DBD::mysql::db do failed: Operation CREATE USER failed for 'test'@'localhost' at /home/andrew/sandbox/script.pl line 42.
DBD::mysql::db do failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'test' at line 1 at /home/andrew/sandbox/script.pl line 43.

Спасибо за ответы.

Ответы [ 2 ]

1 голос
/ 31 октября 2011

Вам необходимо указать пароль.

$dbh->do("GRANT ALL ON $db_name.* TO $db_user\@$host IDENTIFIED BY '$db_pass'");
                                                                   ^        ^

Хотя, конечно, подготовленные операторы / параметры были бы намного лучше (если бы MySQL разрешил их здесь, в этом я не уверен на 100%).

Вы должны также заключить в кавычки $db_user и $host (опять же, при условии, что параметры не работают).

Если параметры работают:

$dbh->do(q{GRANT ALL ON ?.* TO ?@? IDENTIFIED BY ?}, {}, $db_name, $db_user, $host, $db_pass);

Я вполне уверен, что параметры будут работать с паролем и, вероятно, также с пользователем и хостом. Имя базы данных, я не уверен в этом. Возможно, вам просто нужно вставить это в quote_identifier.

edit: Вы должны просто ударить линию CREATE USER полностью. Предоставление разрешений создаст пользователь (и с паролем).

0 голосов
/ 31 октября 2011

Похоже, вы пытаетесь создать пользователя каждый раз, когда запускаете скрипт - я получаю именно эту ошибку, если пытаюсь создать пользователя более одного раза.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...