mariadb, PHP7 -- 不能授予所有数据库权限

在我的 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 表中。


幕布斯7119047
浏览 205回答 2
2回答

拉丁的传说

这个查询组合对我有用:            $dbc->exec("CREATE DATABASE $dbName;                         CREATE USER '$user'@'$host' IDENTIFIED BY '$pass';                         GRANT ALL PRIVILEGES ON $dbName.* to '$user'@'$host' IDENTIFIED BY '$pass';                         FLUSH PRIVILEGES;")用户使用通配符:{$dbname}权限绑定到新创建的数据库。深入挖掘,我看到用户拥有所有能力,包括在新数据库中创建索引和 db 对象的能力,除了授予,这是我真正需要的。在全球范围内,新用户仍然具有“使用”级别的权限,这也是可取的。感谢您的问题和帮助 - 它让我的大脑开始尝试不同的事情!

HUWWW

'$user'@'%''someAdmin'@'localhost''%'并没有包括'localhost',而是一切。正常模式是CREATE USER            'user'@'...' IDENTIFIED BY '...';GRANT ALL ON 'db'.* TO 'user'@'...';                       ^^^^^^^^^^^^                       These must match exactly.(在过去,GRANT将CREATE用户;在未来(的MySQL 8.0),它不会MariaDB的大概会是最终的方向。)至于ON 'db'.*,dbname 是可选的。(如果没有引用,那么要注意某些标点符号。)这*是一个通配符,意思是“所有那个 db”。我认为这个上下文允许使用双引号、单引号或反引号来引用。
打开App,查看更多内容
随时随地看视频慕课网APP