转自: http://www.cnblogs.com/Richardzhu/p/3318595.html
MySQL之权限管理
一、MySQL权限简介
关于mysql的权限简单的理解就是mysql允许你做你全力以内的事情,不可以越界。比如只允许你执行select操作,那么你就不能执行update操作。只允许你从某台机器上连接mysql,那么你就不能从除那台机器以外的其他机器连接mysql。
那么Mysql的权限是如何实现的呢?这就要说到mysql的两阶段验证,下面详细介绍:第一阶段:服务器首先会检查你是否允许连接。因为创建用户的时候会加上主机限制,可以限制成本地、某个IP、某个IP段、以及任何地方等,只允许你从配置的指定地方登陆。第二阶段:如果你能连接,Mysql会检查你发出的每个请求,看你是否有足够的权限实施它。比如你要更新某个表、或者查询某个表,Mysql会查看你对哪个表或者某个列是否有权限。再比如,你要运行某个存储过程,Mysql会检查你对存储过程是否有执行权限等。
MYSQL到底都有哪些权限呢?从官网复制一个表来看看:
权限 |
权限级别 |
权限说明 |
CREATE |
数据库、表或索引 |
创建数据库、表或索引权限 |
DROP |
数据库或表 |
删除数据库或表权限 |
GRANT OPTION |
数据库、表或保存的程序 |
赋予权限选项 |
REFERENCES |
数据库或表 |
|
ALTER |
表 |
更改表,比如添加字段、索引等 |
DELETE |
表 |
删除数据权限 |
INDEX |
表 |
索引权限 |
INSERT |
表 |
插入权限 |
SELECT |
表 |
查询权限 |
UPDATE |
表 |
更新权限 |
CREATE VIEW |
视图 |
创建视图权限 |
SHOW VIEW |
视图 |
查看视图权限 |
ALTER ROUTINE |
存储过程 |
更改存储过程权限 |
CREATE ROUTINE |
存储过程 |
创建存储过程权限 |
EXECUTE |
存储过程 |
执行存储过程权限 |
FILE |
服务器主机上的文件访问 |
文件访问权限 |
CREATE TEMPORARY TABLES |
服务器管理 |
创建临时表权限 |
LOCK TABLES |
服务器管理 |
锁表权限 |
CREATE USER |
服务器管理 |
创建用户权限 |
PROCESS |
服务器管理 |
查看进程权限 |
RELOAD |
服务器管理 |
执行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的权限 |
REPLICATION CLIENT |
服务器管理 |
复制权限 |
REPLICATION SLAVE |
服务器管理 |
复制权限 |
SHOW DATABASES |
服务器管理 |
查看数据库权限 |
SHUTDOWN |
服务器管理 |
关闭数据库权限 |
SUPER |
服务器管理 |
执行kill线程权限 |
MYSQL的权限如何分布,就是针对表可以设置什么权限,针对列可以设置什么权限等等,这个可以从官方文档中的一个表来说明:
权限分布 |
可能的设置的权限 |
表权限 |
'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter' |
列权限 |
'Select', 'Insert', 'Update', 'References' |
过程权限 |
'Execute', 'Alter Routine', 'Grant' |
二、MySQL权限经验原则:
权限控制主要是出于安全因素,因此需要遵循一下几个经验原则:
1、只授予能满足需要的最小权限,防止用户干坏事。比如用户只是需要查询,那就只给select权限就可以了,不要给用户赋予update、insert或者delete权限。
2、创建用户的时候限制用户的登录主机,一般是限制成指定IP或者内网IP段。
3、初始化数据库的时候删除没有密码的用户。安装完数据库的时候会自动创建一些用户,这些用户默认没有密码。
4、为每个用户设置满足密码复杂度的密码。
5、定期清理不需要的用户。回收权限或者删除用户。
三、MySQL权限实战:
1、GRANT命令使用说明:
先来看一个例子,创建一个只允许从本地登录的超级用户jack,并允许将权限赋予别的用户,密码为:jack.
mysql> grant all privileges on *.* to jack@'localhost' identified by "jack" with grant option; Query OK, 0 rows affected (0.01 sec)
GRANT命令说明:
ALL PRIVILEGES 是表示所有权限,你也可以使用select、update等权限。
ON 用来指定权限针对哪些库和表。
*.* 中前面的*号用来指定数据库名,后面的*号用来指定表名。
TO 表示将权限赋予某个用户。
jack@'localhost' 表示jack用户,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。注意:这里%有的版本不包括本地,以前碰到过给某个用户设置了%允许任何地方登录,但是在本地登录不了,这个和版本有关系,遇到这个问题再加一个localhost的用户就可以了。
IDENTIFIED BY 指定用户的登录密码。
WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其它用户授权。
备注:可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加一个select权限,然后又给用户添加一个insert权限,那么该用户就同时拥有了select和insert权限。
2、刷新权限
使用这个命令使权限生效,尤其是你对那些权限表user、db、host等做了update或者delete更新的时候。以前遇到过使用grant后权限没有更新的情况,只要对权限做了更改就使用FLUSH PRIVILEGES命令来刷新权限。
mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)
3、查看权限
查看当前用户的权限: mysql> show grants; +---------------------------------------------------------------------+ | Grants for root@localhost | +---------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION | | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION | +---------------------------------------------------------------------+ 2 rows in set (0.00 sec) 查看某个用户的权限: mysql> show grants for 'jack'@'%'; +-----------------------------------------------------------------------------------------------------+ | Grants for jack@% | +-----------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'jack'@'%' IDENTIFIED BY PASSWORD '*9BCDC990E611B8D852EFAF1E3919AB6AC8C8A9F0' | +-----------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
4、回收权限
mysql> revoke delete on *.* from 'jack'@'localhost'; Query OK, 0 rows affected (0.01 sec)
5、删除用户
mysql> select host,user,password from user; +-----------+------+-------------------------------------------+ | host | user | password | +-----------+------+-------------------------------------------+ | localhost | root | | | rhel5.4 | root | | | 127.0.0.1 | root | | | ::1 | root | | | localhost | | | | rhel5.4 | | | | localhost | jack | *9BCDC990E611B8D852EFAF1E3919AB6AC8C8A9F0 | +-----------+------+-------------------------------------------+ 7 rows in set (0.00 sec) mysql> drop user 'jack'@'localhost'; Query OK, 0 rows affected (0.01 sec)
6、对账户重命名
mysql> rename user 'jack'@'%' to 'jim'@'%'; Query OK, 0 rows affected (0.00 sec)
7、修改密码
1、用set password命令 mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456'); Query OK, 0 rows affected (0.00 sec) 2、用mysqladmin [root@rhel5 ~]# mysqladmin -uroot -p123456 password 1234abcd 备注: 格式:mysqladmin -u用户名 -p旧密码 password 新密码 3、用update直接编辑user表 mysql> use mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> update user set PASSWORD = PASSWORD('1234abcd') where user = 'root'; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) 4、在丢失root密码的时候: [root@rhel5 ~]# mysqld_safe --skip-grant-tables & [1] 15953 [root@rhel5 ~]# 130911 09:35:33 mysqld_safe Logging to '/mysql/mysql5.5/data/rhel5.4.err'. 130911 09:35:33 mysqld_safe Starting mysqld daemon with databases from /mysql/mysql5.5/data [root@rhel5 ~]# mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.5.22 Source distribution Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> \s -------------- mysql Ver 14.14 Distrib 5.5.22, for Linux (i686) using EditLine wrapper Connection id: 2 Current database: Current user: root@ SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.5.22 Source distribution Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /tmp/mysql.sock Uptime: 36 sec Threads: 1 Questions: 5 Slow queries: 0 Opens: 23 Flush tables: 1 Open tables: 18 Queries per second avg: 0.138 -------------- mysql> use mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> update user set password = PASSWORD('123456') where user = 'root'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
相关推荐
在本项目中,我们主要探讨的是如何利用Spring Boot、Spring Security、JWT(JSON Web Tokens)、MyBatis-Plus以及MySQL数据库来构建一个完整的权限管理系统。下面将详细解析这些技术及其在项目中的应用。 1. Spring...
### 以普通权限运行MySQL的操作指南 在网络安全日益受到重视的今天,确保系统中的每一项服务都以最小必要的权限运行显得尤为重要。对于MySQL这样的数据库服务来说,若其以最高权限(system)运行,一旦出现安全漏洞...
4. **权限和用户管理**:MySQL有其自身的权限系统,如果原DB数据库中有特定的用户和权限设置,可能需要在MySQL中重新配置。 5. **事务处理**:在大量数据迁移时,为了保证数据一致性,可能需要使用事务来确保所有...
通用权限管理系统可练手可毕设,如果项目中有权限开发要求可直接拿来基础开发。 系统设计包括前端Vue框架和后端SpringBoot框架的搭建,以及数据库和权限控制模块的设计。前端使用Vue框架进行页面开发,利用Vue ...
在MySQL数据库管理中,正确地配置用户权限是非常重要的步骤之一,它不仅关乎数据的安全性,还能确保不同角色的用户能够高效、安全地访问所需的数据资源。本文将详细介绍如何设置MySQL用户的权限,并通过具体的示例来...
【jsp+servlet+mysql图书权限管理系统】是一个基于Web的软件应用,主要采用了Java技术栈,包括JSP(JavaServer Pages)、Servlet以及MySQL数据库。这个系统主要用于实现对图书资源的管理和用户权限控制,确保不同...
【标题】"mmall_管理_权限管理mysql_权限_" 指的是一款基于JWT、SpringBoot、Mybatis和MySQL的权限管理系统。这样的系统主要用于控制不同用户或角色在应用程序中的访问权限,确保数据安全和操作合规性。 【描述】...
Spring+SpringMVC+MyBatis+Shiro+MySQL+Redis+Maven+EasyUI+Bootstrap实现的通用权限管理系统。 Spring+SpringMVC+MyBatis+Shiro+MySQL+Redis+Maven+EasyUI+Bootstrap实现的通用权限管理系统 Spring+SpringMVC+...
【标题】:“java/mysql 权限管理系统 源码”是指一套基于Java编程语言和MySQL数据库的权限管理软件系统的源代码。这样的系统通常用于管理用户访问控制、角色分配以及资源的权限设定,确保数据安全和操作合规性。 ...
1. **MySQL权限类型**:包括SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、INDEX、ALTER、GRANT、REVOKE等。 2. **授权**:使用`GRANT`语句向用户授予特定权限。 3. **收回权限**:使用`REVOKE`语句撤销用户的权限...
MySQL 用户权限设置 在 MySQL 数据库中,用户权限设置是非常重要的,因为它涉及到数据的安全和访问控制。本文将详细介绍 MySQL 用户权限设置的相关知识点,包括创建用户、修改密码、赋予权限、回收权限、查看用户...
【标题】:“java+mysql权限管理系统”是一种基于Java技术和MySQL数据库,结合了Spring、Struts和Hibernate(简称S2SH)三大框架构建的高效、实用的权限管理解决方案。这个系统设计的目标是为组织或企业提供安全、...
解决MySQL权限不足的问题需要对MySQL的权限管理系统有基本的理解。通常情况下,可以通过增加必要的权限、刷新权限等方式来解决问题。在实际操作过程中,还需要注意安全性,避免不必要的风险。希望本文能够帮助您有效...
MySQL 账号 权限, 用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建
标题 "pbootcms数据sqlite转mysql数据库" 涉及的是一个常见的数据库迁移过程,从SQLite数据库系统转换到MySQL数据库系统。这个过程在网站或应用的开发和维护中经常遇到,尤其是在更换数据库服务或者需要更强大的...
随着数据库技术的不断发展,用户权限管理将继续是数据库管理员需要掌握的核心技能之一。 本文详细介绍了MySQL中用户权限管理的机制,包括用户账户的创建、权限的分配与撤销、角色的使用,以及安全最佳实践。通过...
MySQL是一种广泛使用的开源关系型数据库管理系统,其安全性是其核心特性之一。在默认情况下,MySQL只允许本地连接,以防止未经授权的远程访问。当你在本地安装好MySQL后,如果希望其他计算机能够连接到你的数据库...
自己初学java,利用之前的项目经验而写出来的一套基础的用户权限管理系统。用到了javaWeb 最底层的servlet 及 jdbc .对初学java的童鞋具有很大的参考意义。页面是用了bootstrap。可以完整的运行。
MySQL数据库的权限管理系统是确保数据库安全的关键组成部分,它允许管理员精细控制用户对数据库资源的访问。权限管理主要包括用户连接验证和请求执行验证两个阶段。在第一阶段,服务器根据用户账户的主机限制判断...
订单管理模块,数据统计echarts表,该管理系统通过Vue+node.js+Element-UI+MySql实现,其主要功能模块含有用户登陆模块,用户管理模块,权限管理模块,商品管理模块,订单管理模块。 论文应当对各个部分的设计和实现...