• MySQL账户管理


    MySQL账户管理

    MySQL账户管理

    这些天一直都浑浑噩噩的,折腾MySQLInnoDB数据引擎的热备份,折腾了很久,结果也没有折腾出来,心里有很多的挫败感。继而在主从(master replication to slave)配置上学习了下,学习的过程中踩到了不少的坑,最后还成功的完成了主从的配置。学习完主从之后,继续折腾热备份的东西,自己的电脑也不争气,虚拟机经常掉线。可能这一段时间并不适合学习热备份,于是乎转向MySQL账户管理,这一块的内容,在以前的工作学习生涯中经常用到,也去问过DBA大叔帮我配置权限。还记得那个DBA大叔,其实年龄并不是很大,一看就是脾气很好的那种。工作区摆放了三个显示器,显示器上全是不断变化的管理信息,顿时觉得很厉害也很佩服。那个时候我引以为傲的是在工作中,使用存储过程取数据,然后使用程序去调用,使用很长的SQL命令将复杂的业务需求封装解决。当时平台的访问量太小,效率再差的SQL不会被发现。再说没有人关注过代码的执行效率,没有人关心过sql得执行效率。只要上了线,运行ok我们就放心了。那个时候我还是初级程序员,以为所有的复杂逻辑,都可以通过if else 去解决,没有遇到过大并发,没有遇到过大数据。进入目前的这家公司后,开始有意的学习这方面的内容,也逐渐了明白了解决大数据和高并发的解决方案。因为近一周没有写过博客,话题跑的有点远,接下来我们来看下MySQL的账户管理该怎么操作。

    一、MySQL账户体系

    根据账户所具有的权限的不同,MySQL的账户可以分为以下几种:

    服务实例级账号

    如果某用户如root,拥有服务实例级分配的权限,那么该账号就可以删除所有的数据库、连同这些库中的表。

    数据库级别账号

    该账号可以在具有权限的数据库中执行增删改查的所有操作(如果分配了这些权限)。

    数据表级别账号

    该账号可以在具有权限的表上执行增删改查等所有操作(如果分配了这些权限)。

    字段级别的权限

    该账号可以对某些表中具有权限的字段进行操作(取决于所分配的权限)。

    存储程序级别的账号

    该账号可以对存储程序进行增删改查的操作(取决于所分配的权限)

    二、配置权限

    grant 命令语法格式

    grant 权限名称[字段列表] on [数据库资源类型]数据库资源 to MySQL账户1,[MySQL账户2] [with grant option]

    *.* 表示所有数据库,所有数据表

    'account_4'@'%' 表示account_4 账号可以在任意的主机上进行登录。

    创建服务实例级账号

    grant all privileges on *.* to 'account_4'@'%' identified by '123456' with grant option;
    将创建一个名字为account_4的账号,拥有所有的数据库权限,并且具有grant 权限,可以创建其他拥有服务实例权限的其他用户。

    创建数据库实例账号

    grant all privileges on liangzi.* to 'account_5'@'%' identified by '123456' with grant option;
    将创建一个名字为account_5的账号。拥有liangzi 数据库的所有权限,可以随该库中的表进行所有操作。

    创建数据表级别的账号

    grant all privileges on table liangzi.test_1 to 'account_6'@'%' identified by '123456';
    将创建一个名字为account_6 的用户,对langzi数据库中test_1拥有所有的权限。

    由于字段级别的权限并不经常使用,所以不必列举。字段设置国语冗余复杂,则每次MySQL在进行SQL执行的时候回进行同样复杂的权限判断,造成效率降低性能下降,同事也会存在安全隐患。因此简单、易管理的、高可用的权限才是可取的。

    权限的增删改查

    1.增权限

    比如原本的权限为:
    grant select,insert on liangzi.* to 'account_5'@'%' identified by '123456' with grant option;
    想要增加update, delete,alter 权限可以如下操作:
    grant update,delete,alter on liangzi.* to 'account_5'@'%' identified by '123456' with grant option;
    然后使用
    show privileges for account_5;
    mysql> show grants for account_5;
    +-------------------------------------------------------------------------------------------------+
    | Grants for account_5@%                                                                          |
    +-------------------------------------------------------------------------------------------------+
    | GRANT USAGE ON *.* TO 'account_5'@'%'                                                           |
    | GRANT SELECT, INSERT, UPDATE, DELETE, ALTER ON `liangzi`.* TO 'account_5'@'%' WITH GRANT OPTION |
    +-------------------------------------------------------------------------------------------------+

    2、移除权限

    比如原本的权限为:
    grant select,insert on liangzi.* to 'account_6'@'%' identified by '123456' with grant option;
    想要移除insert 权限:
    mysql> revoke insert on liangzi.* from  'account_6'@'%';
    mysql> show grants for account_6;
    +------------------------------------------------------------------+
    | Grants for account_6@%                                           |
    +------------------------------------------------------------------+
    | GRANT USAGE ON *.* TO 'account_6'@'%'                            |
    | GRANT SELECT ON `liangzi`.* TO 'account_6'@'%' WITH GRANT OPTION |
    +------------------------------------------------------------------+

    三、用户管理

    用户管理也无非是增加用户、删除用户之类的。 还记得在装mysql第一次使用的时候,使用了默认密码,进了系统之后无论进行什么操作都需要我设置密码。但是如何设置,提示信息上并没有写。 后来才知道了可以使用:

    set password=password('123456');

    其实这个命令不仅能够设置当前用户的密码,也可以设置其他用户的密码,这个命令的完整格式是:

    set password [for USER] = passowrd('新密码');

    比如公司里一个同事离职了,我需要删除他的mysql权限,可以使用如下的命令:

    drop user USER_NAME;
    
    drop user roverliang;

    增加用户可以使用:

    create user 'roverliang'@'%' identified by '123456';
    添加的格式为:
    create user 'USER_NAME'@'HOST' identified by 'PASSOWRD';
    
    其实这个命令相当复杂,由这个命令创建出来的用户不具有任何权限,仅仅能够登录系统。因此创建用户的时候,可以使用grant 命令,加用户加权限一步到位。
  • 相关阅读:
    队列(顺序存储结构)
    2015计划
    iframe子窗口父窗口方法调用和元素获取
    Ajax关于重定向
    Java国际化资源文件的选择
    eclipse自动部署web应用程序到tomcat webapps
    从给定字符串结尾获取指定字节长度的字符串
    Winform的一些不知道啥东西
    C# 2008核心编程 2013-09-14
    C# 2008核心编程 2013-09-10
  • 原文地址:https://www.cnblogs.com/roverliang/p/6444512.html
Copyright © 2020-2023  润新知