MySQL——安全性语言及多用户事务管理

一、MySQL的用户管理

1.用户介绍

在MySQL中,会涉及到用户的连接登录的内容,这些内容都存在在MySQL的mysql数据库user表中,在这个表中,涉及到这个用户的权限问题,包括以下内容。

1.是否可读数据库
2.是否可以读写数据库
3.有哪些数据库的操作权限

通常会在数据库中,有一个超级权限用户默认为root

2.用户操作

2.1增加用户

SQL语法

CREATE USER 用户 [IDENTIFIED BY ‘password’];
其中用户=’用户名’@’主机名’

例子

CREATE USER ALEX@LOCALHOST 
IDENTIFIED  BY 123456;

2.2增加权限

SQL语法

GRANT privi_type ON table_name TO 用户;
# Privi_type: select ,delete, update ,insert, create, drop,usage   all…..
# with grant option 表示允许该用户将权限授予其他用户
# 注:若指定密码,则原密码将会被覆盖,如果权限授予一个不存在的用户,则MySQL会自动创建这个用户,但必须为该用户指定密码。
# 用户=用户名@主机名

2.3删除用户

SQL语句

DROP USER 用户;

其中用户:用户=’用户名’@’主机名’

2.4回收权限

使用REVOKE命令可以回收授予的权限,语法格式如下:
REVOKE priv_type ON {表名|数据库名} FROM 用户;
或REVOKE ALL PRIVILEDGES, GRANT OPTION FROM 用户;
注:只有拥有当前数据库全局CREATE或者UPDATE权限的用户才能使用REVOKE命令。
例如:
revoke update on dbst.student from ALEX@localhost;
revoke ALL ON DBST.*  from  ALEX@LOCALHOST

2.5修改用户

UPDATE MYSQL.USER SET PASSWORD= PASSWORD(‘新密码’) WHERE USER=‘用户’;

例如:
UPDATE MYSQL.USER SET PASSWORD=PASSWORD(‘123’) WHERE USER=‘ALEX’ AND HOST=‘LOCALHOST’;

flush privileges//刷新权限(必须步骤)

update mysql.user set authentication_string=123 where user=‘alex and host=loacalhost;

2.6查找用户

# 从mysql中选取数据
select  * from user

2.7查看权限

# 使用下面的指令查看用户权限
show grants for  ‘alex’@’localhost’;

二、MySQL的事务管理

1.事务概念

事务是由作为一个单独单元的一个或多个SQL语句组成。事务具有以下的几个特性(ACID)

ACID原则(事物具有的特性)
A:原子性(Atomicity):事务是一个或多个行为捆绑在一起组成一个单独的工作单元,事务中的动作要么都发生,要么都不发生.
C:一致性(Consistent):即在事务开始之前和结束之后,数据库的完整性约束没有被破坏.
I:隔离性(Isolation):指的是在并发环境中,事务之间互相影响的程度(即并发事务间数据的可见程度).由并发事务所做的修改必须与任何其他并发事务所做的修改隔离.
D:持久性(Durability):一旦事务完成,事务的结果应该持久化,用来保证即使系统崩溃也不会破坏事务的结果.

2.并发控制

1.丢失修改:两个不同的事务同时获得了相同的数据,又都对这个数据进行了修改,那么先提交的事务的更新就会被后提交事务的更新覆盖掉。
2.脏读(未提交读) :一个事务正在访问数据,而其他事务正在更新该数据,但尚未提交,此时会发生脏读问题,即第一个事务所读取的数据是“脏”的。
3.不可重复读:在一个事务内多次读同一数据,在该事务还没有结束时,另外的事务也访问该数据并对其做修改,从而导致第一个事务两次读取的数据不一样
4.幻读:有两种情况
(1):事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按照相同条件读取数据时,发现某些记录神秘的消失了.
(2):事务T1按一定条件从数据库中读取了某些数据记录后,事务T2插入了一些记录,当T1再次按照相同条件读取数据时,发现多了一些记录.

3.四种隔离级别

四级隔离级别:定义用户之间隔离和交互的程度
1.读未提交(read uncommitted):可以读到其他事务还没有提交的数据,但不允许丢失修改,会导致大量数据变化。一级*协议
2.读已提交(read committed):可以看到其他事务添加的新纪录,而且其他事务对现存记录做出的修改一旦被提交,也可以看到,避免丢失修改和脏读。二级*协议
3.可重复读(repeatable read):当前在执行的事务的变化无法被看到,同一事务中执行select数次结果都相同,避免丢失修改、脏读和不可重复读。增强的二级*协议
4.可串行化(serializable):提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行,避免所有并发控制问题。三级*协议

注:MySQL默认为repeatable read隔离级别

三、事务控制

1.控制语句

MYSQL事物控制语句
begin   //开始一个事物
commit  //提交一个事物
rollback  //回滚一个事物

Set autocommit ={0|1}    //为0是不自动提交, 为1是自动提交

2.事务安全

在pymysql中,如果不使用commit提交添加的事务,数据库中会出现这个数据,但是在此使用就会出现bug,因此pymysql在一定的情况下,属于线程不安全。

MySQL——安全性语言及多用户事务管理

上一篇:ogg oracle同步到PG的问题积累


下一篇:JS-使用工厂方法创建对象