Mysql 授权与用户权限查询 学习教程

如果需要查看MySQL用户权限,应该如何实现呢?

一、GRANT授权

> mysql -u root -p "xxx"

> grant usage on *.* to 'root'@'localhost' identified by 'XXX';

> grant all privileges on `temp`.* to 'root'@'localhost';

创建一个只可以在本地登陆的 不能操作的用用户名 discuz 密码为 XXX,给这个discuz用户操作discuz数据库的所有权限。

GRANT命令用来建立新用户,指定用户口令并增加用户权限,其格式如下:

> GRANT ON

> TO [IDENTIFIED BY ""]

> [WITH GRANT OPTION];

正如你看到的,在这个命令中有许多待填的内容。

我们逐一地对它们进行介绍,并最终给出一些例子以让你对它们的协同工作有一个了解。

你可以指定的权限可以分为三种类型:

【数据库/数据表/数据列权限】
  • alter: 修改已存在的数据表(例如增加/删除列)和索引

  • create :建立新的数据库或数据表

  • delete :删除表的记录

  • drop :删除数据表或数据库

  • index :建立或删除索引

  • insert :增加表的记录

  • select :显示/搜索表的记录

  • update :修改表中已存在的记录

全局管理MySQL用户权限
  • file :在MySQL服务器上读写文件

  • PROCESS :显示或杀死属于其它用户的服务线程

  • RELOAD :重载访问控制表,刷新日志等

  • SHUTDOWN :关闭MySQL服务

特别的权限
  • ALL :允许做任何事(和root一样)

  • USAGE :只允许登录–其它什么也不允许做

二、查看用户权限

> show grants for 'test'@'localhost'

> show grants for test;

> show grants for 'test'@'%'

在这里插入图片描述

三、例子

  1. 创建一个表,并授权特定用户(列:test用户)
> CREATE DATABASE  IF NOT EXISTS test_user  DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

> grant all privileges on test_user.* to 'test'@'%' IDENTIFIED BY 'test123';

> flush privileges;

ON 子句中test.* 说明符的意思是“test数据库所有的表”

部分高版本mysql不适用于上述第二部授权的语句,会出现本地可以连接,但是其他ip连接此数据库的时候会报cashing_sha2_password无法加载的错误,此时需要如下授权():

> grant all privileges on test.* to 'test_user'@'%' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'test123';

在这里插入图片描述

  1. 授予root用户远程权限
> grant all privileges on *.* to 'root'@'%' indentified by '123456' with grant option;

>  flush privileges;

ON 子句中*.* 说明符的意思是“所有数据库,所有的表”

with grant option允许你把你自己拥有的那些权限授给其他的用户

  1. 增加一个用户test密码为test123,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限:
> grant select,insert,update,delete on *.* to 'test'@'%' Identified by "test123";

>  flush privileges;
  1. 增加一个用户test密码为test123,让他只可以在localhost上登录,并可以对数据库testdb进行查询、插入、修改、删除的操作
> grant select,insert,update,delete on testdb.* to test@localhostidentified by "test123";

> flush privileges;
  1. MySQL创建只读账号
> GRANT SElECT ON *.* TO 'reader'@'%'   IDENTIFIED BY "reader456";

>  flush privileges;
  1. MySQL赋权与权限回收(grant&revoke))
  • 给用户cacti赋予所有库的所有权限
> GRANT ALL PRIVILEGES ON *.* TO 'cacti'@'%' IDENTIFIED BY 'cacti789' WITH GRANT OPTION;

> FLUSH PRIVILEGES;
  • 权限回收(不包含赋权权限)
> REVOKE ALL PRIVILEGES ON *.* FROM cacti;

> REVOKE ALL PRIVILEGES ON cacti.* FROM cacti;
  • 收回赋权权限
> REVOKE GRANT OPTION ON *.* FROM cacti;

> FLUSH PRIVILEGES;

为什么使用了grant all on db.* to user identified by "passwd"后,在主机上访问数据库还会出现ERROR 1045 (28000): Access denied for user’user’@‘localhost’(using password: YES) 的错误提示?

运行命令 grant all on db.* to’user’@'localhost’identified by “pass”

当不加@选项时,效果与加@'%‘是一样的,’%'从名义上包括任何主机,(%必须加上引号,不然与@放在一起可能不会被辨认出)

不过有些时候(有些版本)'%'不包括localhost,要单独对@'localhost’进行赋值!

正确的操作是:

>  grant all on db.* to 'user'@'%' identified by "user000";

>  grant all on db.* to 'user'@'localhost' identified by "123456";

>  flush privileges;
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值