【MySQL】MySQL授权与用户权限查询

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

一、GRANT授权

# mysql -u root -p"xxx"

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

> grant all privileges on `discuz`.* to 'discuz'@'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 'user'@'localhost'

> show grants for user;

> show grants for 'user'@'%'


三、例子

1.创建一个表,并授权特定用户

> CREATE DATABASE  IF NOT EXISTS test  DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

> grant all privileges on test* to 'test_user'@'%' IDENTIFIED BY 'Test@123';

>  flush privileges;

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


2. 授予root用户远程权限

> grant all privileges  on *.* to 'root'@'%'  indentified by 'Root@123' with grant option;

>   flush privileges;

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

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


3.增加一个用户test密码为Test@123,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限

> grant select,insert,update,delete on *.* to test@"%" Identified by "Test@123";

>  flush privileges;


4.增加一个用户test密码为Test@123,, 让他只可以在localhost上登录,并可以对数据库testdb进行查询、插入、修改、删除的操作

> grant select,insert,update,delete on testdb.* to test@localhostidentified by "Test@123";

>  flush privileges;


5.MySQL创建只读账号

> GRANT SElECT ON *.* TO 'reader'@'%'   IDENTIFIED BY "passwd";

>  flush privileges;


6.MySQL赋权与权限回收(grant&revoke)

给用户cacti赋予所有库的所有权限

> GRANT ALL PRIVILEGES ON *.* TO 'cacti'@'%' IDENTIFIED BY 'cacti' 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 "passwd";

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

>  flush privileges;

你可能感兴趣的:(【MySQL】MySQL授权与用户权限查询)