一. 概述

  在了解前两篇的权限系统介绍后,这篇继续讲账号的管理,这些管理包括账号的创建,权限更改,账号删除等。用户连接数据库的第一步都是从账号创建开始。

  1.  创建账号

    有两种方法可以用来授权账号:(1) 是使用grant来授权账号,(2) 是直接操作权限表。 使用grant操作简单,出错率更少。使用grant授权账号时,需先创建用户。

-- 在上一篇中有演示创建一个z1@localhost用户,脚本如下:
CREATE USER 'z1'@'localhost' IDENTIFIED BY '';
-- 语法如下
CREATE USER [IF NOT EXISTS]
user [auth_option] [, user [auth_option]] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH resource_option [resource_option] ...]
[password_option | lock_option] ...

    创建用户,更多的语法选项,请参考官方文档,里面也有很多创建用户案例:https://dev.mysql.com/doc/refman/5.7/en/grant.html

-- grant 授权语法
GRANT
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user [auth_option] [, user [auth_option]] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH {GRANT OPTION | resource_option} ...]

    在创建完用户账号后,就需要使用grant 来授权相应的权限,语法请参考官方文档:https://dev.mysql.com/doc/refman/5.7/en/grant.html

  

  2.  授权给用户z1, 可以在所有数据库上执行所有权限,但只能从本地进行连接。

-- 为z1@localhost用户给予所有权限,但只能从本地连接
GRANT ALL PRIVILEGES ON *.* TO z1@localhost

    此时user权限表的z1用户,所有权限字段值都为 Y (除了Grant_priv), 上篇z1用户对tables_priv权限表和columns_priv权限表写入的数据不会改变,这是因为全局权限覆盖局部权限。
    

  3.  在上面的基础上,增加对z1的grant权限

GRANT ALL PRIVILEGES  ON  *.* TO z1@localhost WITH GRANT OPTION

    

  4. 在上面的基础上,将z1密码123456修改密码为: 654321

  -- 用户z1的authentication_string将被修改
GRANT ALL PRIVILEGES ON *.* TO z1@localhost IDENTIFIED BY '' WITH GRANT OPTION
Warning Code :
Using GRANT statement to modify existing user's properties other than privileges is deprecated and will be removed in future release.
Use ALTER USER statement for this operation.
提示: grant是用来修改属性而不是特权,在以后的版本中删除,推荐使用ALTER USER

    下面尝试登录下,在Xshell中查看ip地址是本机。使用z1连接数据库成功,如下面所示:
    
    
    但通过windows客户端电脑,使用sqlyog工具来连接运程mysql服务器时,报错误代码1045,原因是z1用户连接的Host只能是localhost也就是本机。连接错误如下所示:
    

  5. 在上面的基础上,授权可以是任意ip来连接mysql服务器

-- 直接修改表的z1 连接来源限制。允许任意地址连接
UPDATE mysql.`user` SET `Host`='%' WHERE `Host`='localhost' AND `User`='z1'
-- 刷新权限
FLUSH PRIVILEGES

    

  上面修改后,host已改变值,此时再使用客户端的sqlyog工具来连接远程mysql服务器时,就成功了。mysql 数据库中是通过user表的host字段来进行控制,host可以是以下类型的赋值:

Host

User

匹配的连接

%

'z1'

z1 可以从任何主机来连接

%

''

任何用户,可以从任何主机来连接

%.loc.gov

'z1'

z1 可以从loc.gov域的任何主机来连接

172.168.18.200

'z1'

z1 可以从172.168.18.200的ip地址的主机来连接

172.168.18.%

'z1'

z1 可以从172.168.18 的网段的任何主机来连接

    如果用户连接进来,user权限表中有多个匹配,原则是:

      (1) 服务器在启动读入user表后进行排序(SELECT  * FROM  mysql.`user` ORDER BY `Host` DESC)。
      (2) 然后当用户试图连接时,以排序的顺序浏览user表每行。
      (3) 服务器使用与客户端和用户名匹配的第一行。
    下面是user权限表数据排序后,存入在服务器内存中。
        
    注意:mysql 数据库的user 表中host 的值为*或者空,表示所有外部IP都可以连接,但是不包括本地服务器localhost,因此,如果要包括本地服务器,必须单独为localhost 赋予权限。

  6.其它事项

    6.1 授权用户管理权限时(51篇中讲到权限列分为:普通权限和管理权限),管理权限如:super,process,file 等不能够指定某个数据库, on后面必须跟 *.*,如下所示:

  grant super,process,file on *.*  to  z1@localhost

    6.2 直接操作权限表也可以进行权限的创建和修改,其实grant 操作的本质就是修改权限表后进行权限的刷新。如上面的第5点修改任意ip,是直接操作的权限表。下面二个脚本是同样的效果,如下所示:

-- 使用grant
grant select,insert,update,delete on test1.* to 'z2'@'%' identified by '';
-- 直接操作权限表
insert into db (host,db,user,select_priv,insert_priv,update_priv,delete_priv)
values('%','test1','z2','Y','Y','Y','Y');

mysql 开发进阶篇系列 53 权限与安全(账号管理的各种权限操作 上)的更多相关文章

  1. mysql 开发进阶篇系列 55 权限与安全(安全事项 )

    一. 操作系统层面安全 对于数据库来说,安全很重要,本章将从操作系统和数据库两个层面对mysql的安全问题进行了解. 1. 严格控制操作系统账号和权限 在数据库服务器上要严格控制操作系统的账号和权限, ...

  2. mysql 开发进阶篇系列 47 物理备份与恢复(xtrabackup 的完全备份恢复,恢复后重启失败总结)

    一. 完全备份恢复说明 xtrabackup二进制文件有一个xtrabackup --copy-back选项,它将备份复制到服务器的datadir目录下.下面是通过 --target-dir 指定完全 ...

  3. mysql 开发进阶篇系列 46 物理备份与恢复( xtrabackup的 选项说明,增加备份用户,完全备份案例)

    一. xtrabackup 选项说明 在操作xtrabackup备份与恢复之前,先看下该工具的选项,下面记录了xtrabackup二进制文件的部分命令行选项,后期把常用的选项在补上.点击查看xtrab ...

  4. mysql 开发进阶篇系列 42 逻辑备份与恢复(mysqldump 的完全恢复)

    一.概述 在作何数据库里,备份与恢复都是非常重要的.好的备份方法和备份策略将会使得数据库中的数据更加高效和安全.对于DBA来说,进行备份或恢复操作时要考虑的因素大概有如下: (1) 确定要备份的表的存 ...

  5. mysql 开发进阶篇系列 20 MySQL Server(innodb_lock_wait_timeout,innodb_support_xa,innodb _log_*)

    1. innodb_lock_wait_timeout mysql 可以自动监测行锁导致的死锁并进行相应的处理,但是对于表锁导致的死锁不能自动监测,所以该参数主要用于,出现类似情况的时候等待指定的时间 ...

  6. mysql 开发进阶篇系列 10 锁问题 (相同索引键值或同一行或间隙锁的冲突)

    1.使用相同索引键值的冲突 由于mysql 的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但如果是使用相同的索引键,是会出现锁冲突的.设计时要注意 例如:city表city_ ...

  7. mysql 开发进阶篇系列 54 权限与安全(账号管理的各种权限操作 下)

    1. 查看权限 -- 如果host值不是%, 就要加上host值,下面查看bkpuser用户权限(6个权限, 限本地连接) SHOW GRANTS FOR bkpuser@localhost; -- ...

  8. mysql 开发进阶篇系列 52 权限与安全(系统四个权限表的粒度控制关系)

    一.概述 接着上篇的权限介绍,当用户进行连接的时候,权限表的存取过程有以下两个阶段: (1) 先从user表中的host,user, authentication_string 这3个字段中判断连接的 ...

  9. mysql 开发进阶篇系列 51 权限与安全(权限表user,db详细介绍 )

    一.概述 mysql 的权限系统主要用来对连接到数据库的用户进行权限验证,以此来判断此用户是否属于合法用户,以及合法用户给予的相应数据库权限.下面将介绍权限系统的工作原理,以及将要熟练掌握账号的管理和 ...

随机推荐

  1. 继承中的prototype与_proto_

    继承的核心是原型链,它的基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法. 例:SubType.prototype = new SuperType (); var instance = ...

  2. WPF中的数据绑定

    WPF中的数据绑定 基础概念 System.Windows.Data.Binding,他会把两个对象(UI对象与UI对象之间,UI对象与.NET数据对象之间)按照指定的方式粘合在一起,并在他们之间建立 ...

  3. Latex引用\ref

    在等式/图/定理等后面加\label{name} 正文引用方法:等式使用 \eqref{name},非等式引用可使用\ref{name}.

  4. centos7安装配置nfs

    操作系统版本:3.10.0-123.el7.x86_64 192.168.137.11  nfs服务端 192.168.137.10  nfs客户端 一.安装nfs服务端(在192.168.137.1 ...

  5. ROS学习笔记(一) : 入门之基本概念

    目录 基本概念 1. Package 2. Repositories 3. Computation Graph 4. Node 5. Master 6. Message 7. Topic 8. Ser ...

  6. Note of Python Math

    Note of Python Math math 库是Python 提供的内置数学类函数库,而其中复数类型常用于科学计算,一般计算并不常用,因此math 库不支持复数类型.math 库一共提供4个数学 ...

  7. IT行业三大定律

    1:摩尔定律 该定律由Inter公司创始人戈登摩尔提出,摩尔定律指出:每一年半计算机等IT产品的性能会翻一番:或者说相同性能的产品在一年半后价格会降一半.   表现为:为适应摩尔定律,IT公司必须在较 ...

  8. STM32-跑马灯实验

    实验环境: STM32开发板 Keil uVision4 FlyMcu.exe 一. 建立文件夹 1.建立跟文件夹"BASE"(名称任意),再在其下建立四个子文件夹 2. 在&qu ...

  9. js中树结构根据条件查找节点返回节点路径的一些思路

    今天在项目中遇到一个问题,需要根据数据库中记录的树结构节点id获取该记录所在目录节点的路径. 大致想法,首先定义变量保存当前路径,然后递归遍历该树节点,在遍历的过程中将遍历到的节点加入到当前路径中,找 ...

  10. kali入门

    第一章:入门kalilinux By:鬼尘 第一章基本上就是涵盖以下的主题: ·kali的发展简史 ·kali的一般用途 ·kali的下载与安装 ·kali的配置与更新 在本章结尾部分,我们还会介绍k ...