具有全局特权的数据库用户无权访问新创建的数据库

Eam*_*onn 7 php mysql

我有一个数据库用户create_db_user,我已经授予了具有特定前缀的数据库的所有权限:

GRANT ALL PRIVILEGES ON 'myprefix\_%'.* TO 'create_db_user'@'localhost' WITH GRANT OPTION;

我有另一个standard_user我授予SELECT, INSERT, UPDATE, DELETE权限的数据库用户帐户.

全局用户执行一个创建新数据库的SQL语句:myprefix_new_db.它似乎没有任何问题(至少没有抛出异常).但是,当它尝试将SIUD权限授予新创建的数据库的标准帐户时,将引发以下异常:

SQLSTATE[42000]: Syntax error or access violation: 1044 Access denied for user 'create_db_user'@'localhost' to database 'myprefix_new_db' @ #0

因此,至少从表面上看,我的全局用户帐户似乎具有足够的权限来创建数据库,但还不足以与之交互.

确切的代码流程如下:

$create_db_user->query(" SET SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO' ");
$create_db_user->execute();

$stmt = ' CREATE DATABASE IF NOT EXISTS ' . $myprefix_new_db . ' DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; ';
$stmt.= ' USE ' . $myprefix_new_db . ';';
$stmt.= $sql_stmt;

$create_db_user->query($stmt);
$create_db_user->execute();

// with or without grant option
$create_db_user->query(" GRANT ALL PRIVILEGES ON  {$myprefix_new_db}.* TO 'create_db_user'@'localhost' WITH GRANT OPTION; ");
$create_db_user->execute();

$sql = " GRANT SELECT, INSERT, UPDATE, DELETE ON `{$myprefix_new_db}`.* TO 'standard_user'@'localhost' ";
$create_db_user->query($sql);
$create_db_user->execute();
Run Code Online (Sandbox Code Playgroud)

我的问题是:我必须做些什么来确保我的create_db_user帐户有足够的权限来做任何动态创建的数据库?或者,我必须做些什么来确保创建数据库后,它包含在全局用户的范围内?

编辑:我有管理员级别的cPanel和WHM访问权限.

小智 1

据我了解,您试图让 create_db_user 授予自己所有权限以及数据库上的 with grant 选项。我不确定是否应该允许。

您能否通过触发器(例如,通过触发器)从具有适当WITH GRANT权限的另一个用户授予create_db_user权限?

祝你好运 :-)