但行好事
莫论前程❤

MySQL数据库系列(6)—–授权管理

对应报错:
远程连接MYSQL提示Host is not allowed to connect to this MySQL server

授权命令

常用的授权语句的语法如下:

GRANT ALL [PRIVILEGES] ON db.tbl TO 'username'@'host' IDENTIFIED BY 'password';

上述语法中,db表示数据库的名字,可以使用*通配,tbl为表的名称,可以使用*通配

示例语句如下:

给本地用户授权某个数据库的所有权限

​ grant 权限 on 数据库名.表名 to 用户名 @ “本地回环地址或localhost” identified by “密码”

grant all privileges on perftrace.* to liupeng@localhost identified by '123456'
grant all privileges on perftrace.* to liupeng@127.0.0.1 identified by '123456'

注意:上述两条命令都表示对liupeng用户开放perftrace数据库的所有权限,但是上述两条命令针对的liupeng用户是不一样的,一个是liupeng@localhost用户,一个是liupeng@127.0.0.1用户.mysql会认为这是两个用户.

授权时privileges关键字可省,示例如下:

grant all on perftrace.* to liupeng@127.0.0.1 identified by '123456'

给远程用户授权

grant 权限 on 数据库名.* to 用户名@’远程主机地址或对应的主机名’ identidied by ‘密码’

grant all privileges on perftrace.* to liupeng@'%' identified by '123456'

上述代码比较危险,表示liupeng用户可以通过任意主机连接到perftrace数据库,并且拥有perftrace数据库的所有权限.

我们可以稍微缩小一下liupeng用户能够连接数据库的ip地址范围.比如: 只允许liupeng用户通过192.168网段的地址连接perftrace数据库,示例语句如下:

grant all privileges on perftrace.* to liupeng@'192.168.%.%' identified by '123456'

使用上述命令授权后,需要使用如下命令刷新.

FLUSH PRIVILEGES

当然我们也可以授权用户某个数据库的某个权限,比如只授权用户对于某个数据库的查询权限

grant select privileges on perftrace.* to liupeng@'192.168.%.%' ;

也可以授权用户某个数据库的多个权限,比如:授权用户

grant insert,delete,update,select on perftrace.* to liupeng@'192.168.%.%';

也可以将同样的权限同时授权于多个用户

grant select on perrftrace.* to liupeng@localhost,liupenggc@localhost;

如果想要只对某张表的某个字段授权,可以使用如下语句.

grant select(name,age) on perftrace.students to liupeng@localhost

​ 上述示例表示只授予liupeng用户对perftrace库中students表的name字段和age字段的查询权限,虽然students表中还有stuid字段,gender字段,weight字段,但是liupeng用户无法看到这三个字段,也不能查询这三个字段中的内容,因为liupeng没有查询这三个字段的权限.当liupeng用户使用desc命令查看students表结构的时候,只能看到name字段和age字段,如果liupeng用户使用select * from students这样的查询语句查询students表,也会出现报错信息,提示对某些字段没有操作权限.

如果perftrace数据库中有一张表的名称叫作test,perftrace数据库中有一个函数也叫test,那么,此时如果管理员只想将test函数的权限授权zsy用户,而不是想将表的权限授予liupeng用户,则我们可以使用function关键字指明被操作的对象为函数,而不是表,示例如下:

grant execute on function perftrace.test to liupeng@'192.168.%.%';

上述语句表示授权liupeng用户对perftrace数据库中test函数拥有执行权限.

同理,也可以使用procedure关键字,指明被操作的对象是存储过程,比如,如下语句表示授权liupeng用户数据库中的test存储过程拥有执行权限.

grant execute on procedure perftrace.test to liupeng@'192.168.%.%';

​ 小结: 使用function关键字和procedure关键字可以对函数或存储过程授权,同理,使用view关键字即可对视图进行授权.

当一个用户被创建时,mysql会自动授予其usage权限.usage权限只能用于登录数据,不能执行其他操作.

如果用户有可能会跨越不安全的网络连接到数据库,我们可以强制用户使用ssl建立会话,命令如下:

grant usage on *.* to 'liupeng'@'192.168.1.1' require ssl;

上述示例表示’liupeng’@’192.168.1.1’用户连接当前mysql中的所有数据库时都必须使用ssl建立会话.

如果想要取消上述的SSL连接限制,可以使用如下命令,撤销强制使用ssl建立会话的限制.

grant usage on *.* to 'liupeng'@'192.168.1.1' require none;

假设,root用户授权了liupeng用户某些权限,

查看授权

查看授权可以分为两个方面:

– 从用户的角度查看授权,或者从数据库的角度查看授权,从用户的角度查看权限表示查看对应用户都能操作哪些数据库,从数据库角度查看授权表示查看指定数据库都对哪些用户开放了哪些权限,我们给出示例如下:

从数据库用户的角度查看授权的语句如下:

# show grants for 用户名@localhost;
show grants for root@localhost;

操作如下:

mysql> show grants for liupeng@localhost;
+---------------------------------------------------------------------+
| Grants for liupeng@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON perftrace.* TO 'liupeng'@'localhost' WITH GRANT OPTION |
| GRANT ALL PRIVILEGES ON book.* TO 'liupeng'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)

可以看到 liupeng用户对perftrace和book数据库拥有所有操作权限.

从数据库角度查看授权

# select * from mysql.db where Db="你要查看的数据库"
select * from mysql.db where Db="perftrace" \G;

删除授权

# revoke "要移除的权限" on 数据库.表 from 用户@host;
revoke all on word.* from zsy@www.zsythink.net;
赞(0) 打赏
未经允许不得转载:刘鹏博客 » MySQL数据库系列(6)—–授权管理
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏