阿里云RDS的高权限不是真正的高权限
如下图所示在阿里云RDS中升级到了“高权限账号”
image.png但是在实际操作中发现grant
赋权失败,奇怪的是报错ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)
这个错误一般是因为密码的问题,但是这里能成功登陆密码肯定没有问题
那就继续排查啥情况
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
和这里阿里云给定的高权限账号
之间的权限是存在差异的;
阿里云给定的高权限账号
实际缺少了SHUTDOWN, FILE, SHOW DATABASES, SUPER, CREATE TABLESPACE
几个权限。
所以你在赋权的时候使用all privileges
但是实际你是没有上面几个权限的。所以出现了上面的错误
网友评论