Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何";减去;MySQL中的权限_Mysql_Sql_Privileges - Fatal编程技术网

如何";减去;MySQL中的权限

如何";减去;MySQL中的权限,mysql,sql,privileges,Mysql,Sql,Privileges,我想从表“transact”的两列中撤销更新权限。 我希望用户能够访问所有其他表和数据 mysql> REVOKE UPDATE (system, consumer) ON ledger.transact FROM 'foo'@'localhost'; ERROR 1147 (42000): There is no such grant defined for user 'foo' on host 'localhost' on table 'transaction' 上面的似乎不起作用。

我想从表“transact”的两列中撤销更新权限。 我希望用户能够访问所有其他表和数据

mysql> REVOKE UPDATE (system, consumer) ON ledger.transact FROM 'foo'@'localhost';
ERROR 1147 (42000): There is no such grant defined for user 'foo' on host 'localhost' on table 'transaction'

上面的似乎不起作用。

我猜“分类账.交易”是您的表?它应该是这样工作的,而不是:

REVOKE UPDATE ON ledger.transact FROM 'foo'@'localhost';

还可以查看mysql中使用的revoke语法。

首先-删除所有特权(在数据库、表、列级别)

  • 向每个表授予更新(…和其他)权限,但“transact”除外
  • 向表“transact”中的指定字段授予更新权限

  • 我同意Thilo的观点-只有在您之前授予这些列特权的情况下,您才能撤销这些列特权。您不能在更高级别(如表)上授予,然后在更详细级别上撤销。我认为这在mysql参考手册mysql 5.1第12.7.1.3章中有描述:

    形成数据库、表、列或例程的权限 作为每个 权限级别。例如,如果用户具有全局选择权限 特权,该特权不能因缺少 数据库、表或列级别的权限。“

    要获得选择性权限,Devart已经介绍过了。

    ,您最终可以从全局授权中减去权限,尽管目前只能从全局授权中减去权限(例如,您还不能对单个列执行此操作),但值得注意的是:

    从MySQL 8.0.16开始,如果启用了partial_revokes系统变量,则可以通过为特定数据库撤销权限来明确拒绝在全局级别授予的权限:

    必须为此设置系统变量:

    启用此变量可以部分撤销特权。具体地说,对于在全局级别拥有权限的用户,partial_revokes允许撤销特定架构的权限,同时保留其他架构的权限。例如,可以限制具有全局更新权限的用户在mysql系统架构上行使此权限。(或者,换句话说,用户能够在除mysql模式之外的所有模式上行使更新权限。)从这个意义上讲,用户的全局更新权限部分被撤销

    我不认为有“负面许可”,所以这是行不通的。您必须显式地授予他对所有其他表的权限,并将要限制的表排除在外。
    GRANT SELECT, INSERT, UPDATE ON *.* TO u1;
    REVOKE INSERT, UPDATE ON db1.* FROM u1;