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 '';
使用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将不会创建此类记录,但是此类记录可能已经在设置变量之前被创建了。)
授予的权限可以分为多个层级:
- 全局层级适用于一个给定服务器中的所有数据库,这些权限存储在mysql.user表中。GRANT ALL ON *.*和REVOKE ALL ON *.*只授予和撤销全局权限。
- 数据库层级适用于一个给定数据库中的所有目标,这些权限存储在mysql.db和mysql.host表中。GRANT ALL ON db_name .*和REVOKE ALL ON db_name .*只授予和撤销数据库权限。
- 表层级适用于一个给定表中的所有列,这些权限存储在mysql.tables_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤销表权限。
- 列层级适用于一个给定表中的单一列,这些权限存储在mysql.columns_priv表中。当使用REVOKE时,您必须指定与被授权列相同的列。
- 子程序层级,CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT权限适用于已存储的子程序,这些权限可以被授予为全局层级和数据库层级;而且,除了CREATE ROUTINE外,这些权限可以被授予为子程序层级,并存储在mysql.procs_priv表中。
grant all on *.* to user identified by '' with grant option;
--授予用户名为user、密码为123456的用户使用所有数据库的所有权限,并允许他向其他人授予这些权限。
revoke all privileges,grant from user;
grant usage on books.* to user identified by '';
--创建一个没有任何权限的常规用户
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:
- 当使用SET PASSWORD、INSERT或者UPDATE指定账户的密码时,必须用PASSWORD()函数对它进行加密。(唯一的特例是如果密码为空,则不需要使用PASSWORD())。之所以使用PASSWORD()是因为user表以加密方式保存密码,而不是明文。如果采用没有进行加密的方式设置密码,连接使用的密码值将被加密,并同保存在user表中的密码进行比较。但是,保存的值为明文,因此比较将失败,服务器拒绝连接。
- 如果使用GRANT……IDENTIFIED BY语句或mysqladmin password命令设置密码,它们均会自动加密密码。在这种情况下,不需要使用PASSWORD()函数对密码进行加密。
使密码更安全
(1)在管理级别,切忌不能将mysql.user表的访问权限授予任何非管理账户。
(2)采用下面的命令模式来连接服务器,以此来隐藏你的密码。命令如下:
mysql -uroot -p db_name
Enter password:********
“*”字符指定输入密码的地方,输入的密码是不可见的。因为它对其他用户不可见,与在命令行上指定它相比,这样进入你的密码更安全。
(3)如果想要从非交互式方式下运行一个脚本调用一个客户端,就没有从终端输入密码的机会。其最安全的方法是让客户端程序提示输入密码或在适当保护的选项文件中指定密码。
MySql的用户权限的更多相关文章
- mysql 操作用户权限
使用可以对mysql数据库用户表有操作权限的用户名登陆mysqlinsert into user(Host,User,Password) values('%','name','password');如 ...
- 转: MySQL 赋予用户权限(grant %-远程和localhost-本地区别)
相关参考资料: MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利. gr ...
- mysql grant用户权限设置
MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利. grant sele ...
- MYSQL 备份用户权限
MYSQL 备份用户权限 datadbblack 192.168.1.10 是 SELECT, RELOAD, SHOW DATABASES, LOCK TABLES 否 权限列表 1.Select ...
- Java基础91 mysql的用户权限设置问题
1.概述 1)MySQL数据库中root用户具有最高的权限(超级用户),可以对任何数据库,任何表进行操作. 2)权限账户,只拥有部分权限(CRUD) .例如:只能操作某个数据库的某张表等等. 2.my ...
- MySQL查看用户权限的两种方法
http://yanue.net/post-96.html MySQL查看用户权限命令的两方法: 一. 使用MySQL grants MySQL grant详细用法见:http://yanue.net ...
- mysql grant 用户权限说明
mysql grant 用户权限说明 Mysql 有多个个权限?经常记不住,今天总结一下,看后都能牢牢的记在心里啦!! 很明显总共28个权限:下面是具体的权限介绍:转载的,记录一下: 一.权限表 my ...
- mysql 的用户权限
查看MySQL的用户权限 show grants for "username"@'host'; 添加新用户 允许本地IP访问localhost:127.0.0.1 use mysq ...
- MySQL 赋予用户权限(grant %-远程和localhost-本地区别)
不过有些时候(有些版本)'%'不包括localhost,要单独对@'localhost'进行赋值,这事真让我遇上了,在对mysql5.1.32建立远程用户时. 分别对'%'和'localhost'授权 ...
- mysql 赋予用户权限
# 赋予权限MySQL> grant 权限参数 on 数据库名称.表名称 to 用户名@用户地址 identified by '用户密码'; # 立即生效权限MySQL> flush pr ...
随机推荐
- 利用PhotoShop对大图像进行等分切片
图文介绍利用PhotoShop等分切图 1.调用切片工具,右键选择划分切片 2.指定水平划分.垂直划分的等分数量,点击确定 3.在文件菜单中选择存储为... 4.配置图像质量参数.点击存储.指定存储位 ...
- Verilog MIPS32 CPU(六)-- MDU
Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...
- Mathcad操作tips:2D绘图
1. 直接输入算式进行绘图(QuickPlot) 2. 先定义函数,再利用函数绘制多个曲线.一张图最多支持16条曲线.留意“,”的用法. 3. 利用空格键和","在现有绘图上增加新 ...
- C#多线程学习(二) 如何操纵一个线程
在C#中,线程入口是通过ThreadStart代理(delegate)来提供的,你可以把ThreadStart理解为一个函数指针,指向线程要执行的函数,当调用Thread.Start()方法后,线程就 ...
- sql 统计常用的sql
统计常用的sql 统计常用的sql语句: 今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0 昨天的所有数据:s ...
- UML uml建模工具
UML建模工具 一.UML的概念: 参考百度百科: https://baike.baidu.com/item/%E7%BB%9F%E4%B8%80%E5%BB%BA%E6%A8%A1%E8%AF%AD ...
- OCP新题库,052新加的考题及答案整理-24题
24. YOUR DB_RECOVERY_FILE_DEST_SIZE Is 8G. Currently, 5G of the space Is used of which 4G consists o ...
- window.onload与$(document).ready()的对比
一.window.onload:(1)必须等待网页中所有的内容加载完毕后(包括图片)才能执行:(2)不能同时编写多个,如: window.onload = function(){ alert(&quo ...
- 【English】20190430
Network security网络安全[ˈnetwɜːrk] [sɪˈkjʊrəti] Teradata Generic Security Service 通用安全服务[dʒəˈnerɪk] [s ...
- Android中Application类的使用
在最近的Android项目中,有些代码需要从程序的运行周期开始一直到运行周期结束:比如说本地数据库的初始化,从服务器获取数据等:可以说Application对象的生命周期是整个程序中最长的,它的生命周 ...