• 数据库的权限管理


    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 字段。

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

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

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

    3. 删除权限

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

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

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

    4.刷新权限列表

     flush privileges;

    5.删除用户

     

     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;

      

  • 相关阅读:
    spring boot 配置时区差别
    Java 中序列化与反序列化引发的思考?
    Http 状态码总结
    Springboot
    ConcurrentHashMap 实现缓存类
    C#基础(二)拆箱与装箱,循环与选择结构,枚举
    C#基础知识(一)自己总结的。。。
    贪吃蛇大作战双人版加强版完整代码加详细步骤,不懂问博主 啦啦啦。
    C#数组随机生成四个随机数
    C#添加背景音乐
  • 原文地址:https://www.cnblogs.com/xuecaichang/p/9663288.html
Copyright © 2020-2023  润新知