在我的PHP代码中,我尝试了这个指令的各种迭代:
$dbc->exec("CREATE DATABASE $dbName;
CREATE USER '$user'@'%' IDENTIFIED BY '$pass';
GRANT ALL ON $dbName.* to '$user'@'%' IDENTIFIED BY '$pass';
FLUSH PRIVILEGES;")而且,通过迭代,我的意思是调整db特权值:
$dbName.*对于所有的尝试,我的结尾都是使用GRANT使用语句创建的用户,以及与目标数据库($dbName)不绑定(关联)的用户。
唯一一次,也是唯一一次,我成功地将特权级别更改为*.*,为这个用户授予所有数据库的所有权限,而我正试图避免这种情况;我只想将授予权限限制在指定的数据库上。相反,当我执行“授予全部”或“授予所有特权”时,每次都会得到此结果:
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,但不强制。
将数据库上的所有特权(带有授予选项)授予新用户s.t的正确SQL是什么?实际上,用户在指定的db?上被授予了 all 。
(PHP7.2,MariaDB 10.1,Ubuntu18.04)
来自MariaDB医生: 全局权限是使用*.*为priv_level授予的。全局权限包括管理数据库和管理用户帐户的权限,以及所有表、函数和过程的权限。全局权限存储在mysql.user表中。 数据库特权是使用db_name.*为priv_level授予的,或者仅使用*来使用默认数据库。数据库特权包括创建表和函数的权限,以及数据库中所有表、函数和过程的权限。数据库特权存储在mysql.db表中。
发布于 2019-08-23 18:32:39
此查询组合适用于我:
$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对象的能力,除了grant之外,这正是我真正需要的。在全球范围内,新用户仍然具有“使用”级别的权限,这也是可取的。
谢谢你的提问和帮助--这让我的大脑兴奋起来--开始尝试不同的事情!
发布于 2019-08-22 22:50:27
'$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。(如果没有引用,请注意某些标点符号。)*是一张外卡,意思是“所有的数据库”。
我认为这个上下文允许引用双引号、单引号或反向引号。
发布于 2021-10-11 11:58:07
您试过删除"%“吗?
添加本地主机也更好。See this SO
https://stackoverflow.com/questions/57615630
复制相似问题