• MySQL权限与安全管理之权限表与账户管理


    在这里插入图片描述

    MySQL权限与安全管理之权限表与账户管理

    MySQL用户可以分为root用户和普通用户。root用户是超级管理员,拥有所有权限,包括创建用户,删除用户和修改用户的密码等管理权限;普通用户只拥有被授予的各种权限。

    权限表

    MySQL服务器通过权限表来控制用户对数据的访问,权限表存放在MySQL数据库中,由MySQL_install_db脚本初始化。存储账户权限信息的表主要有user、db、host、table_priv、columns_priv和procs_priv.

    user表

    user表记录允许连接到服务器的账号信息,里面的权限是全局级的。

    用户列

    user表的用户列包括Host、User、authentication_string,分别表示主机名、用户名和密码。用户连接服务器,输入的账户信息中的用户名、主机名和密码三值与User表中对应匹配的时候才允许建立连接。

    权限列

    决定用户权限。包括查询权限、修改权限等普通权限,还包括了关闭服务器、超越权限和加载用户等高级权限。普通权限用于操作数据库;高级权限用于数据库管理。

    user表中对应的权限是针对所有用户数据库的。字段值的类型为ENUM,默认值为N。如果要修改权限,可以使用GRANT语句或UPDATE语句更改user表的字段来修改用户对应的权限。

    安全列

    安全列只有六个字段,两个是ssl相关的,两个是x509相关的,另外两个是授权插件相关的。ssl用于加密;x509标准可用于标识用户;Plugin字段标识可以用于验证用户身份的插件。可以通过SHOW VARLABLES LIKE 'have_openssl'语句来查询服务器是否支持ssl功能。

    资源控制列

    资源控制列:限制用户使用的资源

    (1)max_questions----用户每小时允许执行的查询操作次数。

    (2)max_updates----用户每小时允许执行更新的操作次数。

    (3)max_connections----用户每小时允许执行的连接操作次数。

    (4)max_users_connections----用户允许同时建立连接的次数。

    一小时用户操作次数超过资源控制限制,用户将被锁定,直到下一小时才可以执行对应操作。可以使用GRANT语句更新字段值。

    db表

    db表存储用户对数据库的操作权限,决定哪个主机存取哪个数据库。

    用户列

    用户列字段:Host、User、Db,标识从某个主机连接某个用户对某个数据库的操作权限。

    权限列

    db表中create_routine_priv和alter_routine_priv两个字段表明用户是否有创建和修改存储过程的权限。

    tables_priv表和columns_priv表

    tables_priv表:对表设置操作权限,columns_priv表对表某一列设置权限。

    tables_priv表有8个字段:Host、Db、User、Table_name、Grantor、Timestamp、Table_priv和column_priv

    (1)Host、Db、User、Table_nam 四个字段表示主机名,数据库名、用户名和表名。

    (2)Grantor表示修改该记录的用户。

    (3)Timestamp字段表示修改该记录的时间。

    (4)Table_priv表示对表的操作权限,包括Select、Insert、Update、Delete、Create、Drop、Grant、References、Index和Alter。

    (5)Column_priv字段表示对表中列的操作权限,包括Select、Insert、Update、References。

    columns_priv表有7个字段:Host、Db、User、Table_name、Column_name、Timestamp、Column_priv。其中Column_name用来指定对哪些数据列具有操作权限。

    procs_priv表

    procs_priv表可以对存储过程和存储函数设置操作权限。

    procs_priv表有8个字段:Host、Db、User、Routine_name、Routine_type、Grantor、Timestamp、Proc_priv。

    (1)Routine_name表示存储过程或函数的名称。

    (2)Routine_type表示存储过程或函数的类型。该字段的两个值:FUNCTION(函数)和PROCEDURE(存储过程)

    (3)Grantor是插入或修改该记录用户。

    (4)Proc_priv表示拥有的权限,包括Execute、Alter Routine、Grant 3种。

    (5)Timestamp表示记录更新时间.

    账户管理
    登录和退出MySQL服务器

    查看命令帮助信息:MySQL -help

    常用参数:

    -h 主机名,指定主机名或ip,默认是local host。

    -u 用户名,指定用户名。

    -p 密码,指定登录密码。注意:该参数后面的字符串和-p之前不能有空格。

    -P 端口号,MySQL服务器的默认端口号为3306。

    -e 执行SQL语句。指定了该参数,将在登录后执行-e后面的命令或SQL语句并退出。

    例1:使用root用户登录到本地MySQL服务器的mysql库中,命令如下:

    mysql -h localhost -u root -p mysql
    
    • 1

    例2:使用root用户登录到本地MySQL服务器的test_db数据库,同时执行一条查询语句,命令如下:

    mysql -h localhost -u root -p test_db "DESC person;"
    
    • 1
    新建普通用户

    1.使用CREATE USER语句创建新用户

    CREATE USER语句会添加一个新的MySQL账户。使用CREATE USER语句用户,必须有全局的CREATE USER权限。

    例3:使用CREATE USER语句创建新用户,用户名是chlinrei,密码是123456,主机名是localhost,命令如下:

    CREATE USER 'chlinrei'@'localhost' IDENTIFIED BY '123456';
    
    • 1

    如果只指定用户名部分chlinrei,主机名部分为%,则对所有主机开放权限。

    如果指定用户登录不需要密码,可以省略IDENTIFIED BY部分:

    CREATE USER 'chlinrei'@'localhost' ;
    
    • 1

    2.直接操作MySQL用户表

    使用INSERT语句,必须拥有MySQL数据库的INSERT权限。

    例4:使用INSERT创建新账户,用户名为chlinrei,主机名称为localhost,密码为123456,语句如下:

    INSERT INTO user(Host,User,authentication_string)
    VALUES('localhost','chlinrei',MD5('123456'));
    
    • 1
    • 2
    删除普通用户

    1.使用DROP USER语句删除用户

    DROP USER语句的语法如下:

    DROP USER user[,user];
    
    • 1

    DROP USER语句用于删除一个或多个用户。要使用DROP USER,必须有MySQL数据库的全局create user权限或delete权限。使用GRANT或REVOKE相同的格式为每个账户命名。

    使用DROP USER,可以删除一个账户和其权限,操作如下:

    DROP USER 'user'@'localhost';
    DROP USER;
    
    • 1
    • 2

    第1条语句可以删除user在本地登录权限;第2条语句可以删除来自所有授权表的账户权限记录

    2.使用DELETE语句删除用户

    DELETE 语句基本语法格式如下:

      DELETE FROM MySQL.user WHERE host='hostname' and user='username'
    
    • 1

    host和user为user表中的两个字段,两个字段的组合确定所要删除的账户记录。

    root用户修改自己的密码

    使用UPDATA语句修改root用户密码的语句如下:

    UPDATA mysql.user set authentication_string=MD5("123456") WHERE USER="root" and host="localhost";
    
    • 1

    PASSWORD()函数用来加密用户密码。执行UPDATA语句后,需要执行FLUSH PRIVILEGES语句重新加载用户权限。

    root用户修改普通用户的密码

    1.使用set语句修改普通用户的密码

    使用SET语句修改普通用户密码的语法格式如下:

    SET PASSWORD FOR 'user'@'localhost'='123456';
    
    • 1

    SET语句执行成功,user用户的密码被设置为123456.

    2.使用UPDATE语句修改普通用户的密码

    使用UPDATA语句修改用户密码的语法如下:

      UPDATE MySQL.user SET authentication_string=MD5("123456")  WHERE User="username" AND Host="hostname";
    
    • 1

    MD5()函数用来加密用户密码。执行UPDATE语句后,需要执行FLUSH PRIVILEGES语句重新加载用户权限。在这里插入图片描述

  • 相关阅读:
    Linux常用命令知识点大全(1)
    Django实战项目-学习任务系统-发送短信通知
    自定义表单模型小程序源码系统 带完整的部署教程
    第二章 物理层 | 计算机网络(谢希仁 第八版)
    需求变化频繁的情况下,如何实施自动化测试
    分库分表问题
    【Unity3D】初学加密技巧(反破解)
    vue3渲染函数h的简单使用——定义局部组件
    OpenHarmony 开源电商项目
    红米k40s和红米note11pro哪个值得买 两者配置对比
  • 原文地址:https://blog.csdn.net/Mr_Ren_0_1/article/details/126444074