我一直无法找到实现以下目标的合理解决方案:
我希望有一个对数据库(或具有相同架构的一系列数据库)具有ALL特权的用户,除了一个表外,该表只具有SELECT特权。
本质上,我希望用户可以自由控制数据库,但不能更新特定的表。
到目前为止,我已经尝试了,但无济于事:
授予该数据库(db_name。*)的所有特权,然后专门仅授予该所需表的选择特权(希望它会覆盖“所有”,我知道这很愚蠢)。
授予该数据库(db_name。*)的所有特权,然后取消插入,更新和删除。但这产生了一个错误,表明db_name.table_name没有授予规则。
根据我的能力,我将不得不分别授予数据库每个表(只读表除外)的所有特权。
请有人告诉我有一种更简单的方法
注意:我正在运行MySQL 5.1。最新版本可在Ubuntu 10.04上使用。
我知道这是一篇过时的文章,但我想我应该补充@tdammers问题,以供其他人参考。您也可以在information_schema.tables上执行SELECT CONCAT来创建授权命令,而不必编写单独的脚本。
首先撤销该数据库的所有特权:
REVOKE ALL PRIVILEGES ON db.* FROM user@localhost;
然后创建您的GRANT语句:
SELECT CONCAT("GRANT UPDATE ON db.", table_name, " TO user@localhost;") FROM information_schema.TABLES WHERE table_schema = "YourDB" AND table_name <> "table_to_skip"; 将结果复制并粘贴到MySQL客户端中,然后全部运行。来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。