mysql的用户访问权限规划
看了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的用户访问权限规划的更多相关文章
- Windows安装MongoDB 4.0并赋予用户访问权限
第一部分 Windows安装MongoDB-4.0 第一步:下载MongoDB:https://www.mongodb.com/download-center?jmp=nav#community 我目 ...
- [App Store Connect帮助]三、管理 App 和版本(8)编辑 App 的用户访问权限
对于具有“App 管理”.“客户支持”.“开发者”.“营销”或“销售”职能的特定人员(均不具有“访问报告”职能),您可以限制其在 App Store Connect 帐户中对 App 的访问权限. 必 ...
- 禁止、允许MySQL root用户远程访问权限
关闭MySQL root用户远程访问权限: use mysql; update user set host = "localhost" where user = "roo ...
- MySQL高级学习笔记(二):mysql配置文件、mysql的用户与权限管理、mysql的一些杂项配置
文章目录 mysql配置文件 二进制日志log-bin 错误日志log-error 数据文件 两系统 Myisam存放方式 innodb存放方式 如何配置 mysql的用户与权限管理 MySQL的用户 ...
- mysql数据库用户和权限管理记录
一.MySQL用户的基本说明: 1.1 用户的基本结构MySQL的用户:用户名@主机 ■用户名:16个字符以内■主机:可以是主机名.IP地址.网络地址等主机名:www.111cn.net,localh ...
- MYSQL指定用户访问指定数据库
1.使用navicat 1)首先使用root用户新建连接 2)新建mysql用户 3)点击权限,选择添加权限,出现MySQL中已存在的数据库列表,选择你要为该新建用户开放的数据库,此处选择“maiba ...
- linux下mysql开启远程访问权限及防火墙开放3306端口(mysql开放host访问权限)
开启mysql的远程访问权限默认mysql的用户是没有远程访问的权限的,因此当程序跟数据库不在同一台服务器上时,我们需要开启mysql的远程访问权限.主流的有两种方法,改表法和授权法.相对而言,改表法 ...
- SQLServer控制用户访问权限表
连接地址:http://www.cnblogs.com/yxyht/archive/2013/03/22/2975880.html 一.需求 在管理数据库过程中,我们经常需要控制某个用户访问数据库的权 ...
- MySQL的用户和权限介绍
一.关于MySQL权限的几点常识: 1.MySQL的权限系统主要用来验证用户的操作权限. 2.在MySQL内部,权限信息存放在MySQL数据库的granttable里.当mysql启动后,grantt ...
随机推荐
- Java 二进制和十进制互转,二进制和BitSet互转
/** * 二进制转十进制 * * @param binaryNumber * @return */ public static int binaryToDecimal(int binaryNumbe ...
- Get Length 使用dynamic关键字
http://www.codewars.com/kata/566f571ed78037c7b6000036/train/csharp You don't have any idea what is t ...
- python pickle to json
ref: https://gist.github.com/Samurais/567ebca0f59c612eb977065008aad867 ''' Convert a pkl file into j ...
- elasticsearch 分页查询实现方案——Top K+归并排序
elasticsearch 分页查询实现方案 1. from+size 实现分页 from表示从第几行开始,size表示查询多少条文档.from默认为0,size默认为10,注意:size的大小不能超 ...
- Makefile 文件怎么写
跟我一起写Makefile:MakeFile介绍 Makefile 使用总结 1. make 命令与 Makefile 文件 在 Linux 平台,执行 make 命令时,会在当前目录下寻找 Make ...
- Highways(prim)
http://poj.org/problem?id=2485 此题是求最小生成树里的最大权值.prim算法: #include<stdio.h> #include<string.h& ...
- Appium + python - online-install-apk
import osfrom appium import webdriver# 安装app,为了方便,把app放到当前脚本同一目录os.system("adb install sina.apk ...
- selenium3 + python 操作浏览器基本方法
from selenium import webdriverimport time as t # driver = webdriver.Chrome()# driver.get("http: ...
- android service--delphixe 10.3
开发中的陷阱: 1. 别放什么 *.wav文件,这个 服务窗口不能随便放东西,不然铁定出现意想不到的结果,比如 无法运行,因为没 ui界面,随意都不知是啥问题. 2. 不能加载 datamodule ...
- Spring Boot (5) Spring Boot配置详解
application.properties application.properties是spring boot默认的配置文件,spring boot默认会在以下两个路径搜索并加载这个文件 src\ ...