暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

小白学习MySQL - 不同版本创建用户的些许区别

349

MySQL创建用户有很多种方法,例如常规create user,再通过grant,授予权限,还可直接grant连带创建用户和授权一起做了。最近创建过程中,发现不同版本操作有些区别。

MySQL 5.7官方手册,给出了创建用户的操作步骤,

https://dev.mysql.com/doc/refman/5.7/en/grant.html

但实际上,grant带着identified by是可以的,

    mysql> select version();
    +------------+
    | version() |
    +------------+
    | 5.7.32-log |
    +------------+
    1 row in set (0.02 sec)

    mysql> create user test identified by 'test';
    Query OK, 0 rows affected (0.00 sec)

    mysql> grant all privileges on `mysql`.* to 'test'@'%' identified by 'test';
    Query OK, 0 rows affected, 1 warning (0.00 sec)

    mysql> show grants for 'test'@'%';
    +-------------------------------------------------+
    | Grants for test@% |
    +-------------------------------------------------+
    | GRANT USAGE ON *.* TO 'test'@'%' |
    | GRANT ALL PRIVILEGES ON `mysql`.* TO 'test'@'%' |
    +-------------------------------------------------+
    2 rows in set (0.00 sec)
    复制

    MySQL 8.0官方手册上,给出的操作步骤基本和5.7是相同的,

    https://dev.mysql.com/doc/refman/8.0/en/grant.html

    但是执行的时候,grant如果加上identified by,就会提示语法存在错误,

      mysql> select version();
      +-----------+
      | version() |
      +-----------+
      | 8.0.23 |
      +-----------+
      1 row in set (0.00 sec)

      mysql> create user test identified by 'test';
      Query OK, 0 rows affected (0.01 sec)

      mysql> grant all privileges on `mysql`.* to 'test'@'%' identified by 'test';
      ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by 'test'' at line 1
      复制

      其实这对create user和grant分开执行的场景没什么影响,无非是多个少个identified by的问题,但是如果通过grant将创建用户和授权一起执行的场景,就会有些影响,例如5.7中,可以通过grant达到创建用户和授权的效果,当然,这个受sql_mode中的参数NO_AUTO_CREATE_USER的控制,如果指定了,就是允许如下的操作,

        mysql> grant all privileges on `mysql`.* to 'testdb'@'%' identified by 'testdb';
        Query OK, 0 rows affected, 1 warning (0.01 sec)

        mysql> show grants for 'testdb'@'%';
        +---------------------------------------------------+
        | Grants for testdb@% |
        +---------------------------------------------------+
        | GRANT USAGE ON *.* TO 'testdb'@'%' |
        | GRANT ALL PRIVILEGES ON `mysql`.* TO 'testdb'@'%' |
        +---------------------------------------------------+
        2 rows in set (0.00 sec)
        复制

        但是8.0中,这个操作,就会提示错误,

          mysql> grant all privileges on `mysql`.* to 'testdb'@'%' identified by 'testdb';
          ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by 'testdb'' at line 1
          复制

          这个应该和8.0的特性相关,如文档所说,从8.0.11开始,就删除了sql_mode中NO_AUTO_CREATE_USER参数,

          https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html

          因此对他来说,这是正常现象。至于设计原因,我猜还是想让用户创建的过程更标准、更加原子性,一个操作,就做一件事,出错的几率,就更可控。

          小白学习MySQL,

          小白学习MySQL - 随机插入测试数据的工具

          小白学习MySQL - varchar类型字段为什么经常定义成255?

          小白学习MySQL - 变通创建索引的案例一则

          小白学习MySQL - “投机取巧”统计表的记录数

          小白学习MySQL - 一次慢SQL的定位

          小白学习MySQL - TIMESTAMP类型字段非空和默认值属性的影响

          小白学习MySQL - 聊聊数据备份的重要性

          小白学习MySQL - InnoDB支持optimize table?

          小白学习MySQL - table_open_cache的作用

          小白学习MySQL - 表空间碎片整理方法

          小白学习MySQL - 大小写敏感问题解惑

          小白学习MySQL - only_full_group_by的校验规则

          小白学习MySQL - max_allowed_packet

          小白学习MySQL - mysqldump保证数据一致性的参数差异

          小白学习MySQL - 查询会锁表?

          小白学习MySQL - 索引键长度限制的问题

          小白学习MySQL - MySQL会不会受到“高水位”的影响?

          小白学习MySQL - 数据库软件和初始化安装

          小白学习MySQL - 闲聊聊

          近期更新的文章:

          最近碰到的问题

          Linux进程信息的检索

          OCR解析健康宝图片

          MySQL和Oracle在索引名称唯一性方面的不同设计

          Linux环境监控工具基础参考


          文章分类和索引:

          公众号900篇文章分类和索引

          文章转载自bisal的个人杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论