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即可---------------
时间: 2024-08-01 06:46:12

MySQL学习笔记二:权限管理的相关文章

MongoDB 学习笔记之 权限管理基础

权限管理基础 MongoDB有很多用户roles,这里只是简单列举下命令的使用,具体的role的含义,请查阅官方文档. https://docs.mongodb.com/manual/reference/built-in-roles/#userAdmin 在启用权限验证之前,需要重启服务,开启auth: 命令使用示例: use admin; #创建用户,这里Mongo 3和Mongo 2用的方法不同了. db.createUser({user: 'sky', pwd: 'CSL', roles:

MySQL学习笔记(二)

-- 回顾 数据库基础知识: 关系型数据库(磁盘),建立在关系模型上的数据库,数据结构(二维表),浪费空间. 操作数据的指令集合:SQL(DDL,DML[DQL]和DCL) 完整性约束:表内和表之间(实体) mysql 关系型数据库:c/s结构软件(连接认证,发送SQL指令,服务器处理指令返回结果,客户端接收结果解析结果) mysql服务端对象:DBMS->Datebase->Table->fields sql 基本操作:库操作,表操作(字段)和数据操作 字符集问题:中文数据问题 改变服

MySQL学习笔记(二)

-- 回顾 数据库基础知识: 1.关系型数据库(磁盘),建立在关系模型上的数据库,数据结构(二维表),浪费空间. 操作数据的指令集合:SQL(DDL,DML[DQL]和DCL) 完整性约束:表内和表之间(实体) mysql 关系型数据库:c/s结构软件(连接认证,发送SQL指令,服务器处理指令返回结果,客户端接收结果解析结果) mysql服务端对象:DBMS->Datebase->Table->fields sql 基本操作:库操作,表操作(字段)和数据操作 字符集问题:中文数据问题 改

MySQL学习笔记二

Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然后每条数据得到一条结果. 如:字符串函数:而多行函数,就是多条记录同时计算,得到最终只有一条结果记录.如:sum.avg等 多行函数也称为聚集函数.分组函数,主要用于完成一些统计功能.MySQL的单行函数有如下特征: 单行函数的参数可以是变量.常量或数据列.单行函数可以接受多个参数,但返回一个值.

linux学习笔记之权限管理

umask 目录:777-umask 文件:666-umask    touch后的权限 umask=023 文件默认不具有执行权限 touch a.txt mod=643--->可执行,自动加1.变为644. 对目录:mkdir bb mod=754不改变 suid sgid sticky  只能删除自己创建的文件 chmod u+s a suid  当前用户具有文件宿主的权限 sgid  当前用户组具有目录宿主的权限,目录宿主. sticky    多个用户在此目录创建的文件,只能由宿主删除

MySQL 学习笔记 二

Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然后每条数据得到一条结果. 如:字符串函数:而多行函数,就是多条记录同时计算,得到最终只有一条结果记录.如:sum.avg等 多行函数也称为聚集函数.分组函数,主要用于完成一些统计功能.MySQL的单行函数有如下特征: 单行函数的参数可以是变量.常量或数据列.单行函数可以接受多个参数,但返回一个值.

MySQL学习笔记(二)—查询

一.多表连接查询 新建两张表t_user.t_order.              1.内连接      返回满足条件的所有记录. (1)显式内连接      使用inner join关键字,在on子句中设定连接条件. SELECT u.id, u.name, u.address, o.orderno FROM t_user u INNER JOIN t_order o ON u.id = o.userid; 结果:          (2)隐式内连接      不包含inner join和o

AWS学习笔记(二)--CLI管理Image,Instance,Snapshot,S3

1. Image create-image $ aws ec2 create-image --instance-id i-825465ba --name "Prod Template" --description "Prod Template" --no-reboot 执行成功后会输出ImageId. create-tags通过EC2 Management Console查看AMIs时,列表中的第一项是Name,执行create-image命令后,这项是空的,还需执

马哥学习笔记二十六——MySQL主从复制

配置MySQL复制基本步骤: 一.master 1.启用二进制日志 log-bin = master-bin log-bin-index = master-bin.index 2.选择一个惟一server-id server-id = {0-2^32} 3.创建具有复制权限的用户 REPLICATION SLAVE REPLICATION CLIENT 二.slave 1.启用中继日志 relay-log = relay-log relay-log-index = 2.选择一个惟一的server