关系型数据库-MySQL:授权管理

一、授权命令


语法格式:

[(none)]>grant 权限 on 数据库名.表名 to 用户名@'HOST' identified by "密码"

实例演示:

1)给本地用户授权数据库world的所有权限
[(none)]>grant all on world.* to lisi@'localhost';

2)允许远程用户通过任意主机连接数据库,并拥有world的所有权限
[(none)]>grant all on world.* to zhangsan@'%';

3)允许远程用户通过跳板机192.168.31.1访问数据库,并拥有world的所有权限
[(none)]>grant all on world.* to zhangsan@'192.168.31.1';

4)授权zhangsan对数据库world仅具有查询权限
[(none)]>grant slect on world.* to zhangsan@'localhost';

5)授权zhangsan对数据库world仅具有查询、删除、插入、更改的权限
[(none)]>grant slect,delete,insert,update on world.* to zhangsan@'localhost';

6)授予查询world数据库的权限给多个用户
[(none)]>grant slect on world.* to zhangsan@'localhost',lisi@'localhost';

7)只对某张表的某个字段授权
[(none)]>grant select (name,age) on zsythink.students to zhangsan@'localhost';

8)如果world数据库中有一张表的名称为test,同时,world数据库中有一个函数也叫test,那么,此时如果管理员只想将test函数的权限授予zhangsan用户,而不是想将表的权限授予zhangsan用户,该怎么办呢?我们可以通过function关键字指明被操作的对象为函数,而不是表,示例如下:
[(none)]>grant execute on function world.test to zhangsan@'192.168.31.%';

9)上述语句表示授权zhangsan用户对world数据库中test函数拥有执行权限。同理,也可以使用procedure关键字,指明被操作的对象是存储过程,比如,如下语句表示授权zhangsan用户对world数据库中的test存储过程拥有执行权限。
[(none)]>grant execute on procedure world.test to zhangsan@'192.168.31.%';
小结:使用function关键字和procedure关键字可以对函数或存储过程授权,同理,使用view关键字即可对视图进行授权。

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

如果用户有可能会跨越不安全的网络连接到数据库,我们可以强制用户使用ssl建立会话,命令如下:
[(none)]>grant usage on *.* to 'zhangsan'@'111.111.111.111' require ssl;
取消上述的ssl连接显示:
[(none)]>grant usage on *.* to 'zhangsan'@'111.111.111.111' equire none;

11)假设,root用户授权了zhangsan用户某些权限,那么zhangsan用户是否能将已经拥有的权限授予别的用户?这取决于zsy用户是否拥有 grant 选项。
如果在授权zhangsan用户时,搭配了grant选项,则zhangsan用户有权将已拥有的权限授予其他用户,但是这样做比较危险,一般情况下应由管理员同一授权,但是此处用于演示,给出如下示例。
[(none)]>grant select on world.* to zhangsan@'192.168.31.%'  with grant option;
该命令表示zhangsan用户被授予了world数据库的select的权限,同时zhangsan用户也能将此权限授予其他用户,而且zhangsan用户也能在授予其他用户select权限时使用with grant option,所以这很危险,请勿随意使用此选项。

12)除了上面提到的grant option,管理员还可以通过如下选项对用户进行一些其他的限制
MAX_QUERIES_PER_HOUR:限制用户每小时执行的查询语句数量;

MAX_UPDATES_PER_HOUR:限制用户每小时执行的更新语句数量;

MAX_CONNECTIONS_PER_HOUR:限制用户每小时连接数据库的次数;

MAX_USER_CONNECTIONS:限制用户使用当前账号同时连接服务器的连接数量;

上述各限制选项的示例如下。

grant select on *.* to zhangsan@'192.168.31.%' identified by '123456' with max_queries_per_hour 20;

grant select on *.* to zhangsan@'192.168.31.%' identified by '123456' with max_updates_per_hour 10;

grant select on *.* to zhangsan@'192.168.31.%' identified by '123456' with max_connections_per_hour 15;

grant select on *.* to zhangsan@'192.168.31.%' identified by '123456' with max_user_connections 2;

如果将上述限制对应的数字改为0,则表示不限制。

二、查看授权


查看授权可以从两个角度查看:

  • 从用户的角度查看授权,表示查看对应用户都能操作哪些数据库;
    语法格式:

    [(none)]>show grants for user@host;
    

    实例演示:

    1)查看zhangsan@localhost这个用户对那些库有哪些权限
    [(none)]>show grants for zhangsan@localhost;
    +----------------------------------------------+
    | Grants for zhangsan@localhost                |
    +----------------------------------------------+
    | GRANT USAGE ON *.* TO 'zhangsan'@'localhost' |
    +----------------------------------------------+
    1 row in set (0.00 sec)
    

    可以看到zhangsan@localhost用户对所有库,所有表都拥有 USAGE 权限;

  • 从数据库的角度查看授权,表示查看指定数据库都对哪些用户开放了哪些权限;
    语法格式:

    [(none)]>select * from mysql.db where Db="你要查看的数据库"
    

    实例演示:

    [(none)]>select * from mysql.db where Db='world'\G;
    *************************** 1. row ***************************
                     Host: localhost
                       Db: world
                     User: lisi
              Select_priv: Y
              Insert_priv: Y
              Update_priv: Y
              Delete_priv: Y
              Create_priv: Y
                Drop_priv: Y
               Grant_priv: N
          References_priv: Y
               Index_priv: Y
               Alter_priv: Y
    Create_tmp_table_priv: Y
         Lock_tables_priv: Y
         Create_view_priv: Y
           Show_view_priv: Y
      Create_routine_priv: Y
       Alter_routine_priv: Y
             Execute_priv: Y
               Event_priv: Y
             Trigger_priv: Y
    1 row in set (0.00 sec)
    
    ERROR: 
    No query specified
    

三、删除授权


语法格式:

[(none)]>revoke "要移除的权限" on 数据库.表 from 用户@host;

实例演示:

1)删除lisi@localhost用户对world数据库的所有操作权限
[(none)]>revoke all on world.* from lisi@localhost;
2)删除lisi@localhost用户对test数据库的update权限
[(none)]>revoke update on test.* from lisi@localhost;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值