热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

MySQL用户与权限管理

MySQL用户与权限管理
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处。LaplaceDemon/SJQ

MySQL权限系统简介

MySQL的权限相关信息主要存储在几个被称为grant tables的系统表中,即mysql.User,mysql.db,mysql.Host,mysql.table_priv和mysql.column_priv。

权限信息数据量小,且访问频繁,所以每次启动MySQL时,都会将所有权限信息都加载到内存中,并保存在几个特定的结构里。所有每次手动修改了相关权限表之后,都需要执行“FLUSH PRIVILEGES”命令。

使用GRANT命令,REVOKE命令,CREATER USER命令,DROP USER命令修改用户相关权限时,在修改grant tables的同时,也会修改内存中的权限信息。

尽量使用GRANT,REVOKE,CREATER USER,DROP USER等命令。

用户管理

CREATER USER 命令创建用户

创建用户首先必须拥有mysql数据库的全局CREATE USER 权限,或INSERT权限。对于每个账户,CREATE USER会在没有权限的mysql.user表中创建一条记录。若账户不存在,则出现错误。使用自选的IDENTIFIED BY子句设置用户密码。

该命令创建的用户无任何特别权限,仅拥有初始USAGE权限。

CREATE USER user [IDENHTITY BY [PASSWORD ‘PASSWORD’]][, user [IDENHTITY BY [PASSWORD ‘PASSWORD’]]]

DROP USER命令删除用户

闲置账户应该被删除。DROP USER 不能自动关闭任何打开的用户对话;而且,若用户有打开的对话,此时取消用户,则命令不会生效,直到用户对话被关闭后才生效。一旦对话被关闭,用户也被取消,此用户再次登录时将失败。

DROP USER user[,user]...

RENAME USER 重命名用户

当旧账户不存在或新账户已存在,则会出现错误。

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

权限管理

要为某个用户授权使用GRANT命令,要去除某个用户的权限使用REVOKE命令。还有一种暴力的方法即直接更新grant tables系统表。

当给某个用户授权时,需要指定用户名与主机。格式:’username’@’hostname’。授权时,若仅指定用户名,则MySQL会自动认为是对’username’@’% ’授权。要去除某个用户的权限,也需要指定主机。

查看某个用户的权限

方法一:

SHOW GRANTS FOR ’username’@’hostname’

方法二:

查询grant tables的权限信息。

GRANT和REVOKE命令

GRANT和REVOKE命令用来管理访问权限,也可以用来创建和删除用户,但在MySQL5.0.2可以利用GREATE USER和DROP USER命令更容易实现。

GRANT和REVOKE命令对于谁可以操作服务器及其内容的各个方面提供了多程度的控制,从谁可以关闭服务器,到谁可以修改特定表字段中的信息都能控制。

普通用户的权限权限应用于描述

SELECT表,列允许用户从表中选择行(记录)

INSERT表,列允许用户在表中插入新行

UPDATE表,列允许用户修改现存表里行中的值

DELETE表允许用户删除现存表的行

INDEX表允许用户创建和拖动特定表索引

ALTER表允许用户改变现存表的结构。例如,可添加列、重命名列或表、修改列的数据类型

CREATE数据库,表允许用户创建新数据库或表。如果在GRANT中指定了一个特定的数据库或表,他们只能够创建该数据库或表,即他们必须首先删除(Drop)它

DROP数据库,表允许用户拖动(删除)数据库或表

管理员权限权限描述

CREATE TEMPORARY TABLES允许管理员在CREATE TABLE语句中使用TEMPORARY关键字

FILE允许将数据从文件读入表,或从表读入文件

LOCK TABLES允许使用LOCK TABLES语句

PROCESS允许管理员查看属于所有用户的服务器进程

RELOAD允许管理员重新载入授权表、清空授权、主机、日志和表格

REPLICATION CLIENT允许在复制主机(Master)和从机(Slave)上使用SHOW STATUS

REPLICATION SLAVE允许复制从服务器连接到主服务器

SHOW DATABASES允许使用SHOW DATABASES语句查看所有的数据库列表。没有这个权限,用户只能看到他们能够看到的数据库

SHUTDOWN允许管理员关闭MySQL服务器

SUPER允许管理员关闭属于任何用户的线程

特别的权限权限描述

ALL(或ALL PREVILEGES)授予所有权限

USAGE不授予权限。这将创建一个用户并允许他登录,但不允许其他操作,如update/select 等。

授权层级

MySQL中的权限分为5个级别:

全局层级(Global Level)

数据库层级(Databases Level)

表层级(Table Level)

列层级(Column Level)

子程序层级(Routine Level)

权限生效

MySQL数据库服务器启动时,以及使用GRANT与REVOKE语句的时,服务器会自动读取grant表。同时,可以手动修改它们。

当手动更新它们时,MySQL服务器将不会注意到他们已经被修改了。必须向服务器指出已经对权限进行修改,有3种方法可以实现这个任务。可以在MySQL命令提示符下(必须以管理员身份进入)键入命令:

flush privileges;

或者在shell环境下使用

mysqladmin flush-privileges

mysqladmin reload

此后当数据库再次连接的时候,系统将检查全局级别权限;当下一条命令被执行时,将检查数据库级别的权限;而表级别和列级别权限权限将在用户下次请求的时候被检查。

设置账户密码

可以用mysqladmin命令指定密码:

mysqladmin -u user_name -h host_name password “newpwd”

mysqladmin重设服务器host_name,且用户名为user_name用户的密码,新密码为“newpwd”。

set password命令设置用户密码:

只有特定用户(可以更新mysql数据库的用户,如root)身份登录,才可以修改其他用户密码。

set password for‘jeffrey’@’%’=password(‘biscuit’);

若不以匿名用户连接,则可以省略for子句而修改自己的密码:

set password =password(‘biscuit’);

在全局级别下使用GRANT USAGE语句(在*.*)指定某个账户的密码,而不影响账户当前权限:

GRANT USAGE ON *.* TO ‘jeffrey’@’%’ IDENTIFIED BY ’biscuit’;

在创建新账户时建立密码,要为password列提供一个具体值:

mysql -u root mysql

INSERT INTO user(Host,User,Password) VALUES (‘%’,’jeffrey’,PASSWORD(‘biscuit’’));

FLUSH PRIVILEGES;

更改已有账户的密码,要应用UPDATE语句来设置password列值。

mysql -u root mysql

UPDATE user SET Password =PASSWORD(‘bagel’) WHERE Host = ‘%’ AND User =’francis’;

FLUSH PRIVILEGES;

设置密码时,使用SET PASSWORD,INSERT,UPDATE设定密码,使用PASSWORD()函数对密码进行加密。

若使用GRANT..IDENTIFIED BY语句或mysqladmin password命令设置密码,这些命令会对密码自动加密,不需要使用PASSWORD()函数。

注意安全

在管理级别,一定不能将mysql.user表的访问权限授予任何非管理账户。

为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处。LaplaceDemon/SJQ

推荐阅读
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 如何使用代理服务器进行网页抓取?
    本文介绍了如何使用代理服务器进行网页抓取,并探讨了数据驱动对竞争优势的重要性。通过网页抓取,企业可以快速获取并分析大量与需求相关的数据,从而制定营销战略。同时,网页抓取还可以帮助电子商务公司在竞争对手的网站上下载数百页的有用数据,提高销售增长和毛利率。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
author-avatar
PHPYeQ
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有