1

我是 MySql 的新手,无法解决我遇到的问题(谷歌搜索没有给我任何结果)。对于新用户,问题是“用户的错误 1045 访问被拒绝”。

我正在编写一个关于 PHP 的小脚本,它将自动在 MySQL 中创建新数据库并添加两个仅对该数据库具有权限的新用户。这是代码:

$dbh = new PDO("mysql:host=localhost", $root, $rootpass);

使用超级管理员权限连接到 MySQL 服务器。

$dbh->SetAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$dbh->exec("CREATE DATABASE new_db ;
            GRANT ALL PRIVILEGES
            ON new_db.*
            TO new_db_admin@localhost
            IDENTIFIED BY 'password';
            GRANT SELECT 
            ON new_db.*
            TO new_db_guest@localhost
            IDENTIFIED BY 'pass';
            FLUSH PRIVILEGES;"
);

使用此脚本,我想为“new_db”自动创建 2 个新用户。第一个“new_db_admin”在不涉及 MySQL 超级管理员的情况下使用数据库,第二个是让站点的用户连接到数据库。(恕我直言,给访问者“只读”权限是个好主意,因为这将大大降低 SQL 注入的可能性。

创建新数据库并添加新用户后,我使用“new_db_admin”创建与 MySQL 服务器的新连接并添加新表。在这个级别上,一切都很好。从任何用户(new_db_admin、new_db_guest)连接到 MySQL 服务器都没有问题。

但是在重新启动 MySQL 服务器或重新启动我的 PC 后,我有“用户 new_db_admin@localhost 的错误 1045 访问被拒绝”。使用另一个新用户“new_db_guest”访问 MySQL 效果很好。

我试图只创建一个用户管理员或访客。但是在重新启动 MySQL 服务器后,我得到了相同的“用户 new_db_admin@localhost 的错误 1045 访问被拒绝”,或者如果它只创建来宾:“用户 new_db_guest@localhost 的错误 1045 访问被拒绝”。MySQL 服务器的超级管理员在所有情况下都很好。

有人可以帮我解决这些麻烦。我需要一个决定,允许我自动为这个数据库创建新数据库和新用户,而不会在将来遇到麻烦。

任何帮助将不胜感激 !

这是我用来通过 coomand 行在 MySQL 中创建用户的代码。

CREATE USER 'ADMIN'@'HOSTNAME' IDENTIFIED BY 'admin-pass';
SET PASSWORD FOR 'ADMIN'@'HOSTNAME' = PASSWORD('admin-pass');

GRANT ALL PRIVILEGES 
ON 'DBNAME'.*
TO 'ADMIN'@'HOSTNAME'
IDENTIFIED BY 'admin-pass';

CREATE USER 'GUEST'@'HOSTNAME' IDENTIFIED BY 'guest-pass';
SET PASSWORD FOR 'GUEST'@'HOSTNAME' = PASSWORD('guest-pass');

GRANT SELECT
ON 'DBNAME'.*
TO 'GUEST'@'HOSTNAME'
IDENTIFIED BY 'guest-pass';

FLUSH PRIVILEGES;
4

1 回答 1

0

新编辑:

还可以尝试在授权语句之后执行“刷新特权”。

http://dev.mysql.com/doc/refman/5.0/en/privilege-changes.html


尝试将授予 SQL 拆分为创建用户,然后授予。我知道你可以用另一种方式编写它,但只要看看它是否有帮助,即使只是为了调试。

就像是:

CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
GRANT ALL ON db1.* TO 'jeffrey'@'localhost';

http://dev.mysql.com/doc/refman/5.1/en/grant.html


于 2013-09-20T01:07:58.110 回答