由于换了ip,无法访问mysql,重新授权1.重新授权
mysql> select * from user \G;
*************************** 11. row ***************************
                 Host: 192.168.1.7
                 User: app
             Password: *5BCB3E6AC345B435C7C2E6B7949A04CE6F6563D3
          Select_priv: N
          Insert_priv: N
          Update_priv: N
          Delete_priv: N
          Create_priv: N
            Drop_priv: N
          Reload_priv: N
        Shutdown_priv: N
         Process_priv: N
            File_priv: N
           Grant_priv: N
      References_priv: N
           Index_priv: N
           Alter_priv: N
         Show_db_priv: N
           Super_priv: N
Create_tmp_table_priv: N
     Lock_tables_priv: N
         Execute_priv: N
      Repl_slave_priv: N
     Repl_client_priv: N
     Create_view_priv: N
       Show_view_priv: N
  Create_routine_priv: N
   Alter_routine_priv: N
     Create_user_priv: N
             ssl_type: 
           ssl_cipher: 
          x509_issuer: 
         x509_subject: 
        max_questions: 0
          max_updates: 0
      max_connections: 0
 max_user_connections: 0mysql> revoke all on app.* from [email protected];
ERROR 1141 (42000): There is no such grant defined for user 'app' on host '192.168.1.7'mysql> revoke all on *.* from [email protected];
Query OK, 0 rows affected (0.00 sec)mysql> revoke all on *.* from [email protected];
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)从user表中,可以查到192.168.1.7的访问授权,
但是用revoke all on app.* 报 ERROR 1141,可能是之前已经用过一次revoke all on app.*,请问报这个错说明什么?
再用revoke all on *.*,不报错,多次使用,但是依然能够从user表中查到记录,为什么不起作用?
想从一个ip地址收回访问授权,正确的写法是什么,为什么我的不起作用呢?2.通过修改授权
上面的方法是收回一个ip授权,在给另一个ip授权,有什么命令,直接修改以前已授权的ip地址,难道update user表?请高手指点,十分感谢

解决方案 »

  1.   

    能查到记录,不是说就不起作用。revoke完之后,再grant到新的ip,flush就可以了。
      

  2.   

    1
    revoke all on app.*
    app是你的dbname吗

    授权grant
      

  3.   

    授予的权限可以分为多个层级:·         全局层级全局权限适用于一个给定服务器中的所有数据库。这些权限存储在mysql.user表中。GRANT ALL ON *.*和REVOKE ALL ON *.*只授予和撤销全局权限。·         数据库层级 数据库权限适用于一个给定数据库中的所有目标。这些权限存储在mysql.db和mysql.host表中。GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*只授予和撤销数据库权限。·         表层级表权限适用于一个给定表中的所有列。这些权限存储在mysql.talbes_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤销表权限。·         列层级列权限适用于一个给定表中的单一列。这些权限存储在mysql.columns_priv表中。当使用REVOKE时,您必须指定与被授权列相同的列。·         子程序层级CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且,除了CREATE ROUTINE外,这些权限可以被授予为子程序层级,并存储在mysql.procs_priv表中。
      

  4.   

    错误:1141 SQLSTATE: 42000 (ER_NONEXISTING_GRANT) 
    消息:没有为主机'%s'上的用户'%s'定义这类授权楼主想把该记录从user表中删除吗? 
    使用revoke all on *.*,会使得权限列从Y变成N;也就是取消了他的权限,
    想要删除的话 楼主可以用 drop user username@'地址' 从表中删除; 需要flush privileges;楼主可以直接drop user username@'地址' 从表中删除; 需要flush privileges;
    再重新grant all on ....update 也是可以的,不过需要flush privileges;(delete,update,insert都需要flush privileges;)
      

  5.   

    我猪头了,上次询问grant的时候,得到过答复应该是是这样的,select * from user where \G;给出的是全局的权限,而不是针对某个DB或者SCHEMA得权限。我查询mysql db,这个表,就能得到想要的结果想问下关于权限的数据字典都有哪些,怎么查询这些数据字典呢?十分感谢大家
      

  6.   

    show privileges 可以看到权限列表;
      

  7.   

    指出5楼的错误点: drop user 和create user 不需要flush privileges;delete,update,insert都需要flush privileges.
      

  8.   

    只想更改某用户客户端ip的话:
    update mysql.user set host='2.2.2.2'  where user='aaaa';flush privileges;
    即可。这样权限不变。