mysql中⽤于授权的语句_mysqlmariadb常⽤语句总结(7):
授权管理
这篇⽂章总结了mysql中授权相关的常⽤语句。
在本博客中,"mysql"是⼀个系列⽂章,这些⽂章主要对mysql/mariadb的常⽤知识点进⾏了总结,每⼀篇博客总结的知识点有所不同,具体内容可参考mysql⽂章列表。
mysql⽂章列表直达链接:mysql知识点总结
授权命令
常⽤授权语句的语法如下:
MySQL
GRANT ALL [PRIVILEGES] ON db.tbl TO 'username'@'host' IDENTIFIED BY 'password';
linux操作系统的根目录是1
GRANT ALL [PRIVILEGES] ON db.tbl TO 'username'@'host' IDENTIFIED BY 'password';
上述语法中,db表⽰数据库的名字,可以使⽤*通配,tbl为表的名称,可以使⽤*通配
⽰例语句如下:
给本地⽤户授权某个数据库的所有权限
grant 权限 on 数据库名.表名 to ⽤户名@"本地回环地址或localhost" identified by "密码"
MySQL
grant all privileges on zsythink.* to zsy@localhost identified by 'zsythink';
1
grant all privileges on zsythink.* to zsy@localhost identified by 'zsythink';
MySQL
grant all privileges on zsythink.* to zsy@127.0.0.1 identified by 'zsythink';
1
grant all privileges on zsythink.* to zsy@127.0.0.1 identified by 'zsythink';
注意:上述两条命令都表⽰对zsy⽤户开放zsythink数据库的所有权限,但是上述两条命令的针对的zsy⽤户是不⼀样的,⼀个是
zsy@localhost⽤户,⼀个是zsy@127.0.0.1⽤户,mysql会认为这是两个⽤户。
授权时privileges关键字可省,⽰例如下
MySQL
grant all on zsythink.* to zsy@127.0.0.1 identified  by  'zsythink';
1
grant all on zsythink.* to zsy@127.0.0.1 identified  by  'zsythink';
给远程⽤户授权
grant 权限 on 数据库名.* to ⽤户名@'远程主机地址或对应的主机名' identified by "密码"
MySQL
grant all privileges on zsythink.* to zsy@'%' identified  by  'zsythink';
1
grant all privileges on zsythink.* to zsy@'%' identified  by  'zsythink';
上述命令⽐较危险,表⽰zsy⽤户可以通过任意主机连接到zsythink数据库,并且拥有zsythink数据库的所有权限。
pathinfo是什么意思
我们可以稍微缩⼩⼀下zsy⽤户能够连接数据库的IP地址范围,⽐如,只允许zsy⽤户通过192.168⽹段的地址连接zsythink数据库,⽰例语句如下
MySQL
grant all privileges on zsythink.* to zsy@'192.168.%.%' identified  by  'zsythink';
1
grant all privileges on zsythink.* to zsy@'192.168.%.%' identified  by  'zsythink';
使⽤上述命令授权后,需要使⽤如下命令刷新。
MySQL
FLUSH PRIVILEGES
1
FLUSH PRIVILEGES
当然,我们也可以授权⽤户某个数据库的某个权限,⽐如,只授权⽤户对于某个数据库的查询权限,⽰例如下。
MySQL
grant select privileges on zsythink.* to zsy@'192.168.%.%';
1
grant select privileges on zsythink.* to zsy@'192.168.%.%';
也可以授权⽤户某个数据库的多个权限,⽐如,授权⽤户
MySQL
grant insert,delete,update,select on zsythink.* to zsy@'192.168.%.%';
mysql查看所有存储过程>shellif双引号
1
grant insert,delete,update,select on zsythink.* to zsy@'192.168.%.%';
还可以将同样的权限同时授权于多个⽤户,⽰例如下
MySQL
grant select on hellodb.* to zsy@localhost,zsythink@localhost;
1
grant select on hellodb.* to zsy@localhost,zsythink@localhost;
如果想要只对某张表的某个字段授权,可以使⽤如下语句
MySQL
grant select (name,age) on zsythink.students to zsy@localhost;
返回数据不满足json格式
1
grant select (name,age) on zsythink.students to zsy@localhost;
上述⽰例表⽰只授予zsy⽤户对zsythink库中students表的name字段和age字段的查询权限,虽然students表中还有stuid字段、gender 字段、weight字段,但是zsy⽤户⽆法看到这三个字段,也不能查询这三个字段中的内容,因为zsy没有查询这三个字段的权限,当zsy⽤户使⽤desc命令查看students表结构时,只能看到name字段和age字段,如果zsy⽤户使⽤select * from students这样的查询语句查询students表,也会出现报错信息,提⽰对某些字段没有操作权限。
如果zsythink数据库中有⼀张表的名称为test,同时,zsythink数据库中有⼀个函数也叫test,那么,此时如果管理员只想将test函数的权限授予zsy⽤户,⽽不是想将表的权限授予zsy⽤户,该怎么办呢?我们可以通过function关键字指明被操作的对象为函数,⽽不是表,⽰例如下:
MySQL
grant execute on st to zsy@'192.168.%.%';
1
html js css工具软件grant execute on st to zsy@'192.168.%.%';
上述语句表⽰授权zsy⽤户对zsythink数据库中test函数拥有执⾏权限。
同理,也可以使⽤procedure关键字,指明被操作的对象是存储过程,⽐如,如下语句表⽰授权zsy⽤户对zsythink数据库中的test存储过程拥有执⾏权限。
MySQL
grant execute on st to zsy@'192.168.%.%';
1
grant execute on st to zsy@'192.168.%.%';
⼩结:使⽤function关键字和procedure关键字可以对函数或存储过程授权,同理,使⽤view关键字即可对视图进⾏授权。
当⼀个⽤户被创建时,mysql会⾃动授予其usage权限。usage权限只能⽤于登录数据,不能执⾏其他操作。
如果⽤户有可能会跨越不安全的⽹络连接到数据库,我们可以强制⽤户使⽤ssl建⽴会话,命令如下。
MySQL
grant usage on *.* to 'zsy'@'222.222.222.222' require ssl;
1
grant usage on *.* to 'zsy'@'222.222.222.222' require ssl;
上述⽰例表⽰'zsy'@'222.222.222.222'⽤户连接当前mysql中的所有数据库时都必须使⽤ssl建⽴会话。
如果想要取消上述的ssl连接限制,可以使⽤如下命令,撤销强制使⽤ssl建⽴会话的限制。
MySQL
grant usage on *.* to 'zsy'@'222.222.222.222' require none;
1
grant usage on *.* to 'zsy'@'222.222.222.222' require none;
假设,root⽤户授权了zsy⽤户某些权限,那么zsy⽤户是否能将已经拥有的权限授予别的⽤户吗?zsy⽤户能否将已有权限授权于其他⽤户取决于zsy⽤户是否拥有grant选项。
如果在授权zsy⽤户时,搭配了grant选项,则zsy⽤户有权将已拥有的权限授予其他⽤户,但是这样做⽐较危险,⼀般情况下应由管理员同⼀授权,但是此处⽤于演⽰,给出如下⽰例。
MySQL
grant select on zsythink.* to zsy@'192.168.%.%'  with grant option;
1
grant select on zsythink.* to zsy@'192.168.%.%'  with grant option;
上述命令表⽰zsy⽤户被授予了zsythink数据库的select的权限,同时zsy⽤户也能将此权限授予其他⽤户,⽽且,zsy⽤户也能在授予其他⽤户select权限时使⽤with grant option,所以这很危险,请勿随意使⽤此选项。
除了上⾯提到的grant option,管理员还可以通过如下选项对⽤户进⾏⼀些其他的限制
MAX_QUERIES_PER_HOUR:限制⽤户每⼩时执⾏的查询语句数量;
MAX_UPDATES_PER_HOUR:限制⽤户每⼩时执⾏的更新语句数量;
MAX_CONNECTIONS_PER_HOUR:限制⽤户每⼩时连接数据库的次数;
MAX_USER_CONNECTIONS:限制⽤户使⽤当前账号同时连接服务器的连接数量;
上述各限制选项的⽰例如下。
grant select on *.* to zsy@'192.168.%.%' identified by '123456' with max_queries_per_hour 20;
grant select on *.* to zsy@'192.168.%.%' identified by '123456' with max_updates_per_hour 10;
grant select on *.* to zsy@'192.168.%.%' identified by '123456' with max_connections_per_hour 15;
grant select on *.* to zsy@'192.168.%.%' identified by '123456' with max_user_connections 2;
如果将上述限制对应的数字改为0,则表⽰不限制。
查看授权
查看授权可以从两个⽅⾯查看,从⽤户的⾓度查看授权,或者从数据库的⾓度查看授权,从⽤户的⾓度查看权限表⽰查看对应⽤户都能操作哪些数据库,从数据库的⾓度查看权限表⽰查看指定数据库都对哪些⽤户开放了哪些权限,我们会给出⽰例
从数据库⽤户的⾓度查看授权的语句如下
MySQL
show grants for ⽤户名;
1
show grants for ⽤户名;
⽐如,当我们需要查看zsy@localhost这个⽤户对那些库都有哪些权限,可以使⽤如下语句。
MySQL
show grants for zsy@localhost;
1
show grants for zsy@localhost;
可以看到,zsy@localhost⽤户对 word、hellodb这两个数据拥有所有的操作权限。
同理,如果想要查看'zsy'@'www.zsythink'⽤户对哪些库拥有哪些权限可以使⽤如下语句
从数据库的⾓度查看授权,可以使⽤如下语句
MySQL
select * from mysql.db where Db="你要查看的数据库"
1
select * from mysql.db where Db="你要查看的数据库"
⽰例如下
删除授权
删除授权/撤销授权的常⽤语句如下:
MySQL
revoke "要移除的权限" on 数据库.表 from ⽤户@host;
1
revoke "要移除的权限" on 数据库.表 from ⽤户@host;
⽐如删除zsy@www.zsythink⽤户对于word数据库的所有操作权限,语句如下。
MySQL
revoke all on word.* from zsy@www.zsythink;
1
revoke all on word.* from zsy@www.zsythink;
也可以删除指定的权限,⽰例如下
上图中,对于word数据库来说,针对zsy@www.zsythink⽤户,移除了上图中红框中的权限。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。