我正在运行一些测试,试图看看是否可以创建一个用户,该用户只能访问数据库中的1或2个表.有人知道这是怎么做到的吗?我下面的代码失败了:

GRANT SELECT ON testdb.fruits, testdb.sports TO joe@localhost IDENTIFIED BY 'pass';

错误表明我的语法有错误.

推荐答案

将它们作为两个单独的GRANT条语句运行:

GRANT SELECT ON testdb.fruits TO joe@localhost IDENTIFIED BY 'pass';
GRANT SELECT ON testdb.sports TO joe@localhost IDENTIFIED BY 'pass';

The MySQL GRANT syntax只允许一个对象位于priv_level位置:,但它可以使用*作为通配符:

GRANT
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    TO user_specification [, user_specification] ...
    [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
    [WITH with_option ...]

object_type:
    TABLE
  | FUNCTION
  | PROCEDURE

priv_level:
    *
  | *.*
  | db_name.*
  | db_name.tbl_name
  | tbl_name
  | db_name.routine_name

The part below does not appear to work on MySQL 5.5.How to "subtract" privileges in MySQL个地址说明了原因.

To grant SELECT on all tables then selectively revoke, you could do:

GRANT SELECT ON testdb.* TO joe@localhost IDENTIFIED BY 'pass';
REVOKE ALL PRIVILEGES ON testdb.tblname FROM joe@localhost;

不过,这似乎是一种奇怪的方法,我认为我会单独授予,而不是单独撤销.

Mysql相关问答推荐

SQL - Select 复合主键,条件为其中一个主键

MySQL::JSON列的添加使SELECT查询非性能(当需要临时表时)

MySQL多次联接同一个表使计数变得奇怪

使用触发器markdown 10%

WordPress的sql命令从帖子中删除随机文本

错误:此查询集包含对外部查询的引用,并且只能在子查询中使用

我可以在姓名和姓名日期之间进行搜索吗?

为什么我的 SQL 查询不更新 Node.js 和 MySQL 中用户以外的用户属性?

Select 同一张表中的结果数?

SQL - 基本的内部连接查询

如何在 SQL 中计算留存曲线?

从 2 个不同的表中获取数据并将它们加入 sql

MySQL 查询组按日期(12 小时间隔)

如何根据特定条件从mysql数据库中 Select 查询

不是唯一的表/别名

如何使主键从 1000 开始?

使用 mysql 处理非常大的数据

使用 PHP 和 MySQL 存储和显示 unicode 字符串 (हिन्दी)

将 Blob 转换为字节数组的最简单方法

将数据库从 Postgres 迁移到 MySQL