資料庫的許可權管理

薛才昌發表於2018-09-17

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;

 

 

  

 

相關文章