mysql revoke 的问题

你好啊 2010-12-27 12:39:31
由于换了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: 0

mysql> revoke all on app.* from app@192.168.1.7;
ERROR 1141 (42000): There is no such grant defined for user 'app' on host '192.168.1.7'

mysql> revoke all on *.* from app@192.168.1.7;
Query OK, 0 rows affected (0.00 sec)

mysql> revoke all on *.* from app@192.168.1.7;
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表?

请高手指点,十分感谢

...全文
692 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
你好啊 2010-12-31
  • 打赏
  • 举报
回复
明白了,十分感谢大家
aleng18 2010-12-28
  • 打赏
  • 举报
回复
只想更改某用户客户端ip的话:
update mysql.user set host='2.2.2.2' where user='aaaa';flush privileges;
即可。这样权限不变。
iihero 2010-12-27
  • 打赏
  • 举报
回复
能查到记录,不是说就不起作用。

revoke完之后,再grant到新的ip,flush就可以了。

小小小小周 2010-12-27
  • 打赏
  • 举报
回复
指出5楼的错误点: drop user 和create user 不需要flush privileges;delete,update,insert都需要flush privileges.
小小小小周 2010-12-27
  • 打赏
  • 举报
回复
show privileges 可以看到权限列表;
你好啊 2010-12-27
  • 打赏
  • 举报
回复
我猪头了,上次询问grant的时候,得到过答复

应该是是这样的,select * from user where \G;给出的是全局的权限,而不是针对某个DB或者SCHEMA得权限。

我查询mysql db,这个表,就能得到想要的结果

想问下关于权限的数据字典都有哪些,怎么查询这些数据字典呢?

十分感谢大家。。。
小小小小周 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 ronaldo09 的回复:]
但是用revoke all on app.* 报 ERROR 1141,可能是之前已经用过一次revoke all on app.*,请问报这个错说明什么
[/Quote]
错误:1141 SQLSTATE: 42000 (ER_NONEXISTING_GRANT)
消息:没有为主机'%s'上的用户'%s'定义这类授权

[Quote=引用楼主 ronaldo09 的回复:]
再用revoke all on *.*,不报错,多次使用,但是依然能够从user表中查到记录,为什么不起作用?
想从一个ip地址收回访问授权,正确的写法是什么,为什么我的不起作用呢?
[/Quote]
楼主想把该记录从user表中删除吗?
使用revoke all on *.*,会使得权限列从Y变成N;也就是取消了他的权限,
想要删除的话 楼主可以用 drop user username@'地址' 从表中删除; 需要flush privileges;

[Quote=引用楼主 ronaldo09 的回复:]
上面的方法是收回一个ip授权,在给另一个ip授权,有什么命令,直接修改以前已授权的ip地址,难道update user表?
[/Quote]
楼主可以直接drop user username@'地址' 从表中删除; 需要flush privileges;
再重新grant all on ....



update 也是可以的,不过需要flush privileges;(delete,update,insert都需要flush privileges;)

rucypli 2010-12-27
  • 打赏
  • 举报
回复
授予的权限可以分为多个层级:

· 全局层级

全局权限适用于一个给定服务器中的所有数据库。这些权限存储在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表中。
rucypli 2010-12-27
  • 打赏
  • 举报
回复
1
revoke all on app.*
app是你的dbname吗
2
授权grant
iihero 2010-12-27
  • 打赏
  • 举报
回复
上边的所有权限都是N,证明没有权限了。

57,063

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧