首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mariadb,PHP7 -不能授予所有数据库特权

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

Stack Overflow用户
提问于 2019-08-22 19:01:15
回答 3查看 163关注 0票数 0

在我的PHP代码中,我尝试了这个指令的各种迭代:

代码语言:javascript
复制
        $dbc->exec("CREATE DATABASE $dbName;
                    CREATE USER '$user'@'%' IDENTIFIED BY '$pass';
                    GRANT ALL ON $dbName.* to '$user'@'%' IDENTIFIED BY '$pass';
                    FLUSH PRIVILEGES;")

而且,通过迭代,我的意思是调整db特权值:

  • $dbName.*
  • $dbName.*
  • $dbName
  • ‘$dbName’*
  • 等等..。

对于所有的尝试,我的结尾都是使用GRANT使用语句创建的用户,以及与目标数据库($dbName)不绑定(关联)的用户。

唯一一次,也是唯一一次,我成功地将特权级别更改为*.*,为这个用户授予所有数据库的所有权限,而我正试图避免这种情况;我只想将授予权限限制在指定的数据库上。相反,当我执行“授予全部”或“授予所有特权”时,每次都会得到此结果:

代码语言:javascript
复制
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表中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-08-23 18:32:39

此查询组合适用于我:

代码语言:javascript
复制
            $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之外,这正是我真正需要的。在全球范围内,新用户仍然具有“使用”级别的权限,这也是可取的。

谢谢你的提问和帮助--这让我的大脑兴奋起来--开始尝试不同的事情!

票数 0
EN

Stack Overflow用户

发布于 2019-08-22 22:50:27

代码语言:javascript
复制
'$user'@'%'
'someAdmin'@'localhost'

'%'不包括'localhost',而是包含所有其他内容。

正常的模式是

代码语言:javascript
复制
CREATE USER            'user'@'...' IDENTIFIED BY '...';
GRANT ALL ON 'db'.* TO 'user'@'...';
                       ^^^^^^^^^^^^
                       These must match exactly.

(在过去,GRANTCREATE用户;在未来(MySQL 8.0)不会。MariaDB可能最终会朝这个方向发展。)

至于ON 'db'.*,可以选择引用dbname。(如果没有引用,请注意某些标点符号。)*是一张外卡,意思是“所有的数据库”。

我认为这个上下文允许引用双引号、单引号或反向引号。

票数 0
EN

Stack Overflow用户

发布于 2021-10-11 11:58:07

您试过删除"%“吗?

添加本地主机也更好。See this SO

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57615630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档