MySQL 授予数据库除一张表之外的所有权限

标签 mysql privileges sql-grant user-permissions

我一直无法找到实现以下目标的合理解决方案:

我希望有一个用户对一个数据库(或具有相同架构的一系列数据库)拥有所有权限,除了对于一个表,他们将只有 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 客户端并全部运行。

关于MySQL 授予数据库除一张表之外的所有权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6288554/

相关文章:

php - SQL 插入速度的变化

windows - WinXP和Win7下的Delphi app manifest文件问题

MACOSX : how to start daemon which need root privileges from cocoa application

MySQL 5.6 显示用户的所有授权

database - SQL 授权在多个对象上执行

mysql - GRANT 中的密码与现有用户名的密码相同

MySQL 与 JOIN 查询

PHP:如何从数据库中添加日期和月份?

php - PDO lastInsertId() 未获取值

azure - 尽管是订阅所有者,但无法使用 terraform 创建 azura 资源