1 简单介绍

1.1 概要

1.2 权限分类

2 加入用户

    2.1 语法例如以下:

CREATE USER user_specification [, user_specification] ...

user_specification:
user
[
| IDENTIFIED WITH auth_plugin [AS 'auth_string']
IDENTIFIED BY [PASSWORD] 'password'
]

    2.2 实例:

mysql> create user local@localhost identified by 'local';
mysql> create user simple;
mysql> create user 'remote'@'%' identified by 'remote';
mysql> insert into mysql.user (Host, User, Password) values ('localhost', 'simple', password('simple'));

注:假设username或主机名包括特殊字符。必须在其前后使用单引號。若不包括特殊字符。单引號可省略。

username后面主机名为localhost表示同意本地用户连接到mysql,主机名为%表示同意全部外部主机连接到mysql。

创建username时不指定主机名,默觉得%。

创建username同样。主机名不同。mysql觉得这是两个不同用户。

            创建用户不指定password,则同意相关用户不用通过password訪问。

    2.3 查看用户权限:

mysql> select * from mysql.user where USER='remote' \G
*************************** 1. row ***************************
Host: %
User: remote
Password: *123DD712CFDED6313E0DDD2A6E0D62F12E580A6F
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:
authentication_string: NULL

权限均为N,表示此时用户还没有太多权限,他们仅仅能使用show语句查询全部存储引擎和字符集的列表。它们能够看到数据库information_schema,并可对表进行查询操作。不能使用ddl及dml语句。

3 改动username及password

    3.1 改动username语法:

RENAME USER old_user TO new_user
[, old_user TO new_user] ...

    3.2 实例:

mysql> rename user 'remote'@'%' to 'remote1'@'%';
mysql> rename user 'simple' to 'simple'@'10.186.18.%';

注:这条语句仅仅能改动username字或主机名。不能改动用户password。

实例1改动了username,实例2改动了主机名。

    3.3 改动用户password语法:

SET PASSWORD [FOR user] =
{
PASSWORD('cleartext password')
| OLD_PASSWORD('cleartext password')
| 'encrypted password'
}

    3.4 实例:

mysql> set password for remote1 = password('remote1');
mysql> set password for simple@'localhost' = password('simple1');

注:[FOR user]中user默觉得远程用户(如%),若要改动本地用户须要在username后指定localhost(如实例2)。

若用户没有设定password不能通过此命令加入password。否则会报错,提示没有匹配的行。

4 删除用户

    4.1 删除用户语法:

DROP USER user [, user] ...

    4.2 实例:

mysql> drop user remote1;
mysql> drop user simple@'localhost';
mysql> drop user simple@'10.186.18.%';

注:若仅指定username,未指定主机名,则主机名默觉得‘%’。

删除用户后,用户所建的表,索引或者其它数据库对象保留,由于mysql并没有记录谁创建了这些对象。

5 MySQL可授予的权限分类

注:库级别对库中全部表起作用,表级别仅仅针对库中特定表起作用。

    5.1 授权分类列表

权限类型 作用域 简单介绍
SELECT 全局,库,表。列 使用户能使用SELECT訪问特定表
INSERT 全局,库,表,列 使用户能使用INSERT在特定表中加入行
UPDATE 全局,库,表,列 使用户能使用UPDATE改动特定表中的值
DELETE 全局,库。表 使用户能使用DELETE删除特定表中的行
CREATE 全局,库,表 使用户能使用CREATE创建数据库及表
ALTER 全局,库,表 使用户能使用ALTEER TABLE改动数据库中特定表
DROP 全局,库。表 使用户能使用DROP删除库,表及视图
INDEX 全局。库,表 使用户具有在表上创建。删除索引的能力
REFERENCES 全局。库。表 使用户具有在表上创建外键的能力
ALL [ALL PRIVILEGES] 全局,库。表,过程。proxy 全部权限名的缩写(除了GRANT OPTION)
CREATE VIEW 全局。库,表 使用户具有创建和改动视图的权利
EXECUTE 全局,库。表 使用户具有运行存储过程的权利
GRANT OPTION 全局,库,表,过程,proxy 使用户具有超级权限(可对其它用户授权或回收权利)
SHOW VIEW 全局,库,表 使用户具有SHOW CREATE VIEW的权限
TRIGGER 全局,库,表 使用户具有操作trigger的全部权限
ALTER ROUTINE 全局。库。过程 使用户具有改动和删除特定数据库中存储过程及存储函数的能力
CREATE ROUTINE 全局,库 使用户具有在特定数据库中新建存储过程及存储函数的能力
CREATE TABLESPACE 全局 使用户可以创建,改动,删除tablespaces and log file groups
CREATE TEMPORARY TABLES 全局,库 使用户可以CREATE TEMPORARY TABLE
CREATE USER 全局 使用户可以CREATE,RENAME,DROP USER及REVOKE ALL PRIVILEGES
EVENT 全局。库 使用户可以使用事件调度
FILE 全局 使用户可以触发数据库读或写文件
LOCK TABLES 全局。库 使用户在有SELECT权限的表上有锁表权限
PROCESS 全局 使用户可以使用SHOW PROCESSLIST查看全部线程
PROXY 用户到用户 使用户可以使用代理
RELOAD 全局 使用户可以进行FLUSH操作
REPLICATION CLIENT 全局 使用户可以查找主从server
REPLICATION SLAVE 全局 使从机可以从主机读取binlog
SHOW DATABASES 全局 使用SHOW DATABASES查看全部数据库
SHUTDOWN 全局 使用户可以使用mysqladmin shutdown停止数据库服务
SUPER 全局 同意使用其它管理命令,如: CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL, 及mysqladmin debug 
USAGE   no privileges 的同义词

    5.2 授权语法

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] object_type:
TABLE
| FUNCTION
| PROCEDURE priv_level:
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name user_specification:
user
[
| IDENTIFIED WITH auth_plugin [AS 'auth_string']
IDENTIFIED BY [PASSWORD] 'password'
] ssl_option:
SSL
| X509
| CIPHER 'cipher'
| ISSUER 'issuer'
| SUBJECT 'subject' with_option:
GRANT OPTION
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count

    5.3 创建測试表及数据

mysql> use test;
mysql> create table pri_test(c1 int(10), c2 varchar(20));
mysql> insert into pri_test values (1, 'test1'), (2, 'test2');

6 授予用户表与列级别权限

    6.1 创建測试用户

create user user_tab_insert@'%' identified by 'user_tab_insert';

    6.2 授权实例

grant insert on test.pri_test to user_tab_insert;
grant update (c1) on test.pri_test to user_tab_update@'localhost' identified by 'user_tab_update';

    注:授权后用户user_tab_insert能够对表pri_test进行数据插入,用户user_tab_update能够对表pri_test进行更新。而无论是谁创建了这张表。

假设授权一个不存在的用户。如user_tab_update。mysql会自己主动创建这个用户,默认主机位‘%’,且没有指定password。

所以授权时最好明白指定。

对于几个权限如update,reference能够指明权限所使用的列,如表pri_test的c1列。

7 授予用户数据库级别权限

    7.1 创建測试用户

create user user_db_delete@'%' identified by 'user_db_delete';
create user user_db_alter@'%' identified by 'user_db_alter';

    7.2 授权实例

grant delete on test.* to user_db_delete;
grant alter on test.* to user_db_alter;

注:授予数据库权限与表权限类似,授予一个权限不意味着拥有还有一个权限。如:授予用户delete和alter权限,不意味着用户能select查询数据库中的表。

8.授予用户全局级别权限

    8.1 创建測试用户

create user user_alter@'%' identified by 'user_alter';
create user user_all@'%' identified by 'user_all';

    8.2 授权实例

grant alter on *.* to user_alter;
grant all on *.* to user_all;

9 查看权限

    9.1 查看当前用户权限:

mysql> show grants;
+--------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@% |
+--------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '*8F5FD68DB2095E8C849C884A05EC8E2B75C418B2' WITH GRANT OPTION |
+--------------------------------------------------------------------------------------------------------------------------------+

    9.2 查看指定用户权限:

方法1:

mysql> show grants for user_alter@'%';
+-----------------------------------------------------------------------------------------------------------+
| Grants for user_alter@% |
+-----------------------------------------------------------------------------------------------------------+
| GRANT ALTER ON *.* TO 'user_alter'@'%' IDENTIFIED BY PASSWORD '*C0D3F7283734BF5F77E41352ADFC9A307AC8A344' |
+-----------------------------------------------------------------------------------------------------------+

方法2:

mysql> select * from mysql.user where user='user_all' \G
*************************** 1. row ***************************
Host: %
User: user_all
Password: *F02C912C68B67B7097BAEC8FE76BA6F50357895C
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: N
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
Event_priv: Y
Trigger_priv: Y
Create_tablespace_priv: Y
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin:
authentication_string: NULL

10 权限传递

grant语句最后能够跟with grant option,同意被授权用户将所获得权限传递给第三方用户,而无论其他用户是否具有该权限。

    对照1:使用with grant option

通过root用户登录到mysql,创建用户select_grant1,select_grant2并为select_grant1授权

/mysql-5.5.28/bin/mysql -uroot -pjesse -h10.186.18.108 -P3355
mysql> create user select_grant1@'%',select_grant2@'%';
mysql> grant select on *.* to select_grant1@'%' with grant option;

通过select_grant1用户登录到mysql,并为select_grant2授权

/mysql-5.5.28/bin/mysql  -uselect_grant1 -h10.186.18.108 -P3355
mysql> grant select on *.* to select_grant2@'%' with grant option;
Query OK, 0 rows affected (0.00 sec)

授权成功!

    对照2:未使用with grant option

通过root用户登录到mysql,创建用户select_grant1,select_grant2并为select_grant1授权

/mysql-5.5.28/bin/mysql -uroot -pjesse -h10.186.18.108 -P3355
mysql> create user select_no_grant1@'%',select_no_grant2@'%';
mysql> grant select on *.* to select_no_grant1@'%';

通过select_grant1用户登录到mysql,并为select_grant2授权

/mysql-5.5.28/bin/mysql -uselect_no_grant1 -h10.186.18.108 -P3355
mysql> grant select on *.* to select_no_grant2@'%';
ERROR 1045 (28000): Access denied for user 'select_no_grant1'@'%' (using password: NO)

11 限制权限

能够对用户授予使用限制,如:每小时能够查询数据库的次数为5次。

mysql> grant select on test.* to limit_select@'%' with MAX_QUERIES_PER_HOUR 5;

还有其他3个參数MAX_UPDATES_PER_HOUR, MAX_CONNECTIONS_PER_HOUR, MAX_USER_CONNECTIONS分别表示每小时更新mysql的次数,每小时连接mysql的次数及每小时的最大用户数,假设为0,则表示没有限制。

12 回收权限

revoke select on *.* from select_no_grant1@'%';

revoke select on *.* from select_grant1@'%';
revoke grant option on *.* from select_grant1@'%';

用户授予权限时没有使用with grant option。直接revoke就可以(演示样例1)。

使用with grant option的话,回收完权限还要grant option(演示样例2,3)。

13视图与安全

grant语句不仅能够引用表,也能够引用视图。表权限的全部类型都能够在视图上授予。

**************************************************************************************************

   原文地址:http://blog.csdn.net/jesseyoung/article/details/38052519 

**************************************************************************************************

MySQL用户及数据安全专题的更多相关文章

  1. 详解nginx、php-fpm和mysql用户权限

    通常情况下,我们运行web应用的服务器有CentOS.Ubuntu.Debian等等的Linux发行版本.这时候,构成服务架构所必须的Nginx.php和MySQL等应用的权限控制就显得非常重要,各个 ...

  2. 烂泥:nginx、php-fpm、mysql用户权限解析

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://ilanni.blog.51cto.com/526870/1561097 本文首发 ...

  3. mysql用户密码修改,用户添加、删除及设置权限

    一下的示例所用用户名和密码为:test,111111 Mysql密码修改: Mysql修改密码需要root的权限,先执行mysql -uroot -p(密码); 1)使用set password方式来 ...

  4. 如何通过命令行创建和设置一个MySQL用户

    我想要在MySQL服务器上创建一个新的用户帐号,并且赋予他适当的权限和资源限制.如何通过命令行的方式来创建并且设置一个MySQL用户呢? 要访问一个MySQL服务器,你需要使用一个用户帐号登录其中方可 ...

  5. MySQL用户与权限管理

    执行mysql select 查询报错: SELECT command denied to user 'root'@'localhost' for table "xxx" 问题原因 ...

  6. mysql用户权限

    mysql> show grants for root@'localhost';+-------------------------------------------------------- ...

  7. MySQL 用户与授权管理详解

    大纲 一.前言 二.创建用户并授权 三.GRANT语句的种类 四.撤权并删除用户 一.前言 做为Mysql数据库管理员管理用户账户,是一件很重要的事,指出哪个用户可以连接服务器,从哪里连接,连接后能做 ...

  8. 创建MySQL用户 赋予某指定库表的权限 flush privileges才能生效!!!!;@'localhost'授权本地,@'%'授权远程

    update ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value 建议使用GRANT语句进行授权,语句如下: gra ...

  9. MySql 用户 及权限操作

    bin/msyql -h host -u user -p    bin/mysql -u mysql -p  本地登录 如无密码按回车直接进入mySql   bin/mysqladmin -u roo ...

随机推荐

  1. MySql数据库存储emoji表情报错解决办法

    异常:java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1 解决: ...

  2. iOS浏览器不能打开手机QQ客服与指定用户聊天界面

    这个问题是我在公司需求的时候遇到的,QQ推广工具网站获取的链接在苹果自带浏览器没法打开到聊天界面,是因为safair在打开到app store的时候把参数给丢了,app store再打开到QQ的时候就 ...

  3. CAD在一个点构造选择集

    主要用到函数说明: IMxDrawSelectionSet::SelectAtPoint 在一个点构造选择集.详细说明如下: 参数 说明 [in] IMxDrawPoint* point 点坐标 [i ...

  4. java动态代理实现与原理详细分析(【转载】By--- Gonjan )

    [转载]By---Gonjan  关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 一.代理模式     ...

  5. Description Resource Path Location Type Missing artifact com.********:framework:jar:1.0.2 pom.xml /项目名 line **** Maven Dependency Problem

    问题具体描述如下图所示: 对于该问题本人是这么解决的. 在window下[Preferences]目录找到[Maven]下的[usersetting] 查看local repository 里面的路径 ...

  6. 出现For input string: "" 错误

    然后是因为后台生成的是一个数组,前台取的是一个对象,所以会产生这个错误 前后台交互时 mv.addObject("vo1",fhList.get(0));}将数组改成fhList. ...

  7. anaconda镜像

    下载一个包老是下载不下来,于是放弃了官方版改为国内镜像. 清华镜像 (打开Anaconda Prompt   或者 打开cmd,运行下面的命令) conda config --add channels ...

  8. [Luogu] P4254 [JSOI2008]Blue Mary开公司

    题目背景 Blue Mary 最近在筹备开一家自己的网络公司.由于他缺乏经济头脑,所以先后聘请了若干个金融顾问为他设计经营方案. 题目描述 万事开头难,经营公司更是如此.开始的收益往往是很低的,不过随 ...

  9. Java垃圾回收简介

    Java关键术语 JavaAPI:一系列帮助开发者创建Java应用程序的封装好的库. Java 开发工具包 (JDK):一系列工具帮助开发者创建Java应用程序.JDK包含工具编译.运行.打包.分发和 ...

  10. js之条件判断

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...