阿里雲RDS的高許可權不是真正的高許可權

weixin_34138377發表於2018-08-02

阿里雲RDS的高許可權不是真正的高許可權

如下圖所示在阿里雲RDS中升級到了“高許可權賬號”

1394001-67d5a55f052065d0.png
image.png

但是在實際操作中發現grant 賦權失敗,奇怪的是報錯ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)
這個錯誤一般是因為密碼的問題,但是這裡能成功登陸密碼肯定沒有問題

1394001-df79e0fe3e83a773.png
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 和這裡阿里雲給定的高許可權賬號 之間的許可權是存在差異的;

1394001-e41f1f8ee073451a.png
image.png

阿里雲給定的高許可權賬號 實際缺少了SHUTDOWN, FILE, SHOW DATABASES, SUPER, CREATE TABLESPACE 幾個許可權。

所以你在賦權的時候使用all privileges 但是實際你是沒有上面幾個許可權的。所以出現了上面的錯誤

相關文章