MySQL学习笔记二:权限管理
1. 创建和删除用户,mysql中的用户是由用户名和主机名来确定的
create user "user_name@host_name" identified by passwd;
drop user user_name;
---------------也可以直接向mysql.user表添加记录----------------
insert into mysql.user(host,user,password) values ("host_name","user_name",password("pwd"));
flush privileges;//使用这种方法必须添加用户,必须刷新权限加载到内存中
2.查看用户权限
show grants for user_name@host_name
3.修改用户密码
set password for user_name@'host_name'=password('...') or
update mysql.user set password=password('...') where user='user_name';
flush privileges;
---------------修改ROOT用户密码也可以这样----------------------
mysqladmin -u root -p password 123456
4.查看所有用户
select host,user,password from mysql.user
5.授予权限
使用GRANT命令,其语法如下:
GRANT
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user_specification [, user_specification] ...
[REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
[WITH with_option ...] GRANT PROXY ON user_specification
TO user_specification [, user_specification] ...
[WITH GRANT OPTION]
grant select,update,delete on test.* to user_name@host_name
MySQL数据库权限粒度可以分为全局、数据库、表、列、程序。
grant select,update on *.* to user_name@host_name //全局粒度
grant select,update on test.* to user_name@host_name //数据库级粒度
grant select,update on test.tab to user_name@host_name //表级粒度
grant select(name) on test.tab to user_name@host_name //列级粒度
6.回收权限
使用REVOKE命令,其语法如下
REVOKE
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
FROM user [, user] ... REVOKE ALL PRIVILEGES, GRANT OPTION
FROM user [, user] ... REVOKE PROXY ON user
FROM user [, user] ...
在回收用户权限的时候,一定要对上GRANT时的权限粒度,否则回收权限不会成功,例如。
mysql> show grants for zhumuxian@localhost;
+------------------------------------------------------------------------------------------------------------------+
| Grants for zhumuxian@localhost |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'zhumuxian'@'localhost' IDENTIFIED BY PASSWORD '*00A51F3F48415C7D4E8908980D443C29C69B60C9' |
| GRANT SELECT, UPDATE ON `mysql`.* TO 'zhumuxian'@'localhost' |
+------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
这时使用不是数据库级别粒度回收是不会成功,接着看
mysql> revoke all privileges on *.* from zhumuxian@localhost;
Query OK, 0 rows affected (0.00 sec) mysql> show grants for zhumuxian@localhost;
+------------------------------------------------------------------------------------------------------------------+
| Grants for zhumuxian@localhost |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'zhumuxian'@'localhost' IDENTIFIED BY PASSWORD '*00A51F3F48415C7D4E8908980D443C29C69B60C9' |
| GRANT SELECT, UPDATE ON `mysql`.* TO 'zhumuxian'@'localhost' |
+------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
再使用相同粒度的回收就可以了。
mysql> revoke select,update on mysql.* from zhumuxian@localhost;
Query OK, 0 rows affected (0.00 sec) mysql> show grants for zhumuxian@localhost;
+------------------------------------------------------------------------------------------------------------------+
| Grants for zhumuxian@localhost |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'zhumuxian'@'localhost' IDENTIFIED BY PASSWORD '*00A51F3F48415C7D4E8908980D443C29C69B60C9' |
+------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
如果你想回收某个用户所有的权限,不管什么权限级别,粒度,直接使用下面的语句即可。
revoke all privileges,grant option from zhumuxian@localhost
帐号安全管理
1.在Linux平台会有一个历史文件,它会记录mysql数据库的所有操作。
tail -20 ~/.mysql_history
这里最好使用/dev/null作为.mysql_history的软链接,这样所有的操作都被输出为空
$ ln -f -s /dev/null ~/.mysql_history
2.管理员口令丢失的处理
1.启动MySQL服务时加上--init-file,使其执行含有密码重置的脚本
首先停止Mysql服务,编写一个脚本updatePwd.txt,内容:
set password for root@localhost=password("xxxx");
进入mysql_safe模式,使用mysqld命令执行:
mysqld --init-file="./updatePwd.txt"
//执行完这条语句,再关闭mysqld进程,停止mysql服务,接着以正常方式启动mysql即可
2.先停止mysql服务,然后以以下语句跳过权限验证:
mysqld --skip-grant-tables --skip-networking
然后使用以下语句登录mysql并修改root密码:
mysql -u root -p //此时密码为空
update mysql.user set password=password("xxxx") where user="root"
flush privileges;
--------然后重新启动mysql即可---------------
MySQL学习笔记二:权限管理的更多相关文章
- mysql学习笔记二 —— 权限体系
要点: 1.MySQL的API2.MySQL的相关文件3.MySQL的权限体系 1.MySQL的API 应用程序接口 (application program interface) 1.1 命令行中的 ...
- MongoDB 学习笔记之 权限管理基础
权限管理基础 MongoDB有很多用户roles,这里只是简单列举下命令的使用,具体的role的含义,请查阅官方文档. https://docs.mongodb.com/manual/referenc ...
- sql分类及基本sql操作,校对规则(mysql学习笔记二)
sql针对操作对象分为不同语言 数据操作(管理)语言 DML或者将其细分为 ( 查询 DQL 管理(增,删,改) DML) 数据定义语言(对保存数据的格式进行定义) DDL 数据库控制语言(针对数 ...
- MySQL学习笔记(二):MySQL数据类型汇总及选择参考
本文主要介绍了MySQL 的常用数据类型,以及实际应用时如何选择合适的类型. ******几个通用的简单原则:******* 1. 更小的通常更好.但是要确保没有低估需要存储的值的范围,如果无法确定 ...
- MySQL学习笔记(二)
连接与断开服务器 应该以下面的方式连接MySQL服务器,而不是将密码以明文方式输入连接. C:\> mysql -h host -u user -pEnter password: ******* ...
- MySQL学习笔记二
Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...
- mysql学习(用户权限管理)
1. 添加数据库用户 create user 'username'@'host' identified by 'password'; 提示: 如果想让该用户可以从其他主机登陆,host可以设置为'%' ...
- MySQL学习笔记(二)—查询
一.多表连接查询 新建两张表t_user.t_order. 1.内连接 返回满足条件的所有记录. (1)显式内连接 使用inner join关键字,在on ...
- MySQL 学习笔记 二
Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...
随机推荐
- 无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)
SQLite部署-无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块 近期刚使用SQLite,主要引用的是System.Data.SQLite.dll这个dll,在部署到测试 ...
- Java Hashtable的实现
先附源码: package java.util; import java.io.*; /** * This class implements a hash table, which maps keys ...
- python 之 Django 基础篇
1,Django流程介绍 MTV模式 著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业务对象与数据 ...
- java并发编程(十六)happen-before规则
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17348313 happen-before规则介绍 Java语言中有一个"先行发生 ...
- BOM对象有哪些:
BOM对象有哪些: 1.window对象 ,是JS的最顶层对象,其他的BOM对象都是window对象的属性: 2.document对象,文档对象: 3.location对象,浏览器当前URL信息: 4 ...
- POJ1860 Currency Exchange(bellman-ford)
链接:http://poj.org/problem?id=1860 Currency Exchange Description Several currency exchange points are ...
- js公用方法
} { { } ...
- 关于IoCallDriver使用的疑惑
#pragma PAGEDCODE NTSTATUS HelloDDKRead(IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp) { KdPrint(("Dr ...
- 一步步学习javascript基础篇(4):面向对象设计之创建对象(工厂、原型和构造函数等模式)
前面我们介绍了可以通过Object构造函数或对象字面量都可以用来创建单个对象,但是如果需要创建多个对象的话,显然很多冗余代码. 接下来介绍几种模式来创建对象.不过在此之前,我们还是先来了解下 type ...
- Python yield与实现
Python yield与实现 yield的功能类似于return,但是不同之处在于它返回的是生成器. 生成器 生成器是通过一个或多个yield表达式构成的函数,每一个生成器都是一个迭代器(但是迭 ...