003:MySQL账号创建授权以及Workbench
一. 权限管理
1.“用户 + IP”的概念
MySQL中同一个用户名,比如db,能否登录,以及用什么密码登录,可以访问什么库等等,都需要加上IP,才可以表示一个完整的用户标识
db@127.0.0.1
和db@loalhost
以及db@192.168.1.100
这三个其实是不同
的 用户标识 ,即不同的用户名
2. 用户权限管理
系统表权限信息:
- a) 用户名和IP是否允许
- b) 查看mysql.user表
// 查看全局所有库的权限
- c) 查看mysql.db表
// 查看指定库的权限
- d) 查看mysql.table_priv表
// 查看指定表的权限
- e) 查看mysql.column_priv表
// 查看指定列的权限
常用权限:
- SQL语句:SELECT、INSERT、UPDATE、DELETE、INDEX
- 存储过程:CREATE ROUTINE、ALTER ROUTINE、EXECUTE、TRIGGER
- 管理权限:SUPER、RELOAD、SHOW DATABASE、SHUTDOWN、
可选资源:
- MAX_QUERIES_PER_HOUR count
- MAX_UPDATES_PER_HOUR count
- MAX_CONNECTIONS_PER_HOUR count
- MAX_USER_CONNECTIONS count
tips:
只能精确到小时,对于部分场景不适用,可以考虑中间件方式显示当前用户的权限
#这三个是同一个意思
mysql> show grants;
mysql> show grants for current_user;
mysql> show grants for current_user();
3. 基本操作
mysql> create user 'db'@'127.0.0.1' identified by '123';
#创建一个认证用户为'db'@'127.0.0.1',密码是123
mysql> grant all on sysbench.* to 'sbb'@'127.0.0.1';
#授予他sysbench库下面所有表的所有访问权限; *.*表示所有库的所有表
mysql> grant all on sysbench.* to 'alex'@'127.0.0.1' identified by '123456';
#这个grant语句会搜索用户,如果用户不存在,则自动创建用户,
#如果不带identified by, 则该用户名密码为空
mysql> grant all on *.* to 'gcdb'@'192.168.24.%' identified by 'iforgot' with grant option;
#表示这个用户'gcdb'@'127.0.0.1'可以访问所有库的所有表,
#同时,他还可以给其他用户授予权限(with grant option),
#注意如果,*.*改成了某一个指定的非USER库,
#则gcdb没法去新建其他用户了,因为User库没有权限了
#192.168.24.% 表示属于192.168.24.0/24网段的用户可以访问
4. 撤销权限
revoke
关键字,该关键字只删除用户权限,不删除用户revoke
语法同grant
一致, 从grant ... to
变为revoke ... from
5.授权和创建用户
- GRANT与创建用户
mysql> grant select on sysbench.* to 'fanghao'@'localhost' identified by 'haoshijiwudi';
Query OK, 0 rows affected, 2 warnings (0.00 sec)
-- 这里有2个warning
mysql> show warnings;
--输入warning的Message如下:
| Warning | 1285 | MySQL is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work |
| Warning | 1287 | Using GRANT for creating new user is deprecated and will be removed in future release.Create new user with CREATE USER statement. |
--第一条的意思,跳过域名解析模式,暂时不管
--第二条的意思是使用GRANT赋权限的同时创建'fanghao'@'localhost'这个用户,但是出现了warning,从给出的提示看来,以后的MySQL版本会废弃掉这种方式
--正确的创建用户并赋权的方式:
mysql> drop user 'fanghao'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> create user 'fanghao'@'localhost' identified by 'haoshijiwudi';
Query OK, 0 rows affected (0.00 sec)
- 查看某一个用户的权限
mysql> show grants for 'fanghao'@'localhost';
+-------------------------------------------------------+
| Grants for fanghao@localhost |
+-------------------------------------------------------+
| GRANT USAGE ON *.* TO 'fanghao'@'localhost' | --USAGE表示用户可以登录
| GRANT SELECT ON `sysbench`.* TO 'fanghao'@'localhost' | --对sysbench库的所有表有select权限
+-------------------------------------------------------+
2 rows in set (0.00 sec)
- 删除某一个用户
mysql> drop user 'fanghao'@'localhost';
Query OK, 0 rows affected (0.00 sec)
- MySQL权限信息
mysql> select * from mysql.user where user='fanghao' \G;
*************************** 1. row ***************************
Host: localhost
User: fanghao ---由于fanghao用户是对sysbench库有权限,所以这里(USER)全是N
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: N
File_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: N
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
Event_priv: N
Trigger_priv: N
Create_tablespace_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string: *1A7B1D37BD4148AD15497C3803F812C91047EC4F
password_expired: N
password_last_changed: 2017-11-22 16:31:57
password_lifetime: NULL
account_locked: N -- 如果这里为Y表示被锁定,该用户就无法使用了
1 row in set (0.01 sec)
mysql> select * from mysql.db where user='fanghao' \G;
*************************** 1. row ***************************
Host: localhost --授权主机
Db: sysbench --sysbench数据库
User: fanghao --用户名
Select_priv: Y --授权的select权限
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Execute_priv: N
Event_priv: N
Trigger_priv: N --注意: 不建议使用INSERT或者GRANT对元数据表进行修改,来达到修改权限的目的
1 row in set (0.01 sec)
--使用fanghao账号登陆
mysql> select user();
+-------------------+
| user() |
+-------------------+
| fanghao@localhost |
+-------------------+
1 row in set (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema | -- 这是一个统计信息的数据库,use可以进去,部分表没有权限查询
| sysbench |
+--------------------+
2 rows in set (0.00 sec)
mysql> select * from views;
Empty set (0.00 sec)
mysql> select * from innodb_cmp;
ERROR 1227 (42000): Access denied; you need (at least one of) the PROCESS privilege(s) for this operation
二. MySQL模拟角色
角色的定义:
角色(Role)
可以用来批量管理用户
,同一个角色下的用户,拥有相同的权限
。 MySQL5.7.X以后可以模拟角色(Role)
的功能,通过mysql.proxies_priv
模拟实现。- mysql.proxies_priv在
5.5.X和5.6.X
的时候就存在,但是无法模拟角色(Role)
功能。
模拟角色操作:
mysql> create user 'shiji_dba'@'localhost'; -- 相当于定于一个老司机角色(Role), -- 但这只是个普通的用户,名字比较有(Role)的感觉 -- 有点类似用户组
Query OK, 0 rows affected (0.00 sec)
mysql> create user 'bangwen'@‘localhost’; --测试用户(邦文袍哥)
Query OK, 0 rows affected (0.00 sec)
mysql> create user 'xuge'@'localhost'; --测试用户(许哥小司机)
Query OK, 0 rows affected (0.00 sec)
mysql> grant proxy on 'shiji_dba'@'localhost' to 'bangwen'@‘localhost’; -- 将shiji_dba的权限映射(map)给bangwen
Query OK, 0 rows affected, 2 warnings (0.00 sec)
mysql> grant proxy on 'shiji_dba'@'localhost' to 'xuge'@‘localhost’; -- 将shiji_dba的权限映射(map)给xuge
Query OK, 0 rows affected, 3 warnings (0.00 sec)
mysql> show grants for 'shiji_dba'@'localhost'; -- 查看shiji_dba角色赋予的实际权限
+---------------------------------------------------------+
| Grants for shiji_dba@localhost |
+---------------------------------------------------------+
| GRANT USAGE ON *.* TO 'shiji_dba'@'localhost' |
| GRANT SELECT ON `sysbench`.* TO 'shiji_dba'@'localhost' |
+---------------------------------------------------------+
mysql> show grants for 'bangwen'@‘localhost’; -- 查看bangwen老司机的权限
+-----------------------------------------------------------------------+
| Grants for bangwen@‘localhost’ |
+-----------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'bangwen'@'‘localhost’' |
| GRANT PROXY ON 'shiji_dba'@'localhost' TO 'bangwen'@'‘localhost’' |
+-----------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql> select * from mysql.proxies_priv; -- 查看 proxies_priv的权限
+-----------------+---------+--------------+--------------+------------+----------------------+---------------------+
| Host | User | Proxied_host | Proxied_user | With_grant | Grantor | Timestamp |
+-----------------+---------+--------------+--------------+------------+----------------------+---------------------+
| localhost | root | | | 1 | boot@connecting host | 0000-00-00 00:00:00 |
| ‘localhost’ | bangwen | localhost | shiji_dba | 0 | root@localhost | 0000-00-00 00:00:00 |
| ‘localhost’ | xuge | localhost | shiji_dba | 0 | root@localhost | 0000-00-00 00:00:00 |
+-----------------+---------+--------------+--------------+------------+----------------------+---------------------+
3 rows in set (0.00 sec)
--总结mysql.proxies_priv仅仅是对Role的模拟,和Oracle的角色还是有所不同.官方称呼为Role like
三. Workbench与Utilities介绍
下载
Workbench功能概述
- SQL语句格式化 SQL关键字upcase MySQL Dashboard SQL语法提示 ER图 Forward Engine //ER图 --> DB表结构 Reverse //DB表结构 --> ER图
Utilities介绍和安装
- MySQL Utilities介绍
- MySQL Utilities 提供一组命令行工具用于维护和管理 MySQL 服务器,包括:
- 管理工具 (克隆、复制、比较、差异、导出、导入)
- 复制工具 (安装、配置)
- 一般工具 (磁盘使用情况、冗余索引、搜索元数据)
- MySQL Utilities 提供一组命令行工具用于维护和管理 MySQL 服务器,包括:
- MySQL Utilities介绍
MySQL Utilities是一系列的命令行工具以及Python库更容易完成管理的任务。库是用Python语言写的,这就意味着不需要安装其他任何工具和库。当前是基于Python2.6版本设计的,不支持Python3.1版本.
MySQL Utilities提供了各种平台的软件包,如果没有找到对应自己平台的包,可以通过源码进行编译安装。
最新的MySQL Utilities可以在此处下载:(http://dev.mysql.com/downloads/utilities/)
- MySQL Utilities依赖环境
MySQL Utilities需要Python2.6版本,所有的代码都是基于该版本编写的。同时,还需要连接驱动MySQL Connector/Python通用版本(高于1.0.8)。
MySQL Connector/Python下载地址:http://dev.mysql.com/downloads/connector/python/
- MySQL Utilities源码安装
shell> wget -c https://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-utilities-1.6.5.tar.gz
shell> tar zxvf mysql-utilities-1.6.5.tar.gz
shell> cd mysql-utilities-1.6.5
shell> python ./setup.py build
shell> python ./setup.py install
003:MySQL账号创建授权以及Workbench的更多相关文章
- mysql用户创建授权
创建用户: grant select,update,insert,delete,create,drop,alter,index on *.* to 'jyx_mysql'@'%' identified ...
- mysql创建账号、授权、数据导出、导入
1.账号创建及授权 grant all privileges on *.* to 'yangxin'@'%' identified by 'yangxin123456' with grant opti ...
- (转)mysql账号权限密码设置方法
原文:http://www.greensoftcode.net/techntxt/2013410134247568042483 mysql账号权限密码设置方法 我的mysql安装在c:\mysql 一 ...
- MySQL新建用户,授权,删除用户,修改密码
首先要声明一下:一般情况下,修改MySQL密码,授权,是需要有mysql里的root权限的.注:本操作是在WIN命令提示符下,phpMyAdmin同样适用. 用户:phplamp 用户数据库: ...
- MySQL新建用户,授权,删除用户,修改密码总结
首先要声明一下:一般情况下,修改MySQL密码,授权,是需要有mysql里的root权限的. 注:本操作是在WIN命令提示符下,phpMyAdmin同样适用. 用户:rdingcn 用户数据库:rdi ...
- MySQL新建用户,授权,删除用户,修改密码等命令
首先要声明一下:一般情况下,修改MySQL密码,授权,是需要有mysql里的root权限的. 注:本操作是在WIN命令提示符下,phpMyAdmin同样适用. 用户:phplamp 用户数 ...
- MySQL视图已经授权,但是无法访问
开发发来问题说,开发环境的几个视图已经授权,但是指定用户登录后却无法访问.报错信息如下: [SQL]select * from ipost; [Err] - Access denied for use ...
- MySQL数据库grant授权命令
MySQL数据库grant授权命令 制作人:全心全意 grant授权命令的使用 grant授权命令使用语法: grant 权限 on 数据库对象 to 用户 grant 权限 on 数据库对象 to ...
- 20190526 - CentOS 7 中 安装 MySQL 8 并授权 root 远程访问
1. CentOS 7 中 安装 MySQL 8 CentOS 7 中内置 MariaDB 建议升级一下用,性能好很多.但如果一定要用 MySQL 8,就得自己装. 坦白的说,Oracle 升级 My ...
随机推荐
- node 适合 5000 人同时在线左右的 游戏开发
游戏开发性能的一些讨论 上面这个问题是在游戏上线前的一个性能顾虑 (但他确实是node多进程通讯间的一个比较麻烦的问题,数据一大就会出现性能上的瓶颈) 我们项目(手游)已经上线了,单服最高同时在线4. ...
- obj-y,obj-m 区别
obj-y:把由foo.c 或者 foo.s 文件编译得到foo.o 并连接进内核.obj-m: 则表示该文件作为模块编译.除了y.m以外的obj-x 形式的目标都不会被编译. 除了obj-形式的目标 ...
- Java基础拾遗(一)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76358391冷血之心的博客) 马上就要秋招了,新的一轮笔试面试马上 ...
- 【Spring实战】Spring注解配置工作原理源码解析
一.背景知识 在[Spring实战]Spring容器初始化完成后执行初始化数据方法一文中说要分析其实现原理,于是就从源码中寻找答案,看源码容易跑偏,因此应当有个主线,或者带着问题.目标去看,这样才能最 ...
- Android版本的"Wannacry"文件加密病毒样本分析(附带锁机)
一.前言 之前一个Wannacry病毒样本在PC端肆意了很久,就是RSA加密文件,勒索钱财.不给钱就删除.但是现在移动设备如此之多,就有一些不法分子想把这个病毒扩散到移动设备了,这几天一个哥们给了一个 ...
- Android内存优化(四)解析Memory Monitor、Allocation Tracker和Heap Dump
相关文章 Android性能优化系列 Java虚拟机系列 前言 要想做好内存优化工作,就要掌握两大部分的知识,一部分是知道并理解内存优化相关的原理,另一部分就是善于运用内存分析的工具.本篇就来介绍内存 ...
- awk结合正则匹配
利用awk分析data.csv中label列各取值的分布. 在终端执行head data.csv查看数据: name,business,label,label_name 沧州光松房屋拆迁有限公司,旧房 ...
- js之瀑布流的实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 表单验证——jquery validate使用说明
//validate 选项*********************************************************** $("form").validat ...
- Java 输出文件通过 BufferedWriter.newline() 方法换行
最近项目中需要导出文件,其实导出文件是一个挺简单的事情.但是却遇到了很奇怪的问题. 首先导出到文件需要用到 BufferedWriter.而换行则是通过 bw.newline() 方法,问题将出在 n ...