我是 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;