在我的 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 表中。
2 回答
拉丁的传说
TA贡献1789条经验 获得超8个赞
这个查询组合对我有用:
$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
TA贡献1874条经验 获得超12个赞
'$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”。
我认为这个上下文允许使用双引号、单引号或反引号来引用。
- 2 回答
- 0 关注
- 197 浏览
添加回答
举报
0/150
提交
取消