MySql的用户权限

用户管理

MySQL数据库中的表与其他任何关系表没有区别,都可以通过典型的SQL命令修改其结构和数据。可以使用GRANT和REVOKE命令。通过这些命令,可以创建和禁用用户,可以在线授予和撤回用户访问权限。在5.0版本中增加了两个新命令:CREATE USER和DROP USER。从而能更容易地增加新用户、删除和重命名用户,还增加了第三个命令RENAME USER用于重命名现有的用户。

使用CREATE USER命令创建用户

CREATE USER用于创建新的MySQL账户。要使用CREATE USER语句,您必须拥有mysql数据库的全局CREATE USER权限,或拥有INSERT权限。对于每个账户,CREATE USER会在没有权限的mysql.user表中创建一条新记录。如果账户已经存在,则出现错误。使用自选的IDENTIFIED BY子句,'可以为账户设置一个密码。user和密码的设置方法与GRANT语句一样。其命令的原型如下:

CREATE USER user [IDENTIFIED BY [PASSWORD 'PASSWORD'] [,user [IDENTIFIED BY [PASSWORD'PASSWORD']]……

create user temp identified by '123456';

使用DROP USER命令删除用户

如果存在一个或是多个账户被闲置,应当考虑将其删除,确保不会用于可能的违法活动。利用DROP USER命令就能很容易地从权限表中删除用户的所有信息,即来自所有授权表的账户权限记录。DROP USER命令原型如下:

DROP USER user [,user] ……

ps"DROP USER不能自动关闭任何打开的用户对话;而且,如果用户有打开的对话,此时取消用户,则命令不会生效,直到用户对话被关闭后才生效。一旦对话被关闭,用户也被取消,此用户再次试图登录时将会失败。

使用RENAME USER命令重命名用户

RENAMEUSER语句用于对原有MySQL账户进行重命名。RENAMEUSER语句的命令原型如下:

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

ps:如果旧账户不存在或者新账户已存在,则会出现错误。

权限管理

GRANT和REVOKE命令

GRANT和REVOKE命令用来管理访问权限,也可以用来创建和删除用户,但在MySQL5.0.2中可以利用CREATE USER和DROP USER命令更容易地实现这些任务。GRANT和REVOKE命令对于谁可以操作服务器及其内容的各个方面提供了多程度的控制,从谁可以关闭服务器,到谁可以修改特定表字段中的信息都能控制。

如果授权表拥有含有mixed-case数据库或表名称的权限记录,并且lower_case_table_names系统变量已设置,则不能使用REVOKE撤销权限,必须直接操纵授权表。(当lower_case_table_names已设置时,GRANT将不会创建此类记录,但是此类记录可能已经在设置变量之前被创建了。)

授予的权限可以分为多个层级:

  1. 全局层级适用于一个给定服务器中的所有数据库,这些权限存储在mysql.user表中。GRANT ALL ON *.*和REVOKE ALL ON *.*只授予和撤销全局权限。
  2. 数据库层级适用于一个给定数据库中的所有目标,这些权限存储在mysql.dbmysql.host表中。GRANT ALL ON db_name .*和REVOKE ALL ON db_name .*只授予和撤销数据库权限。
  3. 表层级适用于一个给定表中的所有列,这些权限存储在mysql.tables_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤销表权限。
  4. 列层级适用于一个给定表中的单一列,这些权限存储在mysql.columns_priv表中。当使用REVOKE时,您必须指定与被授权列相同的列。
  5. 子程序层级,CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT权限适用于已存储的子程序,这些权限可以被授予为全局层级和数据库层级;而且,除了CREATE ROUTINE外,这些权限可以被授予为子程序层级,并存储在mysql.procs_priv表中。
    grant all on *.* to user identified by '123456' with grant option;
    --授予用户名为user、密码为123456的用户使用所有数据库的所有权限,并允许他向其他人授予这些权限。
    revoke all privileges,grant from user;
    grant usage on books.* to user identified by '123456';
    --创建一个没有任何权限的常规用户
    grant select,insert,update,delete,index,alter,create,drop on books.* to user;
    --为用户user授予适当的权限
    revoke alter,create,drop on books.* from user;
    --减少权限
    revoke all on books.* from user;
    --撤销所有的权限

ps:当用户使用GRANT和REVOKE命令更改用户权限后,退出MySQL系统,用户使用新账户名登录MySQL的时候,可能会因为没有刷新用户授权表而导致登录错误。这是因为在用户设置完账号后,只有重新加载授权表才能使之前设置的授权表生效。使用FLUSH PRIVILEGES命令可以重载授权表。另外,需要注意的是,只有如“root”这样拥有全部权限的用户才可以执行此命令。当用户重载授权表后,退出MySQL后,使用新创建的用户名即可正常登录MySQL。

MySQL数据库安全技术的常见问题

权限更改何时生效

MySQL服务器启动的时候以及使用GRANT和REVOKE语句的时候,服务器会自动读取grant表。但是,既然我们知道这些权限保存在什么地方以及它们是如何保存的,就可以手动修改它们。当手动更新它们的时候,MySQL服务器将不会注意到它们已经被修改了。

我们必须向服务器指出已经对权限进行了修改,有3种方法可以实现了这个任务。可以在MySQL命令提示符下(必须以管理员的身份登录进入)键入如下命令:

flush privileges;

mysqladmin flush-privileges

mysqladmin reload

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

设置账户密码

(1)可以用mysqladmin命令在命令行指定密码:

mysqladmin -u user_name -h host_name password "newpwd"

mysqladmin -u root password "newpass"
mysqladmin -u root password oldpass "newpass"

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

(2)通过set password命令设置用户的密码:

set password for 'jeffrey'@'localhost'=password('biscuit');

只有以root用户(可以更新mysql数据库的用户)身份登录,才可以更改其他用户的密码。如果你没有以匿名用户连接,省略for子句便可以更改自己的密码:

set password=password('biscuit');

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

GRANT USAGE ON *.* TO 'jeffrey'@'localhost' IDENTIFIED BY 'biscuit';

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

mysql -uroot -p mysql  --制定use mysql数据库

INSERT INTO user(Host, User, Password)VALUES('localhost','jeffrey',PASSWORD('biscuit'));

FLUSH PRIVILEGES;

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

mysql -uroot -p mysql

UPDATE user SET Password=PASSWORD('bagel')WHERE Host='localhost' AND User='francis';

FLUSH PRIVILEGES;

ps:

  1. 当使用SET PASSWORD、INSERT或者UPDATE指定账户的密码时,必须用PASSWORD()函数对它进行加密。(唯一的特例是如果密码为空,则不需要使用PASSWORD())。之所以使用PASSWORD()是因为user表以加密方式保存密码,而不是明文。如果采用没有进行加密的方式设置密码,连接使用的密码值将被加密,并同保存在user表中的密码进行比较。但是,保存的值为明文,因此比较将失败,服务器拒绝连接。
  2. 如果使用GRANT……IDENTIFIED BY语句或mysqladmin password命令设置密码,它们均会自动加密密码。在这种情况下,不需要使用PASSWORD()函数对密码进行加密。

使密码更安全

(1)在管理级别,切忌不能将mysql.user表的访问权限授予任何非管理账户。

(2)采用下面的命令模式来连接服务器,以此来隐藏你的密码。命令如下:

mysql -uroot -p db_name

Enter password:********

“*”字符指定输入密码的地方,输入的密码是不可见的。因为它对其他用户不可见,与在命令行上指定它相比,这样进入你的密码更安全。

(3)如果想要从非交互式方式下运行一个脚本调用一个客户端,就没有从终端输入密码的机会。其最安全的方法是让客户端程序提示输入密码或在适当保护的选项文件中指定密码。

 

转载于:https://www.cnblogs.com/wade-luffy/p/6046590.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402682.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.yaml 文件格式简介

From: https://www.cnblogs.com/wxmdevelop/p/7341292.html YAML 的意思其实是:"Yet Another Markup Language"(仍是一种置标语言)的缩写。 功能 YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表&#x…

jQuery与JS的区别,以及jQuery的基础语法

*在使用jQuery时&#xff0c;要在页面最上端加上 <script src"../jquery-1.11.2.min.js"></script> 看一下js与jQuery的区别&#xff1a; JS是这样使用的&#xff1a; <script type"text/javascript">根据ID取元素,取到的是具体的元素va…

sql语句中的时间查询

一般来说&#xff0c;我们在mysql数据库纪录数据时间时&#xff0c;都会选择datatime类型&#xff0c;这样时间可以精确到秒。但随之而来的一个问题是&#xff0c;当我们要取得某一段时间内的数据内容会有一些时间转换上的麻烦&#xff0c;例如我们要取得2002年3月2日到2003年7…

SnakeYaml快速入门

From: https://www.jianshu.com/p/d8136c913e52 在YAML快速入门[https://www.jianshu.com/p/97222440cd08]中&#xff0c;我们已经简单介绍了YAML的语法&#xff0c;本节中主要介绍YAML的配置读取。 目前有很多可以生成和解析YAML的第三方工具&#xff0c;常见的&#xff0c;…

CSS的一些零碎总结

1、CSS 伪元素用于向某些选择器设置特殊效果&#xff08;用来当作一个东西的&#xff0c;跟一个元素差不多&#xff0c;但不是元素&#xff09;。 ① :frist-line伪元素&#xff1a;用于向文本首行设置特殊样式&#xff0c;但是只能用于块级元素。 以下属性可应用于 “ frist-l…

有源代码的iphone项目

2019独角兽企业重金招聘Python工程师标准>>> http://blog.joomla.org.tw/iphone-ipad/104-iphone.html 學習和利用現成的資源是很重要的&#xff0c;以下列出有原始碼可下載的iPhone/iPod程式&#xff0c;這邊收集的是以已經放到App Store上的程式為主&#xff0c;…

匿名函数与闭包

<!DOCTYPE html><html lang"zh-CN"><head> <meta charset"UTF-8"> <title>闭包.html</title> <style> </style> <script src"jquery-1.7.2.min.js"></script> <script type&quo…

Content Security Policy 入门教程

From: http://www.ruanyifeng.com/blog/2016/09/csp.html 跨域脚本攻击 XSS 是最常见、危害最大的网页安全漏洞。 为了防止它们&#xff0c;要采取很多编程措施&#xff0c;非常麻烦。很多人提出&#xff0c;能不能根本上解决问题&#xff0c;浏览器自动禁止外部注入恶意脚本&…

windows编程基础

说明&#xff1a;只供学习交流&#xff0c;转载请注明出处 windows编程基础 &#xff08;1&#xff09;&#xff1a;API与SDK 我们在编写标准C程序的时候&#xff0c;经常会调用各种库函数来辅助完成某些功能&#xff1a;初学者使用得最多的库函数就是printf了&#xff0c;这些…

前端安全配置之Content-Security-Policy(csp)

From: https://www.cnblogs.com/heyuqing/p/6215761.html 什么是CSP CSP全称Content Security Policy ,可以直接翻译为内容安全策略,说白了,就是为了页面内容安全而制定的一系列防护策略. 通过CSP所约束的的规责指定可信的内容来源&#xff08;这里的内容可以指脚本、图片、i…

springboot跨域配置

From: https://www.cnblogs.com/nananana/p/8492185.html 前言&#xff1a; 当它请求的一个资源是从一个与它本身提供的第一个资源的不同的域名时&#xff0c;一个资源会发起一个跨域HTTP请求(Cross-site HTTP request)。 比如说&#xff0c;域名A ( http://domaina.example …

字符函数

getchar: 从stdio流中读字符 a getchar(); fputs:指定的文件写入一个字符串(不自动写入字符串结束标记符\0) fgets:从文件结构体指针stream中读取数据&#xff0c;每次读取一行。读取的数据保存在buf指向的字符数组中&#xff0c;每次最多读取 bufsize-1个字符…

SpringBoot配置Cors解决跨域请求问题

From: https://www.cnblogs.com/yuansc/p/9076604.html 一、同源策略简介 同源策略[same origin policy]是浏览器的一个安全功能&#xff0c;不同源的客户端脚本在没有明确授权的情况下&#xff0c;不能读写对方资源。 同源策略是浏览器安全的基石。 什么是源 源[origin]就…

Server Develop (三) 多进程实现C/S

多进程实现C/S 把上次的多进程简单的添加一个fork就可以实现一个简单的多进程服务器。具体进程创建和使用的函数&#xff0c;有时间得总结一下了&#xff5e;&#xff5e;&#xff5e;&#xff5e; if(fork()0){char buffer[1024];strcpy(buffer, "this is server! welcom…

l2正则化

在机器学习中&#xff0c;无论是分类还是回归&#xff0c;都可能存在由于特征过多而导致的过拟合问题。当然解决的办法有 &#xff08;1&#xff09;减少特征&#xff0c;留取最重要的特征。 &#xff08;2&#xff09;惩罚不重要的特征的权重。 但是通常情况下&#xff0c;我们…

机房收费系统的合作版

概述 机房收费系统的合作版自己负责的是B层和Facade层&#xff0c;在做这块的时候有很多的感触&#xff1a;动态SQL语句&#xff1b;设计模式&#xff1b;合作开发应该注意的点。其中动态SQL语句的理解已经在上一篇博客中写了&#xff0c;如果你有意向的话&#xff0c;可以看一…

ajax跨域,这应该是最全的解决方案了

From: https://segmentfault.com/a/1190000012469713 前言 从刚接触前端开发起&#xff0c;跨域这个词就一直以很高的频率在身边重复出现&#xff0c;一直到现在&#xff0c;已经调试过N个跨域相关的问题了&#xff0c;16年时也整理过一篇相关文章&#xff0c;但是感觉还是差…

centos 7.0防火墙导致vagrant端口映射失败

在vagrant上部署了centos7.0后&#xff0c;Vagrantfile端口转发设置后&#xff0c;宿主机访问客户机站点还是无法访问&#xff0c;问题出在:centos7.0以上版本默认会安装firewalld防火墙, firewalld有区(zone)概念,默认在public区,public:指定外部链接可以进入 先查看下当前端口…

如何导入ShareSDK的sample

由于项目需要&#xff0c;最近需要做10几个平台的分享&#xff0c;如果自己去集成&#xff0c;浪费很多时间&#xff0c;而且还很难成功。最后发现Sharesdk,可以满足项目需求。 首先&#xff0c;需要到他们的官网http://sharesdk.cn/下载android版本的SDK。 然后玩了一下他们的…

Spring Boot配置跨域访问策略

From: https://blog.csdn.net/garyond/article/details/80192760 1. 引言 我们在开发过程中通常因为不同应用之间的接口调用或者应用之间接口集成时经常会遇到跨域问题&#xff0c; 导致无法正常获取接口数据&#xff0c;那么什么是跨域&#xff1f; 跨域的解决办法是什么&am…