• 【MySQL系列】MySQL的用户管理


    「前言」文章内容大致是MySQL的用户管理。

    「归属专栏」MySQL

    「主页链接」个人主页

    「笔者」枫叶先生(fy)

    MySQL

    一、用户管理

    • MySQL与Linux类似,也分普通用户的root用户
    • 如果只能使用root用户,这样存在安全隐患,这时就需要使用MySQL的用户管理,对用户进行权限管理

    1.1 用户信息

    在MySQL里,默认带有一个mysql的数据库
    在这里插入图片描述
    该数据库中有一张user
    在这里插入图片描述
    该表存放的就是MySQL用户相关的信息(\G按行打印)
    在这里插入图片描述
    部分字段说明:

    • user:表示该用户的用户名
    • host:表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆,%表示可以从任意地方登录
    • authentication_string:用户密码通过password函数加密后形成的字符串
    • *_privxxx_priv):表示用户拥有的权限,Y拥有该权限,N没有

    查看当前用户

    select user();
    
    • 1

    在这里插入图片描述
    注:root是用户名,localhost是主机名

    1.2 创建新用户

    创建用户的SQL如下:

    create user '用户名'@'登陆主机/ip' identified by '密码';
    
    • 1

    创建一个用户名为test,可以从任意地方登录的用户

     create user 'test'@'%' identified by '123123aa';
    
    • 1

    注:%表示可以从任意地方登录,是localhost,表示只能从本机登陆

    MySQL本身的认证级别比较高,因此创建用户时设置的密码不能太简单,否则会出现报错,这时你可以选择将密码设置复杂一些,也可以对密码相关的设置进行调整

    要降低MySQL输入密码的安全强度,可以通过修改validate_password的相关变量来实现

    查看当前的validate_password相关变量

    show variables like 'validate_password%';
    
    • 1

    在这里插入图片描述
    validate_password_policy的默认值为1,表示密码必须包含数字、小写字母、大写字母和特殊字符。将其设置为0将禁用这些要求

     set global validate_password_policy=0;
    
    • 1

    在这里插入图片描述
    创建新用户成功后,该用户的相关信息也就被写入到刚才的user表中了,进行查看该用户(信息太多,进行过滤)

     select user,host,authentication_string from user;
    
    • 1

    在这里插入图片描述
    可以用新创建的普通用户来连接MySQL服务器
    在这里插入图片描述
    创建的这个用户可以从任意地方登录,因此如果你在Windows下也安装了MySQL,那么就可以在Windows的cmd窗口进行远程登录
    在这里插入图片描述
    注意

    • 在MySQL里涉及到密码password,该SQL不会被历史记录下来
    • 注意,不要轻易添加一个可以从任意地方登陆的用户,进行测完就删除(不然容易黑客挨打)

    1.3 删除用户

    删除用户语法如下:

    drop user '用户名'@'主机名';
    
    • 1

    例如,删除上面的test用户

    drop user 'test'@'%';
    
    • 1

    在这里插入图片描述

    1.4 修改用户密码

    自己改自己密码

    语法如下:

    set password=password('新的密码');
    
    • 1

    root用户修改指定用户的密码

    语法如下:

    set password for '用户名'@'主机名'=password('新的密码')
    • 1

    二、数据库的权限

    • 如果一个用户只需要访问MySQL中的某一个数据库,甚至数据库中的某一个表,那么可以为其创建一个普通用户
    • 并为该用户赋予对应的权限,而不让该用户看到数据库中的其他数据,防止该用户对其他数据进行误操作

    MySQL数据库提供的权限列表

    在这里插入图片描述
    注意:新创建的用户没有任何权限,因此创建用户后需要给用户授权

    2.1 给用户授权

    刚创建的用户没有任何权限,需要给用户授权,语法如下:

    grant 权限列表 on.对象名 to '用户名'@'登陆地址/ip' [identified by '密码']
    
    • 1

    说明:

    • to:to后面跟的是用用户,表示给哪一个用户授权
    • 库名.对象名:表示要授予用户哪个数据库下的哪个对象(表)的权限
    • 例如,*.* : 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)
    • 库.* : 表示某个数据库中的所有数据对象(表,视图,存储过程等)
    • identified by可选项:如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户
    • 权限列表:表示要授予用户何种权限,多个权限之间用逗号隔开
    -- 权限列表,例如
    grant select on ... -- 赋予select权限
    grant select, delete, create on -- 表示赋予select, delete, create权限
    grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限
    
    • 1
    • 2
    • 3
    • 4

    创建一个新用户zhangsan,然后通过一些命令可以查看该用户现有的权限

    show grants for '用户名'@'登录地址';
    
    • 1

    例如:

     show grants for 'zhangsan'@'localhost';
    
    • 1

    在这里插入图片描述

    • 创建用户后该用户默认会有USAGE权限,该权限只能用于数据库登录,不能执行任何操作

    查看该用户的数据库,只有一个系统自带的,root用户下的数据库普通用户看不到
    在这里插入图片描述
    在root用户下创建一个test_db的数据库,授予zhangsna用户在test_db数据库下所有对象的select权限

    grant select on test_db.* to 'zhangsan'@'localhost';
    
    • 1

    在这里插入图片描述

    注:*.*表示所有数据库的所有对象,库名.*表示某个数据库的所有对象(表、视图、存储过程等)

    此时查看该用户的数据库,就能查看到该数据库了
    在这里插入图片描述
    该用户目前只能查看表中的信息,而不能对表中的数据进行其他操作,如果需要进行其他操作,需要赋予相应的权限
    在这里插入图片描述
    下面将test_db该数据库的所有权限赋予给该用户,授权之后该用户就可以对该数据库进行任何操作了(不演示了)

     grant all on test_db.* to 'zhangsan'@'localhost';
    
    • 1

    在这里插入图片描述

    注意:如果发现赋权限后,没有生效,执行如下指令:

    flush privileges;
    
    • 1

    2.2 回收用户权限

    回收用户权限SQL语法如下:

    revoke 权限列表 on.对象名 from '用户名'@'登陆地址/ip';
    
    • 1

    回收权限的语法与授权语法相似,不解释了

    例如,将zhangsan用户在test_db数据库的所有权限进行回收

    revoke all on test_db.* from 'zhangsan'@'localhost';
    
    • 1

    在这里插入图片描述
    注意:如果回收权限时该用户正在使用对应数据库,那么回收权限后该用户仍然拥有对应的权限,只有下一次该用户再进入该数据库时新权限才会起作用
    --------------------- END ----------------------

    「 作者 」 枫叶先生
    「 更新 」 2023.9.13
    「 声明 」 余之才疏学浅,故所撰文疏漏难免,
              或有谬误或不准确之处,敬请读者批评指正。
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    为应用程序接入阿里云CDN优化网站访问速度
    用动态表动态生成DEV Gridview
    Flexbox设计H5应用网页布局
    东华大学 2022 oj c++ 无超纲写法 素数表
    ESP8266-Arduino编程实例-LTR390紫外光传感器驱动
    《C++进阶--11.文件操作》
    Agile Management 2
    ESP8266-Arduino编程实例-三路红外寻迹传感器驱动
    优化理论20---插值法: Hermite插值法、龙格现象、分段插值、样条插值
    数据的存储--MongoDB文档存储
  • 原文地址:https://blog.csdn.net/m0_64280701/article/details/132781680