MySQL用户和数据权限管理详解

目录
  • 1、管理用户
    • 1.1、添加用户
    • 1.2、删除用户
    • 1.3、修改用户名
    • 1.4、修改密码
  • 2、授予权限和回收权限
    • 2.1、授予权限
    • 2.2、权限的转移和限制
    • 2.3、回收权限

1、管理用户

1.1、添加用户

可以使用CREATE USER语句添加一个或多个用户,并设置相应的密码

语法格式:

CREATE USER 用户名 [IDENTIFIED BY [PASSWORD]'密码']

CREATE USER用于创建新的MySQL账户。CREATE USER会在系统本身的mysql数据库的user表中添加一个新记录。要使用CREATE USER,必须拥有mysql数据库的全局CREATE USER权限或INSERT权限。如果账户已经存在,则出现错误(报错)。

例:添加一个新用户usr1,密码为123456

CREATE USER usr1@localhost IDENTIFIED BY'123456';

在用户名的后面声明了关键字localhost。该关键字指定用户创建所使用的MySQL服务器来自于主机。如果一个用户名和主机名中包含特殊符号_或通配符%,则需要用单引号将其括起,%表示一组主机。

1.2、删除用户

语法格式:

DROP USER 用户名

要使用该语句,必须有mysql数据库的全局CREATE USER权限或DELETE权限。DROP USER语句用于删除一个或多个MySQL账户,并取消其权限。

例:删除用户usr1

DROP USER usr1@localhost;

1.3、修改用户名

语法格式:

RENAME USER 旧用户名 TO 新用户名

要使用该语句,必须有全局CREATE USER权限或mysql数据库的UPDATE权限。如果旧账户不存在或者新账户已存在,则会出现错误(报错)。该语句用于对原有MySQL账户进行重命名,可以一次对多个用户更名。

例:将用户usr1和usr2的名字分别修改为user1和user2

RENAME USER
usr1@localhost TO user1@localhost,
usr2@localhost TO user2@localhost;

1.4、修改密码

语法格式:

SET PASSWORD [ FOR 用户名 ]=PASSWORD('新密码')

如果不加FOR用户名,表示修改当前用户的密码。加了FOR用户名则是修改当前主机上的特定用户的密码。用户名的值必须以user_name@host_name的格式给定。

例:将用户user1的密码修改为king

SET PASSWORD FOR user1@localhost=PASSWORD('king');

2、授予权限和回收权限

2.1、授予权限

新的SQL用户不允许访问属于其他SQL用户的表,也不能立即创建自己的表,它必须被授权,可以授予的权限有以下几组:

1、列权限:和表中的一个具体列相关。例如,使用UPDATE语句更新表Book书号列值的权限。

2、表权限:和一个具体表中的所有数据相关。例如,使用SELECT语句查询表Book所有数据的权限。

3、数据库权限:和一个具体的数据库中所有表相关。例如,在已有的Bookstore数据库中创建新表的权限。

4、用户权限:和MySQL所有的数据库相关。例如,删除已有的数据库或者创建一个新数据库的权限。

给某用户授予权限可以使用GRANT语句。使用SHOW GRANTS语句可以查看当前账户拥有的权限。

语法格式:

GRANT 权限1[(列名列表1)][,权限2[(列名列表2)]...
ON [目标]{表名 | * | *.* | 库名.*}
TO 用户1 [IDENTIFIED BY [PASSWORD]'密码1']
[,用户2 [IDENTIFIED BY [PASSWORD]'密码2']]...
[WITH 权限限制1[权限限制2]...]

2.1.1、授予表权限

授予表权限时,权限可以是以下值:

1、SELECT:授予用户使用SELECT语句访问特定表(或视图)的权力。对于视图,用户必须对视图中指定的每个表(或视图)都有SELECT权限。

2、INSERT:授予用户使用INSERT语句向一个特定表中添加行的权力

3、DELETE:授予用户使用DELETE语句向一个特定表中删除行的权力

4、UPDATE:授予用户使用UPDATE语句修改特定表中值的权力

5、REFERENCES:授予用户创建一个外键来参照特定的表的权力

6、CREATE:授予用户使用特定的名字创建一个表的权力

7、ALTER:授予用户使用ALTER TABLE语句修改表的权力

8、INDEX:授予用户在表上定义索引的权力

9、DROP:授予用户删除表的权力

10、ALL或ALL PRIVILEGES:表示所有权限

在授予表权限时,ON关键字后面跟表名,指定授予权限的为表名或视图名

例:授予用户user1在Book表上的SELECT权限

USE Bookstore;
GRANT SELECT
ON Book
TO user1@localhost;

这里假设是在root用户输入了这些语句,这样用户user1就可以使用SELECT语句来查询Book表,而不管是谁创建了该表。

若在TO子句中给存在的用户指定密码,则新密码将原密码覆盖。如果权限授予了一个不存在的用户,MySQL会自动执行一条CREATE USER语句来创建这个用户,但必须为该用户指定密码。

例:用户liu和zhang不存在,授予他们在Book表上的SELECT和UPDATE权限

GRANT SELECT,UPDATE
ON Book
TO liu@localhost IDENTIFIED BY'123456',
zhang@localhost IDENTIFIED BY'123';

2.1.2、授予列权限

对于列权限,权限的值只能取SELECT、INSERT和UPDATE。权限的后面需要加上列名列表。

例:授予user1在Book表上的图书编号列和书名列的UPDATE权限。

GRANT UPDATE(图书编号,书名)
ON Book
TO user1@localhost;

2.1.3、授予数据库权限

表权限适用于一个特定的表,MySQL还支持针对整个数据库的权限。授予数据库权限时,权限可以是以下值:

1、SELECT:授予用户使用SELECT语句访问特定数据库中所有表和视图的权力

2、INSERT:授予用户使用INSERT语句向特定数据库所有表中添加行的权力

3、DELETE:授予用户使用DELETE语句在特定数据库所有表中删除行的权力

4、UPDATE:授予用户使用UPDATE语句更新特定数据库所有表中值的权力

5、REFERENCES:授予用户创建指向特定数据库中的表外键的权力

6、CREATE:授予用户使用CREATE TABLE语句在特定数据库中创建新表的权力

7、ALTER:授予用户使用ALTER TABLE语句修改特定数据库中所有表的结构的权力

8、INDEX:授予用户在特定数据库中的所有表上定义和删除索引的权力

9、DROP:授予用户删除特定数据库中所有表和视图的权力

10、CREATE TEMPORARY TABLES:授予用户在特定数据库中创建临时表的权力

11、CREATE VIEW:授予用户在特定数据库中创建新视图的权力

12、SHOW VIEW:授予用户查看特定数据库中已有视图的视图定义的权力

13、CREATE ROUTINE:授予用户为特定数据库创建存储过程和存储函数的权力

14、ALTER ROUTINE:授予用户更新和删除数据库中已有存储过程和存储函数的权力

15、EXECUTE ROUTINE:授予用户调用特定数据库的存储过程和存储函数的权力

16、LOOK TABLES:授予用户锁定特定数据库中已有表的权力

17、ALL或ALL PRIVILEGES:表示以上所有权限

在GRANT语法格式中,授予数据库权限时ON关键字后面跟*和“库名.*”。*表示当前数据库中的所有表。“库名.*”表示某个数据库中的所有表。

例:授予user1在Bookstore数据库中所有表的SELECT权限

GRANT SELECT
ON Bookstore.*
TO user1@localhost;

2.1.4、授予用户权限

最有效率的权限就是用户权限,可以将授予数据库的权限直接授予用户,使用户获得对服务器上所有数据库的该权限。

MySQL授予用户权限时权限还可以是以下值:

1、CREATE USER:授予用户创建和删除新用户的权限

2、SHOW DATABASES:授予用户使用SHOW DATABASES语句查看所有已有数据库的定义的权力

在GRANT语法格式中,授予用户权限时ON子句中使用“*.*”,表示所有数据库的所有表

例:授予user2对所有数据库中所有表的CREATE、ALTERT和DROP权限

GRANT CREATE,ALTER,DROP
ON *.*
TO user2@localhost IDENTIFIED BY'123456';

例:授予user2创建新用户的权限

GRANT CREATE USER
ON *.*
TO user2@localhost;

2.2、权限的转移和限制

GRANT语句的最后可以使用WITH子句。如果指定权限限制为GRANT OPTION,则表示TO子句中指定的所有用户都有把自己所拥有的权限授予其他用户的权力,而不管其他用户是否拥有该权限。

例:授予user3在Book表上的SELECT权限,并允许其将该权限授予其他用户

GRANT SELECT
ON Bookstore.Book
TO user3@localhost IDENTIFIED BY'123456'
WITH GRANT OPTION;

使用了WITH GRANT OPTION子句后,如果user3在该表上还拥有其他权限,他可以将其他权限也授予其他用户而不仅限于SELECT。

WITH子句后的权限限制也可以对一个用户授予使用限制,其中,MAX_QUERIES_PER_HOUR次数表示每小时可以查询数据库的次数。

MAX_CONNECTIONS_PER_HOUR次数表示每小时可以连接数据库的次数。

MAX_UPDATES_PES_HOUR次数表示每小时可以修改数据库的次数。

MAX_USER_CONNECTIONS次数表示同时连接MySQL的最大用户数。

次数是一个数值,对于前3个权限限制指定,次数如果为0则表示不起限制作用。

例:授予D每小时只能处理一条SELECT语句的权限

GRANT SELECT
ON Book
TO D@localhost
WITH MAX_QUERIES_PER_HOUR 1;

2.3、回收权限

要从一个用户回收权限,但不从mysql数据库的user表中删除该用户,可以使用REVOKE语句,该语句和GRANT语句格式相似,但具有相反的效果。要使用REVOKE语句,用户必须拥有mysql数据库的全局CREATE USER权限或UPDATE权限。

语法格式:

REVOKE 权限[(列名列表)]...
ON {表名 | * | *.* | 库名.* }
FROM 用户...

REVOKE ALL PRIVILEGES,GRANT OPTION FROM 用户

第一种格式用来回收用户的某些特定权限,第二种格式回收用户的所有权限

例:回收用户user在Book表上的SELECT权限

REVOKE SELECT
ON Book
FROM user@localhost;

到此这篇关于MySQL用户和数据权限管理详解的文章就介绍到这了,更多相关MySQL权限管理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Mysql 用户权限管理实现

    1. MySQL 权限介绍 mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表,我当前的版本mysql 5.7.22 . mysql权限表的验证过程为: 先从user表中的Host,User,Password这3个字段中判断连接的ip.用户名.密码是否存在,存在则通过验证. 通过身份认证后,进行权限分配,按照user,db,tables_priv,columns_priv的顺序进行验证.即先检查全局权限表user,如果user中对应的

  • mysql用户权限管理实例分析

    本文实例讲述了mysql用户权限管理.分享给大家供大家参考,具体如下: 本文内容: 什么是用户权限 恰当的用户权限 查看权限 修改权限 删除权限 首发日期:2018-04-19 什么是用户权限: 每个用户都有自己的用户权限,这些用户权限比如有查询表权限.修改表权限.插入表权限.新增用户权限等等. 具体的权限: 恰当的用户权限: 多数用户只需要对表进行读和写,但少数用户甚至需要能创建和删除表: 某些用户需要读表,但可能不需要更新表: 对于大多数用户,应该只提供对表的读写,不应该允许他们创建表.修改

  • MySQL用户权限管理详解

    用户权限管理主要有以下作用: 1. 可以限制用户访问哪些库.哪些表 2. 可以限制用户对哪些表执行SELECT.CREATE.DELETE.DELETE.ALTER等操作 3. 可以限制用户登录的IP或域名 4. 可以限制用户自己的权限是否可以授权给别的用户 一.用户授权 复制代码 代码如下: mysql> grant all privileges on *.* to 'yangxin'@'%' identified by 'yangxin123456' with grant option;  

  • MySQL数据库用户权限管理

    目录 1.用户管理 1.1.创建用户 1.2.删除用户 1.3.修改用户密码 2.权限管理 2.1.授予权限 grant 2.2.取消权限 revoke 2.3.刷新权限 flush 3.密码丢失的解决方案 1.用户管理 mysql的用户信息保存在了mysql.user中: select * from mysql.user\G *************************** 5. row *************************** Host: localhost User:

  • MySQL用户与权限的管理详解

    本文实例讲述了MySQL用户与权限的管理.分享给大家供大家参考,具体如下: 用户连接到MySQL,可以做各种查询,这都是MySQL用户与权限功能在背后维持着操作. 用户与数据库服务器交互数据,分为两个阶段: (1)你有没有权连接上来 (2)你有没有权执行本操作 1.你有没有权连接上来 服务器如何判断用户有没有权连接上来? 依据: 1)你从哪里来?host 2)你是谁?user 3)你的密码是多少?password 用户的这三个信息,存储在mysql库中的user表中. 修改host域,使IP可以

  • 详解MySQL 用户权限管理

    前言: 不清楚各位同学对数据库用户权限管理是否了解,作为一名 DBA ,用户权限管理是绕不开的一项工作内容.特别是生产库,数据库用户权限更应该规范管理.本篇文章将会介绍下 MySQL 用户权限管理相关内容. 1.用户权限简介 当我们创建过数据库用户后,还不能执行任何操作,需要为该用户分配适当的访问权限. 关于 MySQL 用户权限简单的理解就是数据库只允许用户做你权利以内的事情,不可以越界.比如只允许你执行 select 操作,那么你就不能执行 update 操作.只允许你从某个 IP 上连接

  • MySQL用户和数据权限管理详解

    目录 1.管理用户 1.1.添加用户 1.2.删除用户 1.3.修改用户名 1.4.修改密码 2.授予权限和回收权限 2.1.授予权限 2.2.权限的转移和限制 2.3.回收权限 1.管理用户 1.1.添加用户 可以使用CREATE USER语句添加一个或多个用户,并设置相应的密码 语法格式: CREATE USER 用户名 [IDENTIFIED BY [PASSWORD]'密码'] CREATE USER用于创建新的MySQL账户.CREATE USER会在系统本身的mysql数据库的use

  • MongoDB数据库用户角色和权限管理详解

    查看数据库 使用终端命令行输入 mongo 登陆 mongodb 之后切换到 admin 库,并认证后可查看所有数据库,操作如下所示: [root@renwole.com ~]# mongo MongoDB shell version v4.4.0 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id&

  • Kubernetes存储系统数据持久化管理详解

    目录 引言 安装存储系统 PV PVC StorageClass 安装NFS Provisioner 使用StorageClass 总结 引言 Kubernetes为了能更好的支持有状态应用的数据存储问题,除了基本的HostPath和EmptyDir提供的数据持久化方案之外,还提供了PV,PVC和StorageClass资源对象来对存储进行管理. PV的全称是Persistent Volume(持久化卷),是对底层数据存储的抽象,PV由管理员创建.维护以及配置,它和底层的数据存储实现方法有关,比

  • Android通过json向MySQL中读写数据的方法详解【读取篇】

    本文实例讲述了Android通过json向MySQL中读取数据的方法.分享给大家供大家参考,具体如下: 首先 要定义几个解析json的方法parseJsonMulti,代码如下: private void parseJsonMulti(String strResult) { try { Log.v("strResult11","strResult11="+strResult); int index=strResult.indexOf("[");

  • Android通过json向MySQL中读写数据的方法详解【写入篇】

    本文实例讲述了Android通过json向MySQL中写入数据的方法.分享给大家供大家参考,具体如下: 先说一下如何通过json将Android程序中的数据上传到MySQL中: 首先定义一个类JSONParser.Java类,将json上传数据的方法封装好,可以直接在主程序中调用该类,代码如下 public class JSONParser { static InputStream is = null; static JSONObject jObj = null; static String j

  • nodejs acl的用户权限管理详解

    说明 Q: 这个工具用来做什么的呢 A: 用户有不同的权限,比如管理员,vip,普通用户,每个用户对应访问api,页面都不一样 nodejs有两个比较有名的权限管理模块 一个是acl 一个是rbac 综合对比了一下最终在做项目的时候选择了acl 功能列表: addUserRoles //给某用户添加角色 removeUserRoles //移除某用户角色 userRoles //获取某用户所有角色 roleUsers //获取所有是此角色的用户 hasRole // 某用户是否是某角色 addR

  • Java如何利用Mybatis进行数据权限控制详解

    前言 权限控制主要分为两块,认证(Authentication)与授权(Authorization).认证之后确认了身份正确,业务系统就会进行授权,现在业界比较流行的模型就是RBAC(Role-Based Access Control).RBAC包含为下面四个要素:用户.角色.权限.资源.用户是源头,资源是目标,用户绑定至角色,资源与权限关联,最终将角色与权限关联,就形成了比较完整灵活的权限控制模型. 资源是最终需要控制的标的物,但是我们在一个业务系统中要将哪些元素作为待控制的资源呢?我将系统中

  • MongoDB数据库权限管理详解

    前几天网友问MongoDB数据库权限方面的问题.当时大致的了解了一下,这周仔细了解了一下.对于一个数据库不可能随意的访问,肯定要有写访问限制. 在了解这个之前首先熟悉下shell客户端.打开shell客户端的方法:mongo.关闭数据库引擎的话可以使用db.shutdownServer(). 一.shell命令 MongoDB的shell提供了一些命令,可以从shell提示符执行它们. help<option>:用于为MongoDB的shell命令显示语法帮助.option参数允许指定你想得到

  • MySQL多表数据记录查询详解

    在实际应用中,经常需要实现在一个查询语句中显示多张表的数据,这就是所谓的多表数据记录连接查询,简称来年将诶查询. 在具体实现连接查询操作时,首先将两个或两个以上的表按照某个条件连接起来,然后再查询到所要求的数据记录.连接查询分为内连接查询和外连接查询. 在具体应用中,如果需要实现多表数据记录查询,一般不使用连接查询,因为该操作效率比较低.于是MySQL又提供 了连接查询的替代操作,子查询操作. 1.关系数据操作:  在连接查询中,首先需要对两张或两张以上的表进行连接操作.连接操作是关系数据操作中

随机推荐