MySQL多表&事务04DCL3

1、SQL分类

    1. DDL:操作数据库和表

  2. DML:增删改表中数据

  3. DQL:查询表中数据

  4. DCL:管理用户,授权

2、DBA:数据库管理员,专门管理公司的数据库。

  去了公司,dba会给员工创建一个新的用户,并且对用户进行一些权限的授予,我可以使用自己的用户登录数据库来访问数据库。所有的开发人员访问同一个数据库但是使用自己的账号。不可能使用root用户,因为root用户权限太高了,操作太危险。

3、DCL:管理用户,授权

   1. 管理用户

    a. 添加用户:CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

      示例1:CREATE USER 'zhangsan'@'localhost' IDENTIFIED BY '123'; -- 查询结果如下:   

         

      示例2:CREATE USER 'lisi'@'%' IDENTIFIED BY '123'; -- 查询结果如下:

       

      cmd终端登录:

      >mysql -uzhangsan -p123

      >mysql -ulisi -p123                -----------由此可见,%也是可以在当前主机登录的

    b. 删除用户:DROP USER '用户名'@'主机名';

      示例1:DROP USER 'zhangsan'@'localhost';

      示例2:DROP USER 'lisi'@'%';

    c. 修改用户密码:

      i. UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名';

        UPDATE USER SET PASSWORD = PASSWORD('abc') WHERE USER = 'lisi';

      ii. SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');

        SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123');

      注意:mysql中忘记了root用户的密码?

        1. cmd--> net stop mysql 停止mysql服务

         * 需要以管理员身份运行该cmd,否则报系统错误。

            

         2. 使用无验证方式启动mysql服务:mysqld --skip-grant-tables,执行后第二行光标一直在闪烁

         3. 打开新的cmd窗口,直接输入mysql命令,敲回车就能连接数据库成功

         4. 新窗口执行use mysql;

         5. 新窗口执行修改密码命令update user set password = password('新密码') where user = 'root';

         6. 关闭两个cmd终端窗口

         7. 菜单栏右键打开任务管理器,手动结束mysqld.exe 的进程

         8. 以管理员身份运行cmd终端,启动mysql服务:net start mysql

         9. 使用新密码登录:mysql -uroot -proot

    d. 查询用户:

      -- 1. 切换到mysql数据库

        USE mysql;
      -- 2. 查询user表
        SELECT * FROM USER; -- Host=localhost表示root用户可以在当前主机上登录;通配符 % 表示可以在任意主机使用用户登录数据库,表示远程访问。

        

   2. 权限管理

    a. 查询权限:

     语法:SHOW GRANTS FOR '用户名'@'主机名';

     示例1:SHOW GRANTS FOR 'lisi'@'%';

      

       usage表示只有登录权限,use db3;执行就会报没访问权限

     示例2:SHOW GRANTS FOR 'root'@'%'; 

      

       root用户有所有权限。

    b. 授予权限:

      语法:grant 权限列表 on 数据库.表名 to '用户名'@'主机名';

      示例1:GRANT SELECT ON db3.account TO 'lisi'@'%';

        给lisi赋予查询权限后,通过show tables只能看到db3中的account表,其他表看不到,且只有account表的查询权限。

      示例2:GRANT SELECT,DELETE,UPDATE ON db3.account TO 'lisi'@'%';

      示例3:给zhangsan用户授予所有权限,在任意数据库任意表上 GRANT ALL ON *.* TO 'zhangsan'@'localhost';

    c. 撤销权限:

      语法:REVOKE 权限列表 ON 数据库.数据表 FROM '用户名'@'主机名';

       示例1:REVOKE UPDATE ON db3.account FROM 'lisi'@'%';

       示例2:REVOKE ALL ON *.* FROM 'lisi'@'%';

原文地址:https://www.cnblogs.com/ajing2018/p/15706620.html