我们最近从SQL Server切换到MySQL用于新项目,并且我仍然努力争取让自己的头脑安全模型。具有清除权限的MySQL用户仍然可以访问数据库
我们的应用程序中有一个名为MyApplicationUser的MySQL用户。为了方便起见,当我第一次开发这个应用程序时,我给了用户我认为是必需的特权。
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON MyApplication.* TO 'MyApplicationUser'@'%';
而且它似乎工作,所以我没有想到更多关于它。在某些时候,我调整了这个列表,这样用户也可以创建索引,尽管我不能再记得我曾经这样做过的代码。
作为安全审计的一部分,我认为将这些权限仅限于用户实际需要的权限是明智的。所以我查了一下它的运行情况:
select * from information_schema.user_privileges where grantee like '%MyApplicationUser%';
其中有一个相当长的名单。然后,我跑到下面的代码:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'MyApplicationUser'@'%';
GRANT SELECT, INSERT, EXECUTE, UPDATE ON MyApplication.* TO 'MyApplicationUser'@'%';
FLUSH PRIVILEGES;
现在,当我从user_privileges运行选择我只得到一个行 - 用法。文档说这只是基本的使用权限。所以看起来我的GRANT命令没有起作用。更令人震惊的是,当我运行应用程序时,它似乎仍然具有读取和更改数据的能力 - 表明该帐户拥有除user_privileges中列出的权限以外的权限。
我试过重新启动MySQL服务以确保它“新鲜”,但用户仍然有权限访问应用程序。
试图为“MyApplicationUser”运行秀补助@“%”似乎表明先前执行GRANT语句列表,不包括我的初步GRANT:
GRANT USAGE ON *.* TO 'MyApplicationUser'@'%'
GRANT SELECT, INSERT, UPDATE, EXECUTE ON `dataportal`.* TO 'MyApplicationUser'@'%'
所以:我怎么能找出什么特权我的MyApplicationUser帐户实际上有?如果它真的只是用法,那么应用程序如何继续工作?显示授权与user_privileges有什么不同?