MySQL中主要包括两种用户:root用户和普通用户,其中前者为超级管理员,拥有MySQL提供的一切权限;而普通用户则只能拥有创建用户时赋予它的权限。

MySQL的安全性机制主要包括权限机制,用户机制和对用户进行权限管理。

1.MySQL所提供的权限

在系统数据库mysql下存储的都是权限的表,其中最重要的表是mysql.user,mysql.db,mysql.host。

1.1 系统表mysql.user

该表有39个字段,这些字段大致可以分为4类,分别为用户字段,权限字段,安全字段和资源控制字段。

用户字段:用户字段包含三个字段,主要用来判断用户是否能够登录成功。

权限字段:user表中拥有一系列以"_priv"字符串结尾的字段,这些字段决定了用户权限。

安全字段:安全字段主要包括4个字段,包含ssl字段的字段主要用来实现加密,包含x509的字段主要用来标识用户。

资源控制字段:资源控制字段主要包括4个字段,主要用来控制资源,所有资源控制字段的默认值为0,表示没有任何限制。

1.2 系统表mysql.db和mysql.host

在系统数据库mysql中,权限除了表user外,还有表db和表host。这两张表中都存储了某个用户对相关数据库的权限,结构大致相同。

2. MySQL所提供的用户机制

为了数据库的安全性和完整性,MySQL提供了一整套用户管理机制。用户管理机制包括登录和退出MySQL服务器,创建用户,删除用户,修改用户密码和为用户赋权限等内容。

2.1 登录和退出MySQL

2.1.1 登录MySQL:

连接MySQL服务器的完整DOS命令如下所示:

mysql -h hostname | hostIp -p port -u username -p DataBaseName -e "SQL语句"

参数说明:

-h:用来指定所连接的MySQL服务器的地址,可以用两种方式来表示。参数hostname表示主机名,参数hostIp表示主机IP地址。

-p:用来指定所连接的MySQL服务器的端口号。

-u:用来指定哪个用户要连接MySQL服务器。

-p:表示将提示输入密码。

DataBaseName:用来指定连接到MySQL服务器后,登录到哪一个数据库中。如果没有指定,默认为系统数据库mysql。

-e:用来指定所执行的SQL语句。

示例:

通过用户账户root登录到MySQL服务器的数据库cmpany中,命令如下:

mysql -h 127.0.0.1 -u root -p company
mysql -h 127.0.0.1 -u root -p company -e "SELECT * FROM t_dept";

如果想在具体连接中直接设置密码,而不是在输入密码提示中进行设置,可以通过下面命令来实现,不过该密码需要直接加在参数-p后面,中间绝对不能有空格。

mysql -h 127.0.0.1 -u root -p123456 company

2.1.2 退出MySQL

退出MySQL服务器的DOS命令如下:

EXIT | QUIT

2.2 创建普通用户账号

2.2.1 执行CREATE USER语句来创建用户账户

CREATE USER username[IDENTIFIED BY [PASSWORD] 'password']
[,username[IDENTIFIED BY [PASSWORD] 'password']]
……
[,username[IDENTIFIED BY [PASSWORD] 'password']]

示例如下:

CREATE USER 'cjgong'@'localhost' IDENTIFIED BY '';

2.2.2 执行INSERT语句来创建用户

当向系统表mysql.user中插入数据记录时,一般只需插入Host,User,和Password这三个字段即可。语法如下:

INSERT INTO USER(HOST,USER,PASSWORD) VALUES('hostname','username',PASSWORD('password');

2.2.3 执行GRANT语句来创建用户

GRANT priv_type ON databasename.tablename
TO username[IDENTIFIED BY [PASSWORD] 'password']
[,username[IDENTIFIED BY [PASSWORD] 'password']]
……
[,username[IDENTIFIED BY [PASSWORD] 'password']]]

示例如下:

GRANT SELECT ON company.t_dept
TO 'cjogng2'@'localhost' IDENTIFIED BY '';

该语句不仅可以创建用户账户,还可以对其进行赋权限。

2.3 利用拥有超级权限用户root修改账户密码

2.3.1 通过mysqladmin命令修改root用户密码

mysqladmin -u username -p PASSWORD "new_password"

示例如下:

mysqladmin -u root -p PASSWORD ""

2.3.2 通过SET命令修改root用户密码

SET PASSWORD=PASSWORD("new_password")

示例如下:

SET PASSWORD=PASSWORD("123456")

2.3.3 更新系统表mysql.user数据记录修改root用户密码

UPDATE USER SET PASSWORD=PASSWORD("new_password") WHERE USER="root" AND HOST="localhost";

示例如下:

UPDATE USER SET PASSWORD=PASSWORD("123456") WHERE USER="root" AND HOST="localhost";

2.4 利用拥有超级权限用户root修改普通用户账户密码

2.4.1 通过GRANT命令修改普通用户密码

语法如下所示:

GRANT priv_type ON database.table
TO user[IDENTIFIED BY [PASSWORD] ‘new_password’]

示例如下:

GRANT SELECT,CREATE,DROP ON *.*
TO 'cjgong'@'localhost' IDENTIFIED BY ''

2.4.2 通过SET命令修改普通用户密码

语法如下:

SET PASSWORD FOR 'username'@'hostname'=PASSWORD("new_password");

示例如下:

SET PASSWORD FOR 'cjgong'@'localhost'=PASSWORD("123456");

2.4.3 更新系统表mysql.user数据记录修改root用户密码

语法如下:

UPDATE USER SET PASSWORD=PASSWORD("new_password") WHERE USER="user" AND HOST="localhost";

示例如下:

UPDATE USER SET PASSWORD=PASSWORD("new_password") WHERE USER="cjgong" AND HOST="localhost";

2.4.4 通过SET命令修改普通用户密码(2)

使用普通用户登录MySQL服务器,可以通过SET命令修改自己的秘密。

语法如下:

SET PASSWORD=PASSWORD("new_password");

示例如下:

SET PASSWORD=PASSWORD("123456");

2.5 删除普通用户账号

2.5.1 通过DROP USER语句删除普通用户

语法如下:

Drop user user1 [,user2]...

示例如下:

DROP USER 'cjgong'@'localhost';

2.5.2 删除系统表mysql.user数据记录实现删除普通用户账号

DELETE FROM USER WHERE USER="user" AND HOST="localhost"

示例如下:

DELETE FROM USER WHERE USER="cjgong" AND HOST="localhost"

3. 权限管理

权限管理,是指登录到MySQL数据库服务器的的用户需要进行权限验证,只有拥有了权限,才能进行该权限相对应的操作。

权限管理包括授权,查看权限和收回权限。

3.1 对用户进行授权

通过GRANT来对普通用户授权,语法如下:

GRANT priv_type [(colunn_list)] ON databasename.tablename
TO username[IDENTIFIED BY [PASSWORD] 'password']
[,username[IDENTIFIED BY [PASSWORD] 'password']]
……
[,WITH WITH-OPTION[WITH-OPTION]...]

priv_type表示权限的类型,参数column_list表示权限所作用于的字段,databasename.tablename表示数据库中的某个表,参数username表示用户,由用户名和主机名构成;关键字IDENTIFIED BY用来实现设置密码;参数with_option的值只能是下面5个值中的一个:

GRANT OPTION:被授权的用户可以将权限授予其他用户。

MAX_QUERIES_PER_HOUR count:设置每小时可以执行count次查询。

MAX_UPDATES_PER_HOUR count:设置每小时可以执行count次更新。

MAX_CONNECTIONS_PER_HOUR count:设置每小时可以建立count次连接。

MAX_USER_CONNECTIONS count:设置单个用户可以同时具有count个连接。

示例如下所示:

GRANT SELECT,CREATE,DROP, ON *.*
TO 'cjgong'@'localhost' IDENTIFIED BY 'cjgong' WITH GRANT OPTION;

3.2 查看用户所拥有权限

语法如下:

SHOW GRANTS FOR user

示例如下:

SHOW GRANTS FOR 'cjgong'@'localhost'

根据执行结果可以显示相应用户的授权语句,从而能够实现查询用户所拥有的权限功能。

3.3 收回用户所拥有的 权限

语法如下:

REVOKE priv_type [(colunn_list)] ON databasename.tablename
TO username[IDENTIFIED BY [PASSWORD] 'password']
[,username[IDENTIFIED BY [PASSWORD] 'password']]
……
[,WITH WITH-OPTION[WITH-OPTION]...]

示例如下所示:

REVOKE SELECT ON *.*
FROM 'cjgong'@'localhost'

回收全部权限的SQL语法如下:

REVOKE ALL PRIVILEGES,GRANT OPTION
FROM user1 [IDENTIFIED BY[PASSWORD] ‘password’]

[,user2 [IDENTIFIED BY[PASSWORD] ‘password’]]

示例如下:

REVOKE ALL PRIVILEGES,GRANT OPTIONS
FROM 'cjgong'@'localhost'

上述实现回收用户cjgong所拥有的全部权限。

mysql的安全性机制的更多相关文章

  1. mysql的Replication机制

    mysql的Replication机制 参考文档:http://www.doc88.com/p-186638485596.html Mysql的 Replication 是一个异步的复制过程. 从上图 ...

  2. MySQL- 锁机制及MyISAM表锁

    锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许 多用户 共享的资源.如何保证数据并发访问的一致性.有效性是所 ...

  3. mysql的并发处理机制_下篇

        MySQL的并发处理机制,有MVCC及锁机制来处理,上篇简要说明了 MVCC及隔离级别,这篇来说说mysql下的锁.     温馨提示:下文有几个表格长度较长,右下角的博文导航目录会挡道,浏览 ...

  4. MysqL自动提交机制的关闭

    MysqL在执行一句数据库操作命令的时候,通常都是自动提交的.常用引擎下有两种,分别是MyIsam和InnoDB,MyIsam是不支持事务处理的,但InnoDB支持,但InnoDB在不开启事务处理的情 ...

  5. MySQL的安全机制

    MySQL的安全机制: 1.MySQL登录 mysql -u账户 -p密码 -h127.0.0.1 -P端口 数据库名 mysql -h hostname|hostIP -p port -u user ...

  6. [译]在Linux上的提高MySQL/MariaDB安全性的12条建议

    MySQL 是世界上最流行的开源数据库系统,而MariaDB(MySQL的一个分支)是世界上发展最快的开源数据库系统.安装MySQL服务器之后,它的默认配置是不安全的,保护它是一般数据库管理中的基本任 ...

  7. MySQL的复制机制

    MySQL的复制机制 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL复制介绍 1>.MySQL复制允许将主实例(master)上的数据同步到一个或多个从实例( ...

  8. MySQL Innodb日志机制深入分析

    MySQL Innodb日志机制深入分析 http://blog.csdn.net/yunhua_lee/article/details/6567869 1.1. Log & Checkpoi ...

  9. mysql insert锁机制【转】

    最近再找一些MySQL锁表原因,整理出来一部分sql语句会锁表的,方便查阅,整理的不是很全,都是工作中碰到的,会持续更新 笔者能力有限,如果有不正确的,或者不到位的地方,还请大家指出来,方便你我,方便 ...

随机推荐

  1. [Codeforces166B]Polygons 凸包

    大致题意: 给你一个凸多边形A,和一个任意多边形B,判断B是否在A的内部 先对A的点集建凸包,然后枚举B中的点,二分判断是否在A的内部. 二分时可用叉积判断,详细见代码 #include<cst ...

  2. BZOJ4327 [JSOI2012] 玄武密码 [AC自动机]

    题目传送门 玄武密码 Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中.老人们说,这是玄武神 ...

  3. socketserver用法列子

    socketserver socketserver内部使用IO多路复用以及“多线程”和“多进程”,从而实现并发处理多个客户端请求的scoket服务端.即,每个客户端请求连接到服务器时,socket服务 ...

  4. luoguP3255 [JLOI2013]地形生成 动态规划

    出题人语文真好... 各不相同的标号和高度 = 各不相同的标号 + 单独的高度... 第一问比较简单,考虑从大到小插入,在相同情况下,按关键值从小到大插入 这样子,关键大的元素一定会影响到关键小的元素 ...

  5. 【20181026T1】**手枪【dfs】

    题面 [错解] 百年难得一见之提高考搜索了 ...怎么搞啊 相当于是S进去有一个环? tarjan? 跑个联通块,可以穿过去的连一条边? 好主意-- dfs写完了-- 哎等下? 5 5 .##.. # ...

  6. ACM -- 算法小结(七)Phone list解题报告

          HDOJ -- Phone list解题报告 问题描述:给出一些电话号码,如果有共同前缀则输出NO,如果没有则输出YES. 解题关键:将电话号码进行字符串排序,相邻的电话号码进行比较 Sa ...

  7. uva 6959 Judging hash

    Judging Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/problem/viewProb ...

  8. JQ自定义下拉列表插件

    自从上次做了JQ自定义分页插件和表格插件后,就没在自定义过插件了,这一个月都在用linq和ef,基本前端都没怎么去碰了,今天有个同事说有个项目需要在下拉框里面带有复选框,本来想网上找下插件的,一想,其 ...

  9. div中内容超出自动换行

    下面以table中td的内容超出为例说明: 首先: td { display: block; } 然后:给td设置css样式: 1.  td { word-wrap: break-word; } 2. ...

  10. 利用Lucene与Nutch构建简单的全文搜索引擎

    文章地址 1.简介 本次实现分为两个部分,第一个部分是利用Lucene构建一个全文的搜索引擎,另外一部分则是利用Nutch实现同样的功能.由于Lucene并不是一个可以直接运行的程序,且不具备爬虫和文 ...