MYSQL更新权限还需要选择权限吗?

时间:2016-11-02 06:26:25

标签: mysql

在MYSQL数据库中,我想在不选择的情况下向用户授予更新权限,是否可以?

3 个答案:

答案 0 :(得分:0)

是的,你可以做到。

这些步骤就是一个例子。

Step1:创建用户(如果尚未完成)

CREATE USER 'username'@'%' IDENTIFIED BY 'password'; 
FLUSH PRIVILEGES; 

第2步:仅授予更新权限

GRANT UPDATE ON *.* TO 'username'@'%' ; 

NB:您必须与具有授予权限的用户连接才能执行这些命令。 (例如:root用户)

The grant syntax

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

答案 1 :(得分:0)

全部感谢您的回复,但我不认为您之前尝试过这种情况,因此我得到的错误是您无法在没有选择和更新权限的情况下执行更新查询。

全部谢谢。

答案 2 :(得分:0)

可能但您的问题是,您的UPDATE-Query包含WHERE子句,该子句至少需要在内部查询字段。因此,您打算在这里需要SELECT权限。

否则,人们可以尝试使用蛮力技术通过使用UPDATE-Query并检查它是否影响行来获取表的实际内容。

示例: 更新客户设置some_irrellevant_field = 1,其中用户='吉米'和sex_orientation ='2' 一旦受影响的行数> 0,就可以获取信息。因此,允许这样做可能很危险。

但是您可以显式地授予单个列的权限。假设您要更新具有特定ID的用户的密码哈希,将ID列的select权限授予数据库用户,并更新hash列的权限。

PHPMyAdmin表特定的权限对话框(对不起,部分屏幕截图是德语的): PHPMyAdmin table specific permission; sorry, some parts of the screenshots are in german

然后这应该可以正常工作: UPDATE用户SET hash ='0123456789abcdef'WHERE id = 1234

或者,如果您的DBMS或存储引擎中不应该具有列级权限,您仍然可以使用单独的表或数据库,并在需要时将其加入。