欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

数据库的权限管理

程序员文章站 2023-11-22 13:57:22
mysql 用户管理 MYSQL是一个tcp服务器 ,用于操作服务器 上的文件数据,接收用户端发送的指令,接收指令时需要考虑安全问题,是不是谁发给我都要 响应? MySQL中 吧文件称为表,在MySQL中自带的MySQL数据库中有4个表用于用户管理的,分别是:优先级从高到低 user->db->ta ......

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;