MySQL 权限
一、创建用户
CREATE USER li@localhost IDENTIFIED BY 'li';
授予用户li数据库person的所有权限,并允许用户li将数据库person的所有权限授予其它用户
GRANT ALL ON PERSON.* TO li@localhost WITH GRANT OPTION;
立即生效,如果授予的权限没有生效执行以下命令,在5.6版本更改即会生效。
FLUSH PRIVILEGES;
GRANT创建用户
如果当前不存在用户,GRANT可以在授予权限的时候创建用户
授予用户数据库person所有表的select,insert权限。
GRANT SELECT,INSERT ON PERSON.* TO 'abc'@'localhost' identified by 'abc'; 同时运行用户abc将person数据库的SELECT,INSERT权限授予给其它用户
GRANT SELECT,INSERT ON PERSON.* TO 'abc'@'localhost' identified by 'abc' with grant option;
创建用户root密码123456并赋予服务器所有权限,允许IP192.168.1.5的客户端连接。
grant all privileges on *.* to root@'192.168.1.5' identified by ''
退出当前用户
exit
查看当前用户的权限
show grants;
查看用户abc的权限
show grants for abc@localhost;
二、REVOKE回收权限
回收用户abc数据库person的insert的权限
REVOKE INSERT ON PERSON.* FROM abc@localhost;
回收权限
回收person数据库abc的所有权限
REVOKE ALL ON PERSON.* FROM abc@localhost; 回收abc的所有数据库所有权限
REVOKE ALL ON *.* FROM abc@localhost;
三、删除、修改用户
在早期版本需要回收用户的权限之后才能删除用户。删除用户建议使用这种办法,有的人会使用delete from user的办法删除,但是有的用户是针对db的权限那么在mysql.db里面也存在记录,而使用drop user的方式都会被删除。
DROP USER abc@localhost;
修改用户
RENAME USER 'test'@'127.0.0.1' TO 'test'@'%'
四、修改用户密码
use mysql;
UPDATE user SET password=PASSWORD('输入新密码') WHERE user='用户名';
FLUSH PRIVILEGES;
五、相关权限授予
1.创建root用户
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'root' WITH GRANT OPTION;
2.创建一个服务器基本的增删改查用户
GRANT UPDATE, DELETE, INSERT, SELECT ON *.* TO 'test'@'%' identified by 'test' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0
3.创建数据库基本的增删改查用户
GRANT SELECT, INSERT, UPDATE, DELETE, SHOW VIEW, EXECUTE ON `new`.* TO 'test'@'%' identified by 'test';
4.授予数据库名以db开头的数据库的权限
GRANT SELECT, INSERT, UPDATE, DELETE, SHOW VIEW, EXECUTE ON `db%`.* TO 'perform'@'%'
5.创建备份用户权限
GRANT SELECT,EVENT,SHOW DATABASES,LOCK TABLES,SUPER,REPLICATION CLIENT,RELOAD ON *.* TO 'backup'@'localhost' identified by 'backup'
6.备份恢复用户权限
GRANT INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER,CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON *.* TO 'restore'@'localhost' identified by '123456'
7.复制用户权限
GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'%' IDENTIFIED BY '123456';
六、权限表字段详解
基于mysql5.6
user表
user表的权限是基于服务器范围的所有权限,比如用户拥有服务器中所有数据库的select权限那么在user表中的Select_priv列为Y,如果用户单单只拥有某个一数据库的select权限那么user表中的Select_priv为N,会在DB表中记录一条信息在DB表中的select_priv为Y。
desc mysql.user;
filed type null key default
| Host | char(60) | NO | PRI | 主机名,localhost表示本地登入,%表示不受限制,也可以单独赋予某个IP的访问权限。 | |
| User | char(16) | NO | PRI | 登入用户名 | |
| Password | char(41) | NO | 登入用户密码 | ||
| Select_priv | enum('N','Y') | NO | N | select权限 | |
| Insert_priv | enum('N','Y') | NO | N | insert权限 | |
| Update_priv | enum('N','Y') | NO | N | update权限 | |
| Delete_priv | enum('N','Y') | NO | N | delete权限 | |
| Create_priv | enum('N','Y') | NO | N | create权限 | |
| Drop_priv | enum('N','Y') | NO | N | drop权限 | |
| Reload_priv | enum('N','Y') | NO | N | 执行刷新和重新加载MySQL各种内部缓存命令的权限 | |
| Shutdown_priv | enum('N','Y') | NO | N | 关闭mysql服务器的权限,不能授予root外的其它用户 | |
| Process_priv | enum('N','Y') | NO | N | 执行show processlist命令的权限 | |
| File_priv | enum('N','Y') | NO | N | 执行SELECT INTO OUTFILE和LOAD DATA INFILE命令 | |
| Grant_priv | enum('N','Y') | NO | N | 是否可以将权限授予其它用户 | |
| References_priv | enum('N','Y') | NO | N | 参照表的权限 | |
| Index_priv | enum('N','Y') | NO | N | 创建删除索引的权限 | |
| Alter_priv | enum('N','Y') | NO | N | ALTER权限 | |
| Show_db_priv | enum('N','Y') | NO | N | 查看有哪些数据库的权限 | |
| Super_priv | enum('N','Y') | NO | N | Super权限,包括kill权限。 | |
| Create_tmp_table_priv | enum('N','Y') | NO | N | 创建创建临时表权限 | |
| Lock_tables_priv | enum('N','Y') | NO | N | 执行lock table权限 | |
| Execute_priv | enum('N','Y') | NO | N | 执行存储过程权限 | |
| Repl_slave_priv | enum('N','Y') | NO | N | 复制相关的权限 | |
| Repl_client_priv | enum('N','Y') | NO | N | 复制相关的权限 | |
| Create_view_priv | enum('N','Y') | NO | N | 创建视图的权限 | |
| Show_view_priv | enum('N','Y') | NO | N | 查看视图的权限 | |
| Create_routine_priv | enum('N','Y') | NO | N | 创建函数、存储过程等权限 | |
| Alter_routine_priv | enum('N','Y') | NO | N | 修改删除函数、存储过程等权限 | |
| Create_user_priv | enum('N','Y') | NO | N | 创建用户的权限 | |
| Event_priv | enum('N','Y') | NO | N | 创建、修改和删除事件的权限 | |
| Trigger_priv | enum('N','Y') | NO | N | 创建、修改和删除触发器的权限 | |
| Create_tablespace_priv | enum('N','Y') | NO | N | 创建表空间的权限 | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | |||
| ssl_cipher | blob | NO | |||
| x509_issuer | blob | NO | |||
| x509_subject | blob | NO | |||
| max_questions | int(11) unsigned | NO | 0 | 最多问题数 | |
| max_updates | int(11) unsigned | NO | 0 | 允许的最大更新 | |
| max_connections | int(11) unsigned | NO | 0 | 允许的最大连接 | |
| max_user_connections | int(11) unsigned | NO | 0 | ||
| plugin | char(64) | YES | |||
| authentication_string | text | YES | |||
| password_expired | enum('N','Y') | NO | N |
db表
如果授予一个用户单独某个数据库的权限,就会在db表中记录一条相关信息。
desc mysql.db;
filed type null key default
| Host | char(60) | NO | PRI | 主机名,localhost代表只能本地登入,如果是%表示不受限制,也可以单独赋予某个IP的访问权限。 | |
| Db | char(64) | NO | PRI | 数据库名 | |
| User | char(16) | NO | PRI | 用户名 | |
| Select_priv | enum('N','Y') | NO | N | select权限 | |
| Insert_priv | enum('N','Y') | NO | N | insert权限 | |
| Update_priv | enum('N','Y') | NO | N | update权限 | |
| Delete_priv | enum('N','Y') | NO | N | delete权限 | |
| Create_priv | enum('N','Y') | NO | N | create权限 | |
| Drop_priv | enum('N','Y') | NO | N | drop权限 | |
| Grant_priv | enum('N','Y') | NO | N | 是否可以将权限授予其它用户 | |
| References_priv | enum('N','Y') | NO | N | ||
| Index_priv | enum('N','Y') | NO | N | 创建删除索引的权限 | |
| Alter_priv | enum('N','Y') | NO | N | ALTER权限 | |
| Create_tmp_table_priv | enum('N','Y') | NO | N | 创建临时表的权限 | |
| Lock_tables_priv | enum('N','Y') | NO | N | 执行lock table权限 | |
| Create_view_priv | enum('N','Y') | NO | N | 创建视图的权限 | |
| Show_view_priv | enum('N','Y') | NO | N | 查看视图的权限 | |
| Create_routine_priv | enum('N','Y') | NO | N | 创建函数、存储过程的权限 | |
| Alter_routine_priv | enum('N','Y') | NO | N | 修改删除函数、存储过程的权限 | |
| Execute_priv | enum('N','Y') | NO | N | 执行存储过程的权限 | |
| Event_priv | enum('N','Y') | NO | N | 创建、修改、删除事件的权限 | |
| Trigger_priv | enum('N','Y') | NO | N | 创建、修改、删除触发器的权限 |
总结
使用revoke all privileges并不能收回用户的所有权限,对于用户的单个数据库的权限需要单独回收,具体可以查询mysql.db数据库查看用户的每个数据库的具体权限,如果用户权限太多最快的回收权限的方法是删除该用户再重新授予用户新的权限
注意:给一个数据库授予一个用户不同连接方式的权限,mysql使用低权限的原则。
|
备注: 作者:pursuer.chen 博客:http://www.cnblogs.com/chenmh 本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接,否则保留追究责任的权利。 《欢迎交流讨论》 |
MySQL 权限的更多相关文章
- MySQL 权限与安全
一.MySQL权限系统通过两个阶段进行认证: (A) 对用户进行身份认证,IP地址和用户名联合, (B) 对合法用户赋予相应权限,权限表在数据库启动的时候载入内存中. 二.在权限的存取过程中,会用到& ...
- mysql权限管理
经常遇到有网友在QQ群或者论坛上问关于mysql权限的问题,今天抽空总结一下关于这几年使用MYSQL的时候关于MYSQL数据库的权限管理的经验,也希望能对使用mysql的网友有所帮助! 一.MYSQL ...
- mysql权限与安全
一.MySQL权限系统通过两个阶段进行认证: (A) 对用户进行身份认证,IP地址和用户名联合, (B) 对合法用户赋予相应权限,权限表在数据库启动的时候载入内存中. 二.在权限的存取过程中,会用到& ...
- MYSQL权限表user操作
MYSQL权限表user cmd中进人mysql找到mysql安装目录 E:\wamp\bin\mysql\mysql5.6.12\bin>mysql.exe -u 用户名 - ...
- 【MySQL学习笔记】MySQL权限表
MySQL权限表,控制用户对数据库的访问,存在mysql数据库中,由mysql_install_db初始化,包括user,db,host,tables_priv,columns_priv,procs_ ...
- mysql 权限控制
1.mysql的权限是,从某处来的用户对某对象的权限. 2.mysql的权限采用白名单策略,指定用户能做什么,没有指定的都不能做. 3.权限校验分成两个步骤: a.能不能连接,检查从哪里来,用户名和密 ...
- Mysql权限控制 - 允许用户远程连接
Mysql为了安全性,在默认情况下用户只允许在本地登录,可是在有此情况下,还是需要使用用户进行远程连接,因此为了使其可以远程需要进行如下操作: 一.允许root用户在任何地方进行远程登录,并具有所有库 ...
- mysql权限及用户
一:Flush table tables_name MySQL的FLUSH句法(清除或者重新加载内部缓存) FLUSH flush_option [,flush_option],如果你想要清除一些My ...
- mysql 权限管理
参考: http://www.cnblogs.com/Richardzhu/p/3318595.html 一.MySQL权限简介 关于mysql的权限简单的理解就是mysql允许你做你全力以内 ...
- Mysql权限控制 - 允许用户远程连接(转载)
Mysql为了安全性,在默认情况下用户只允许在本地登录,可是在有此情况下,还是需要使用用户进行远程连接,因此为了使其可以远程需要进行如下操作: 一.允许root用户在任何地方进行远程登录,并具有所有库 ...
随机推荐
- oracle函数简析
(一).数值型函数(Number Functions) 数值型函数输入数字型参数并返回数值型的值.多数该类函数的返回值支持38位小数点,诸如:COS, COSH, EXP, LN, LOG, SIN, ...
- python 学习第二十一天,django知识(三)
一,django的url路由系统总结 1,url(/index/,函数或者类) 2,url(/index/(\d+), 函数或者类) 3,url(/index/(?P<nid>\d+),函 ...
- [原创]Centos7 从零配置Nginx+PHP+MySql
序言 这次玩次狠得.除了编译器使用yum安装,其他全部手动编译.哼~ 看似就Nginx.PHP.MySql三个东东,但是它们太尼玛依赖别人了. 没办法,想用它们就得老老实实给它们提供想要的东西. 首先 ...
- 移动web端的react.js组件化方案
背景: 随着互联网世界的兴起,web前端开发的方式越来越多,出现了很多种场景开发的前端架构体系,也对前端的要求日益增高,早已经不是靠一个JQuery.js来做前端页面的时代了,而今移动端变化最大,近 ...
- Set和存储顺序
set(interface) 存入Set的每个元素必须是唯一的,因为Set不保存重复的元素.加入Set的元素必须定义 equal()方法以确保对象的唯一性.Set和Collection有完全一样的接口 ...
- c++单例模式为什么不在析构函数中释放静态的单例对象(转)
需要清楚一下几点: 1.单例中的 new 的对象需要delete释放. 2.delete释放对象的时候才会调用对象的析构函数. 3.如果在析构函数里调用delete,那么程序结束时,根本进 ...
- 【转】《从入门到精通云服务器》第七讲—IAAS、PAAS、SAAS
Saas.Paas.IaaS这三个词,一直困扰众人很久.就拿字面意思来说,分别是:软件即服务,平台即服务,设施即服务.小编表示这个不往深了讲,真心看不懂,还容易弄混淆.今天我们就来扒一扒这三者的深层含 ...
- 历年NOIP水题泛做
快noip了就乱做一下历年的noip题目咯.. noip2014 飞扬的小鸟 其实这道题并不是很难,但是就有点难搞 听说男神错了一个小时.. 就是$f_{i,j}$表示在第$i$个位置高度为$j$的时 ...
- delay(和setTimeout()的区别
近来几日在写游戏代码时,频繁会用到定时器,偶尔想到有个.delay()方法,用了几次发现两者效果相差很大,遂就仔细考究了一下两者的区别! 1. setTimeout函数是从页面开始的时候计算time的 ...
- 6_PHP AJAX MYSQL
XAMPP套装软件: 包含Apache.MySQL.PHP等多个开源软件的集合. https://www.apachefriends.org/zh_cn/index.html 监听完整相应消息: Wi ...