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. 简单3步,你即可以用上myFocus

    Step 1. 在html的标签内引入相关文件 <script type="text/javascript" src="js/myfocus-2.0.0.min.j ...

  2. reduce的特殊用法

    //计算数组中每个元素出现的次数var arr = ["apple","orange","apple","orange" ...

  3. My-Eclipse 快捷键大全

    Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Ctrl+Alt+↑ 复制当前行到上一行(复制增加) Alt+ ...

  4. GAN生成图像论文总结

    GAN Theory Modifyingthe Optimization of GAN 题目 内容 GAN   DCGAN   WGAN   Least-square GAN   Loss Sensi ...

  5. (转)全文检索技术学习(一)——Lucene的介绍

    http://blog.csdn.net/yerenyuan_pku/article/details/72582979 本文我将为大家讲解全文检索技术——Lucene,现在这个技术用到的比较多,我觉得 ...

  6. POJ_3565_Ants

    题意:给出N个白点和N个黑点,要求用N条不相交的线段把它们连接起来,其中每条线段恰好连接一个白点和一个黑点,每个点恰好连接到一条线段. 分析:因为有结点黑白两色,我们不难想到构造一个二分图,其中每个白 ...

  7. Flask框架 之第一个Flask程序

    from flask import Flask # 创建flask应用对象 # __name__ 代表当前模块名称 # flask以当前目录为总目录,static目录为静态目录,templates为模 ...

  8. JAVA程序员面试笔试宝典2

    1.Java集合框架 2.迭代器 使用容器的iterator()方法返回一个iterator,然后通过iterator的next()方法返回第一个元素 使用iterator的hasnext()方法判断 ...

  9. centos7安装个人博客wordpress

    第一步: 安装apache web 第二步: 安装MariaDB数据库 第三步: 安装PHP 第四步: 安装phpMyAdmin 第五部: 创建数据库: 第六部: 下载wordpress 第七部:复制 ...

  10. linux cp复制文件 直接覆盖

    命令: \cp -rf aaaa/* bbbb 复制aaa下的文件到bbb目录