看了mysql的关于用户权限和安全的管理,感觉看起来还是不太好理解,首先mysql的连接方式是需要核对三个要素:user、passwd、 host。而且这个user和passwd并不是o上面的user和passwd,这个仅仅只是连接到mysql server的一个用户名和密码,而后根据这个user、passwd、 host权限来访问相应的database。这个让接触了快两年o的同学还是很不习惯的。

Mysql登录方式,注意如果不写-h 主机则默认就是-h localhost的主机验证。
C:\Users\Administrator>mysql -h localhost -u xiaoyu -p
Enter password: ******

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| xiaoyu             |

Mysql的权限可以规划为global level,database level,table level,column
level,routine
level五种,每个level级别有相应的权限分类,不过生产环境中还是很少进行太细的权限划分,一般是针对database
level级别的,单个应用例如tomcat
weblogic有相应的用户连接到mysql的database,而root等管理员用户则拥有global level的all
privileges。

例如可以用如下的方式授权用户
mysql> grant all on xiaoyu.* to xiaoyu_mysql@localhost identified by 'xiaoyu_mys
ql';
Query OK, 0 rows affected (0.00 sec)

此时就可以用如下的方式登录mysql server
C:\Users\Administrator>mysql -h localhost -u xiaoyu_mysql -p
Enter password: ************
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 20

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
| xiaoyu             |
+--------------------+
看出此时用-h localhost -u xiaoyu_asm -p xiaoyu_asm可以连接到mysql server去操作xiaoyu database,而别的database则无法操作了。

那么如果新制定的用户不制定密码会如何了。
mysql> grant all on xiaoyu.* to xiaoyu@172.16.0.216;
ERROR 1133 (42000): Can't find any matching row in the user table
mysql> grant all on xiaoyu.* to xiaoyu@localhost;
ERROR 1133 (42000): Can't find any matching row in the user table
mysql> grant all on xiaoyu.* to xiaoyu;
ERROR 1133 (42000): Can't find any matching row in the user table
看出如果新创建的用户如果不指定密码无论是localhost主机,IP地址,还是%的通配符主机都无法创建成功,这个是因为如果不指定密码而mysql.user表中又没有此username和host的记录row,就会报出上面的1133错误。

而加上密码则可以正常授权了,这点需要注意了。
mysql> grant all on xiaoyu.* to xiaoyu@172.16.0.216 identified by 'xiaoyu';
Query OK, 0 rows affected (0.00 sec)

删除用户也要联合host一起删除。
mysql> drop user xiaoyu@172.16.0.216
-> ;
Query OK, 0 rows affected (0.00 sec)

如果不指定主机drop user默认用的是通配符的形式
mysql> grant all on xiaoyu.* to xiaoyu identified by 'xiaoyu';
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for xiaoyu;
+-------------------------------------------------------------------------------
------------------------+
| Grants for xiaoyu@%
                        |
+-------------------------------------------------------------------------------
------------------------+
| GRANT USAGE ON *.* TO 'xiaoyu'@'%' IDENTIFIED BY PASSWORD '*2E8F2ECC253867BAF7
FB6E8A7B17CFE2EB3DA337' |
| GRANT ALL PRIVILEGES ON `xiaoyu`.* TO 'xiaoyu'@'%'

不指定主机删除user后,原来xiaoyu@%记录已经删除了,不指定IP或者主机删除用户删除的其实是user@%的用户,一般建议不要这个删除用户,最好带着主机名或者IP地址
mysql> drop user xiaoyu;
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for xiaoyu;
ERROR 1141 (42000): There is no such grant defined for user 'xiaoyu' on host '%'

修改密码:
那么如何修改密码了,其实mysql的用户 密码 主机登录三要素都存储在mysql.user和mysql.db等五个表中,而上面的授权grant和revoke也只是操作mysql下的这五张表而已。

例如如果我们要修改xiaoyu@172.16.0.216 的密码为mysql
直接修改mysql.user的表中的记录:
mysql> update mysql.user set password=PASSWORD('mysql') where user='xiaoyu' and
host='172.16.0.216';
Query OK, 1 row affected (0.07 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
刷新权限表到内存中,而后就可以用新的密码登录了,当然xiaoyu@172.16.0.216 以前的密码也就作废了。
C:\Users\Administrator>mysql -h 172.16.0.216 -u xiaoyu -pmysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 26
Server version: 5.5.25 MySQL Community Server (GPL)

用grant/revoke语句去修改密码:
mysql> grant all on xiaoyu.* to xiaoyu@172.16.0.216 identified by 'xiaoyu';
Query OK, 0 rows affected (0.00 sec)

C:\Users\Administrator>mysql -h 172.16.0.216 -u xiaoyu -pxiaoyu
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 30
Server version: 5.5.25 MySQL Community Server (GPL)

数据库系统安全:
作为一个数据库是供应用访问和数据存储的,那么相应的数据库的安全措施则是非常重要的,相应的mysql数据库可以用如下三个方面去构造安全的mysql数据库系统。

1 网络:
封闭外界网络连接,这个也就基本杜绝外来连接造成的安全威胁,不过数据库大多是作为应用访问和数据存储的,通信一般是必须的,可以部署应用在mysql
server本机直连mysql 数据库,当然这个要看系统的归档,需要提供网络访问的可以让mysql
server在一个规定的局域网来提供访问,即使提供外网访问的也要控制相应的主机来源,这个在数据库级别也可以控制。

2 主机:减少主机不必要的服务,关闭不必要的端口,还要限制登录主机的用户的权限,对mysqld的数据文件和日志文件权限规划要尽量严格,避免外来用户侵入通过数据文件日志文件恢复。

3 数据库:严格控制来源主机和用户权限,主要是来源主机需要严格控制,尽量不要出现通配符的来访主机访问mysql server。

http://www.dbaxiaoyu.com/archives/577

mysql的用户访问权限规划的更多相关文章

  1. Windows安装MongoDB 4.0并赋予用户访问权限

    第一部分 Windows安装MongoDB-4.0 第一步:下载MongoDB:https://www.mongodb.com/download-center?jmp=nav#community 我目 ...

  2. [App Store Connect帮助]三、管理 App 和版本(8)编辑 App 的用户访问权限

    对于具有“App 管理”.“客户支持”.“开发者”.“营销”或“销售”职能的特定人员(均不具有“访问报告”职能),您可以限制其在 App Store Connect 帐户中对 App 的访问权限. 必 ...

  3. 禁止、允许MySQL root用户远程访问权限

    关闭MySQL root用户远程访问权限: use mysql; update user set host = "localhost" where user = "roo ...

  4. MySQL高级学习笔记(二):mysql配置文件、mysql的用户与权限管理、mysql的一些杂项配置

    文章目录 mysql配置文件 二进制日志log-bin 错误日志log-error 数据文件 两系统 Myisam存放方式 innodb存放方式 如何配置 mysql的用户与权限管理 MySQL的用户 ...

  5. mysql数据库用户和权限管理记录

    一.MySQL用户的基本说明: 1.1 用户的基本结构MySQL的用户:用户名@主机 ■用户名:16个字符以内■主机:可以是主机名.IP地址.网络地址等主机名:www.111cn.net,localh ...

  6. MYSQL指定用户访问指定数据库

    1.使用navicat 1)首先使用root用户新建连接 2)新建mysql用户 3)点击权限,选择添加权限,出现MySQL中已存在的数据库列表,选择你要为该新建用户开放的数据库,此处选择“maiba ...

  7. linux下mysql开启远程访问权限及防火墙开放3306端口(mysql开放host访问权限)

    开启mysql的远程访问权限默认mysql的用户是没有远程访问的权限的,因此当程序跟数据库不在同一台服务器上时,我们需要开启mysql的远程访问权限.主流的有两种方法,改表法和授权法.相对而言,改表法 ...

  8. SQLServer控制用户访问权限表

    连接地址:http://www.cnblogs.com/yxyht/archive/2013/03/22/2975880.html 一.需求 在管理数据库过程中,我们经常需要控制某个用户访问数据库的权 ...

  9. MySQL的用户和权限介绍

    一.关于MySQL权限的几点常识: 1.MySQL的权限系统主要用来验证用户的操作权限. 2.在MySQL内部,权限信息存放在MySQL数据库的granttable里.当mysql启动后,grantt ...

随机推荐

  1. 如何运行开源的React Native项目?

    如何运行开源的RN项目? 1.下载 2.解压 3.配置本地sdk位置 sdk.dir = D\:\\Android\\SDK 4.调整gradle版本 apply plugin: "com. ...

  2. openStack enscaption

  3. leetcode数组相关

    目录 4寻找两个有序数组的中位数 11盛最多水的容器,42接雨水 15三数之和,16最接近的三数之和,18四数之和 26/80删除排序数组中的重复项, 27移除元素 31下一个排列 53最大子序和 5 ...

  4. poj3071Football(概率期望dp)

    Football Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5620   Accepted: 2868 Descript ...

  5. 关于我们ajax异步请求的方法与知识

      做前端开发的朋友对于ajax异步更新一定印象深刻,作为刚入坑的小白,今天就和大家一起聊聊关于ajax异步请求的那点事.既然是ajax就少不了jQuery的知识,推荐大家访问www.w3school ...

  6. php 提交编辑数据没有变,返回0,判断

    php 提交编辑数据没有变,返回0,判断以TP为例子 $edit = D('Brand')->save($data);if($edit == true){ echo "修改成功&quo ...

  7. Spring Boot (9) mybatis全注解化

    ORM对比图 框架对比 Spring JDBC Spring Data Jpa Mybatis 性能 性能最好 性能最差 居中 代码量 多 少 多 学习成本 低 高 居中 推荐指数 ❤❤❤ ❤❤❤❤❤ ...

  8. javascript事件绑定1-模拟jquery可爱的东西

    1.给对象添加事件attachEvent(兼容IE,不兼容ff.chrome) <html xmlns="http://www.w3.org/1999/xhtml"> ...

  9. intellij 创建java web项目(maven管理的SSH)

    intellij 创建java web项目(maven管理的SSH) 环境intellij IDEA14.MAVEN.Spring.Struts2.Hibernate.Java Web.工程搭建. 1 ...

  10. page事件

    using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...