相关推荐recommended
MySQL用户与权限管理
作者:mmseoamin日期:2024-04-27

用户与权限管理

  • 1. 用户管理
    • 1.1 创建用户
    • 1.2 修改用户
    • 1.3 删除用户
    • 1.4 用户密码相关
      • 1.4.1 密码修改
      • 1.4.2 密码管理机制
      • 2. 权限管理
        • 2.1 授予权限原则
        • 2.2 查看权限
        • 2.3 授予权限
        • 2.4 收回权限
        • 3. 权限表
        • 4. 访问控制

          1. 用户管理

          • MySQL用户分为root用户和普通用户;
          • root用户:超级管理员,拥有所有权限;
          • 普通用户:只拥有被赋予的指定权限

            1.1 创建用户

            • 执行创建用户语句的用户必须拥有CREATE USER权限;
            • 每添加一个用户,mysql.user表中会新增一条对应记录;
            • 新增用户没有任何权限,需要为其赋予指定权限;
            • 如果新增用户已经存在,会提示错误信息;
            • 基本语法:CREATE USER 用户名 [IDENTIFIED BY '密码'][,用户名 [IDENTIFIED BY '密码']];
            • 可使用CREATE USER语句同时创建多个用户,并为其指定登录密码;
            • 用户名参数表示新建用户的账户,由 用户(User) 和 主机名(Host) 构成,若不指定主机名,则默认为%表示支持所有主机登录;

              MySQL用户与权限管理,在这里插入图片描述,第1张

              1.2 修改用户

              • 用户对应信息存储在mysql.user表中,因此可直接通过修改用户对应表数据修改用户;
              • 只能修改用户名或该用户对应主机;
              • 基本语法:UPDATE mysql.user SET USER='修改用户名' WHERE USER='指定用户名';
              • 在执行修改语句后,切记使用FLUSH PRIVILEGES;刷新权限;

                1.3 删除用户

                • 基本语法:DROP USER user[,user]…;;
                • 可同时删除多个用户,如果不指定用户对应主机名,则**默认删除host=%**的指定用户;

                  MySQL用户与权限管理,在这里插入图片描述,第2张

                  1.4 用户密码相关

                  1.4.1 密码修改

                  修改当前用户密码: 当前用户登录状态下

                  # 方式一:
                  ALTER USER USER() IDENTIFIED BY '新密码';
                  # 方式二:
                  SET PASSWORD='新密码';
                  

                  修改其他用户密码: 当前用户(必须拥有修改其他用户密码的权限,比如root用户)登录状态下

                  # 方式一:
                  ALTER USER 具体用户 IDENTIFIED BY '新密码';
                  # 方式二:
                  SET PASSWORD FOR  具体用户='新密码';
                  

                  1.4.2 密码管理机制

                  MySQL用户与权限管理,在这里插入图片描述,第3张

                  2. 权限管理

                  • MySQL用户只有在被赋予指定权限后,才能执行相关操作;
                  • root用户拥有所有权限,普通用户只拥有被赋予的权限;

                    2.1 授予权限原则

                    MySQL用户与权限管理,在这里插入图片描述,第4张

                    2.2 查看权限

                    • 查看MySQL支持的所有权限:show privileges;;

                      MySQL用户与权限管理,在这里插入图片描述,第5张

                    • 查看当前用户拥有的权限:SHOW GRANTS;或SHOW GRANTS FOR CURRENT_USER; 或SHOW GRANTS FOR CURRENT_USER();
                    • 查看其他用户拥有的权限:SHOW GRANTS FOR 'user'@'主机地址' ;,前提是当前用户拥有查看其他用户权限的权限;

                      2.3 授予权限

                      • 当前用户拥有为其他用户赋予权限的权限(比如root用户);
                      • 给用户授权的方式有 2 种,分别是通过把 角色赋予用户给用户授权 和 直接给用户授权;
                      • 基本语法:GRANT 权限1,权限2,…权限n ON 数据库名称.表名称 TO 用户名@用户地址 [IDENTIFIED BY ‘密码口令’];;
                      • 赋予权限时如果发现没有该用户,则会直接新建一个用户;
                      • 使用GRANT ALL PRIVILEGES为某用户赋予所有权限时,不包括为其他用户赋予权限的权限;
                      • 若要使某用户可为其他用户赋予权限,则在为该用户赋予权限时添加WITH GRANT OPTIN选项即可;

                        2.4 收回权限

                        • 基本语法:REVOKE 权限1,权限2,…权限n ON 数据库名称.表名称 FROM 用户名@用户地址;;
                        • 执行收回权限操作后,用户需重新登录后才会生效;

                          3. 权限表

                          • MySQL数据库使用权限表控制用户对数据库的访问;
                          • 权限表存放在MySQL自带库mysql数据库中,涉及到该库下的user、db表,以及tables_priv表、columns_priv表和procs_priv表等;
                          • MySQL数据库启动时,服务器将权限表中的信息读入内存;

                            4. 访问控制

                            • 访问控制过程分为连接核实阶段和请求核实阶段;
                            • 连接核实阶段:MySQL服务器接收到用户请求后,会使用user表中的host、user和authentication_string这3个字段匹配客户端提供信息。服务器只有在user表记录的Host和User字段匹配客户端主机名和用户名,并且提供正确的密码时才接受连接。如果连接核实没有通过,服务器就完全拒绝访问;否则,服务器接受连接,然后进入阶段2等待用户请求。
                            • 请求核实阶段:

                              MySQL用户与权限管理,在这里插入图片描述,第6张