看了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. How to Integrate .NET Projects with Jenkins

    https://www.swtestacademy.com/jenkins-dotnet-integration/ 8) Unit Tests and Test Coverage Settings D ...

  2. C# Interactive Walkthrough

    C# Interactive Walkthrough

  3. codeforces 898F Hash

    F. Restoring the Expression time limit per test 2 seconds memory limit per test 256 megabytes input ...

  4. runC爆严重安全漏洞,主机可被攻击!使用容器的快打补丁

    runC 是 Docker,Kubernetes 等依赖容器的应用程序的底层容器运行时.此次爆出的严重安全漏洞可使攻击者以 root 身份在主机上执行任何命令. 容器的安全性一直是容器技术的一个短板. ...

  5. Android开发利器之ActivityTracker

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/113 Android开发利器之ActivityTracke ...

  6. C#接入第三方支付一些小问题

    13年第一次接入支付宝的时候,支付宝的api还不是很好用,费了些劲才完成,本月再次接入的时候发现已经很好用了,接入过程非常顺畅,只出现了一个小问题,我的金额默认是保留了4位小数,支付宝api只接受最多 ...

  7. Android 关于Fragment重叠问题分析和解决

    一.问题描述 相信大家在使用Fragment的过程中,肯定碰到过Fragment重叠的问题,重启应用就好了.然而原因是什么呢? 二.原因分析 首先,Android管理Fragment有两种方式,使用a ...

  8. DE2之7-segment displays

    以前课题用的是友晶的DE2-70,现在重拾FPGA,选了一款性价比高的DE2.恰逢闲来无事,于是尝试将各个Verilog模块翻译成VHDL,半算回顾以前的知识,半算练习VHDL. Verilog 01 ...

  9. QS之force(2)

    Examples 1) Force input1 to 0 at the current simulator time. force input1 0 2) Force the fourth elem ...

  10. java多线线程停止正确方法

    //军队线程 //模拟作战双方的行为 public class ArmyRunnable implements Runnable { //volatile保证了线程可以正确的读取其他线程写入的值 // ...