看了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. 集成CCFlow工作流与GPM的办公系统驰骋CCOA介绍(二)

    GPM怎样控制菜单权限以及菜单的增删显示 因为CCOA中仅仅有属于admin才干够进行权限管理与流程设计.password为pub. 1.加入CCOA功能菜单 进入GPM后,找到编号为CCOA的信息后 ...

  2. Codeforces--626B--Cards(模拟)

     Cards Time Limit: 2000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Sta ...

  3. Spring Boot、微服务架构和大数据

    一文读懂 Spring Boot.微服务架构和大数据治理三者之间的故事 https://www.cnblogs.com/ityouknow/p/9034377.html 微服务架构 微服务的诞生并非偶 ...

  4. bzoj1593 [Usaco2008 Feb]Hotel 旅馆(线段树)

    1593: [Usaco2008 Feb]Hotel 旅馆 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 758  Solved: 419[Submit ...

  5. php 制作略缩图

    一.需求 最近公司的项目中有个需求,就是用户上传自己的微信二维码,然后系统会自动将用户的微信二维码合并到产品中 二.分析 因为该系统是手机端的,所以从用户端的体验出发,用户当然是直接在微信上保存二维码 ...

  6. go-swagger的简单使用

    一.下载go-swagger go-swagger 官方下载 根据不同个的操作系统选择对应的 二.添加环境变量 2.1 window swagger_windows_amd64.exe 将swagge ...

  7. caffe介绍

  8. mybatis一对多关系的关联查询

    问题描述:实现两张表的关联查询 学生表: 班级表: 要实现学生管理信息中有所在班级的名称,即如下图所示 1.对应学生表的pojo类写全班级表中的字段(适用于要连接的表字段较少的情况) sql语句直接在 ...

  9. ruby --Paperclip::NotIdentifiedByImageMagickError

    首先,如果遇到这个问题,Paperclip::NotIdentifiedByImageMagickError,先检查下环境变量是否配置了ImagicMagick的路径. cmd下path 查看,首先加 ...

  10. jquery.validate验证text,checkbox,radio,selected

    index.cshtml <form id="formLogin" method="post"> <div> <label for ...