llcong 发表于 2018-10-17 13:04:18

SQL之Grant(分配权限)和Revoke(回收权限)

  mysql跟其他数据库一样可以为不同的用户分配不同的权限
  基本的操作使用的是SQL中的Grant(分配权限)和Revoke(回收权限)
  一、关于Grant
  Grant可以把指定的权限分配给特定的用户,如果这个用户不存在,则会创建一个用户
  命令格式

  grant 权限 on 数据库名.表名 to 用户名@登陆方式>
  grant select,insert,update,delete on auth.* to user1@localhost>  权    限:select,insert,update,delete,drop,index,all,privileges(表示赋予用户全部权限跟all一样)
  数据库:当数据库名称.表名称被*.*代替,表示用户拥有操作mysql上所有数据库所有表的权限
  登陆方式:即用户地址,可以是localhost,也可以是ip地址、机器名字、域名.也可以用'%'表示从任何地址连接
  'password':可以为空,但是为空这表示只能从本地登陆,建议不能为空
  范例1:
  授权数据库用户tom从本机访问MySQL服务器并拥有对auth数据库中所有表的完全权限

  mysql> grant all on auth.* TO tom@localhost>  Query OK, 0 rows affected (0.00 sec)

  mysql> grant all on auth.* TO tom@'localhost'>  小结:使用引号或双引号没有任何区别,主要是用于区别字符和命令
  范例2:
  授权数据库用户john从10.0.0.0/8 网络中连接到MySQL服务器,对auth数据库中所有表拥有完全权限

  mysql> grant all on auth.* to john@'10.0.0.0/8'>  Query OK, 0 rows affected (0.00 sec)

  mysql> grant all on auth.* TO tom@192.168.1.1>  Query OK, 0 rows affected (0.00 sec)

  mysql> grant all privileges on *.* to 123ks@localhost>  Query OK, 0 rows affected (0.00 sec)
  小结:如果是指定了一个网段或网络范围的话,网段或网络范围需要加引号
  二、关于Revoke
  revoke的作用则是回收授于用户的权限
  命令格式为:
  revoke 权限 on 数据库名.表名 from 用户名@登陆方式;
  范例3:
  撤销用户tom从本机访问数据库auth的所有权限
  mysql> revoke all on auth.* from tom@'localhost';
  Query OK, 0 rows affected (0.00 sec)
  tom@*:*即登陆方式,有时候可能撤销的不是本地用户,要根据需要撤销
  范例4:
  撤销用户tom从任意地址访问数据库auth的所有权限
  mysql> revoke all on auth.* from tom@'%';
  Query OK, 0 rows affected (0.00 sec)
  范例5:
  查看tom用户从本机连接是的权限
  mysql> show grants for tom@localhost;
  范例6:
  查看数据库auth中所有授权的用户
  mysql> select host,user,db from mysql.db where db='auth'; 这里没有使用use mysql 效果是跨库查表
  范例7:
  查看当前登陆用户的权限
  mysql> show grants;
  范例8:
  删除用户123cs@localhost
  delete from mysql.user where user='123cs';
  删除用户后使用show grant 查看该用户会发现能看到此用户的权限,那是因为并没有撤销他的权限
  在MySQL中,用户信息存放在mysql.User中。
  灵活使用权限赋予和撤销,可以加深对SQL中的权限参数的理解,初学者不放试着多多练习,有助于在SQL上的理解

页: [1]
查看完整版本: SQL之Grant(分配权限)和Revoke(回收权限)