• 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统计逗号分隔字段元素的个数
    MySQL学习(十)索引
    MySQL学习(十一)为什么不推荐使用uuid和雪花id
    1.计算机系统概论
    MySQL学习(十二)排序原理
    MySQL学习(九)frm与ibd了解
    MySQL学习(十一)B树与B+树了解
    MySQL 某一列的值加入到另一列
    MySQL学习(十三)InnoDB
    IOSios微信打开网页键盘弹起后页面上滑,导致弹框里的按钮响应区域错位
  • 原文地址:https://www.cnblogs.com/future-dream/p/13901524.html
Copyright © 2020-2023  润新知