mysql 数据库用户管理实例介绍

时间:2018-09-18
本文章向大家介绍mysql 数据库用户管理,主要包括创建用户的语句、授权的语句、权限授予别的账户、删除权限、刷新权限列表、删除用户及用户管理实例讲解,需要的朋友可以参考一下

mysql 用户管理

  MYSQL是一个tcp服务器 ,用于操作服务器 上的文件数据,接收用户端发送的指令,接收指令时需要考虑安全问题,是不是谁发给我都要 响应?

  MySQL中 吧文件称为表,在MySQL中自带的MySQL数据库中有4个表用于用户管理的,分别是:优先级从高到低

  user->db->table_priv->columns_priv

#授权表
user #该表放行的权限,针对:所有数据,所有库下所有表,以及表下的所有字段
db #该表放行的权限,针对:某一数据库,该数据库下的所有表,以及表下的所有字段
tables_priv #该表放行的权限。针对:某一张表,以及该表下的所有字段
columns_priv #该表放行的权限,针对:某一个字段

#按图解释:
user:放行db1,db2及其包含的所有
db:放行db1,及其db1包含的所有
tables_priv:放行db1.table1,及其该表包含的所有
columns_prive:放行db1.table1.column1,只放行该字段
复制代码

1.创建用户的语句:

  create user 用户名@“主机地址”  identified by "密码";

  create user scote@"127.0.0.1" identified by "123";

  此处的主机地址,不是服务器地址,而是表示这个账户可以在哪台电脑上登陆

2.授权的语句********

  语法: grant [权限的名称 select insert......|  all] on 数据库.表名 to 用户名 @主机地址;

  授予scote 这个用户所有权限,在所有数据库所有表中

  grant all on *.* to scote@"localhost";  #可以访问所有库和表

  grant all on day41.* to scote@"localhost"; 可以访问day41库的所有表

  grant all on day41.stu to scote@"localhost"; 可以访问day41库的stu表

  grant select (id,name),insert(id,name) on day41.stu  to  scote@"localhost";#仅能查看day41库的stu表中的id和name 字段。

3.grant [权限的名称 select  insert......|all ] on  数据库.表名  to   用户名@主机地址  with  grant  option;

  with grant option  这个用户可以将它有的权限授予别的账户。

  特点:如果授权时,用户不存在,直接自动创建用户

4. 删除权限

revoke 权限的名称 on  数据库.表名  from  用户名@“主机名”;

revoke  all   on  *.*  from scote@"localhost";

update  mysql.user set   Grant_priv="N"  where user="scote" and  host="localhost";

5.刷新权限列表

  flush privileges;

6.删除用户

  drop  user  用户名@“主机地址”

 子查询:

  当一个查询是另一个查询的条件时,这个查询称之为子查询(内层查询)

  当查询需求比较复杂,一次性查询无法获得结果,需要多次查询时,要用到子查询

案例:

准备数据:

create table emp (id int,name char(10),sex char,age int,dept_id int,job char(10),salary double);
insert into emp values
(1,"刘备","",26,1,"总监",5800),
(2,"张飞","",24,1,"员工",3000),
(3,"关羽","",30,1,"员工",4000),
(4,"孙权","",25,2,"总监",6000),
(10,"刘备2","",26,2,"总监",5800),
(5,"周瑜","",22,2,"员工",5000),
(6,"小乔","",31,2,"员工",4000),
(7,"曹操","",19,3,"总监",10000),
(8,"司马懿","",24,3,"员工",6000);

create table dept(id int primary key,name char(10));
insert into dept values(1,"市场"),(2,"行政"),(3,"财务");
需求:

  财务部有哪些人:

方法一:

  Select *from emp inner join dept on dept.id=emp.dept_id ;

  Select *from emp inner join dept on dept.id=emp.dept_id where dept.name=”财务”;

方法二:

   select *from emp where dept_id=(select id from dept where name="财务");

查平均年龄大于25 的部门名称:

#先求出平均年龄:

  Select avg(age) from emp group by dept_id;

  Select dept_id, avg(age) from emp group by dept_id;

 #再筛选结果

  Select dept_id ,avg(age) as a from emp group by dept_id having a >25;

  Select name from dept where id in (select dept_id from emp group by dept_id having avg(age)>25);



查询每个部门的最高工资的员工信息:

#先查询每个部门的最高工资

  Select dept_id,max(salary) from emp group by dept_id;



select *from emp inner join (select dept_id,max(salary) maxs from emp group by dept_id) as t2 on emp.dept_id=t2.dept_id

where emp.salary=t2.maxs;