美文网首页Linux成长库
阿里云RDS的高权限不是真正的高权限

阿里云RDS的高权限不是真正的高权限

作者: 菩提老鹰 | 来源:发表于2018-08-02 19:06 被阅读5次

    阿里云RDS的高权限不是真正的高权限

    如下图所示在阿里云RDS中升级到了“高权限账号”

    image.png

    但是在实际操作中发现grant 赋权失败,奇怪的是报错ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)
    这个错误一般是因为密码的问题,但是这里能成功登陆密码肯定没有问题

    image.png

    那就继续排查啥情况
    1、先看看当前这个用户的权限 root@'%'

    MySQL [(none)]> show grants for root;
    +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Grants for root@%                                                                                                                                                                                                                                                                                              |
    +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'root'@'%' WITH GRANT OPTION |
    +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)
    

    看上去好像没有问题
    2、看看系统都有哪些用户

    MySQL [(none)]> select user,host from mysql.user ;
    +---------------+-----------+
    | user          | host      |
    +---------------+-----------+
    | demo1         | %         |
    | rds_service   | %         |
    | root          | %         |
    | zabbix        | %         |
    | zentaopms     | %         |
    | aliyun_root   | 127.0.0.1 |
    +---------------+-----------+
    14 rows in set (0.00 sec)
    

    发现除了 高权限root 外还有个一个aliyun_root
    3、排查这个用户权限看看

    MySQL [(none)]> show grants for aliyun_root@'127.0.0.1';
    +----------------------------------------------------------------------------+
    | Grants for aliyun_root@127.0.0.1                                           |
    +----------------------------------------------------------------------------+
    | GRANT ALL PRIVILEGES ON *.* TO 'aliyun_root'@'127.0.0.1' WITH GRANT OPTION |
    +----------------------------------------------------------------------------+
    1 row in set (0.00 sec)
    

    all privileges 这个用户才是我们一般认为的真正的高权限root,拥有 所有权限。

    疑问

    那么疑问出来了。阿里云给定的高权限和all privileges 之间存在差异。

    验证

    具体验证过程可以参考另外一篇文章
    验证之后发现 *.* 上面的 all privileges 和这里阿里云给定的高权限账号 之间的权限是存在差异的;

    image.png

    阿里云给定的高权限账号 实际缺少了SHUTDOWN, FILE, SHOW DATABASES, SUPER, CREATE TABLESPACE 几个权限。

    所以你在赋权的时候使用all privileges 但是实际你是没有上面几个权限的。所以出现了上面的错误

    相关文章

      网友评论

        本文标题:阿里云RDS的高权限不是真正的高权限

        本文链接:https://www.haomeiwen.com/subject/vbvsvftx.html