在我的 PHP 代码中,我尝试了该指令的各种迭代:
$dbc->exec("CREATE DATABASE $dbName;
CREATE USER '$user'@'%' IDENTIFIED BY '$pass';
GRANT ALL ON $dbName.* to '$user'@'%' IDENTIFIED BY '$pass';
FLUSH PRIVILEGES;")
而且,通过迭代,我的意思是调整数据库权限值:
`$dbName`.*
$dbName.*
$dbName
'$dbName'.*
等等...
对于所有尝试,我最终都会得到一个使用 GRANT USAGE 语句创建的用户,并且与目标数据库 ($dbName) 没有绑定(关联)。
我唯一一次成功地使其工作是通过将权限级别更改为 *.* 授予我试图避免的该用户的所有数据库的所有内容;我想将授权仅限于指定的数据库。相反,当我执行 GRANT ALL 或 GRANT ALL PRIVILEGES 时,每次都以这个结果结束:
MariaDB [(none)]> show grants for someAdmin@localhost;
+-------------------------------------------------------------------------------+
| Grants for someAdmin@localhost
+-------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'someAdmin'@'localhost' IDENTIFIED BY PASSWORD '[snip]' |
+-------------------------------------------------------------------------------+
1 row in set (0.00 sec)
我还尝试在发出命令后重新启动 mariadb,只是为了查看重新启动是否会强制正确的 privs 但不会。
将数据库上的所有权限(带有授予选项)授予新用户 st 的正确 SQL 是什么?用户实际上被授予了对命名数据库的所有权限?
(PHP 7.2、MariaDB 10.1、Ubuntu 18.04)
来自 MariaDB 文档:
使用 *.* 为 priv_level 授予全局权限。全局权限包括管理数据库和管理用户帐户的权限,以及所有表、函数和过程的权限。全局权限存储在 mysql.user 表中。
使用 db_name.* 授予 priv_level 数据库权限,或仅使用 * 使用默认数据库。数据库权限包括创建表和函数的权限,以及数据库中所有表、函数和过程的权限。数据库权限存储在 mysql.db 表中。
拉丁的传说
HUWWW