MySQL用户管理	MySQL分为普通用户与root用户。这两种用户的权限不一样。 一、权限表 安装MySQL时会自动安装一个名为mysql的数据库。mysql数据库里面存储的都是权限表。 1、User表user表有39个...
MySQL分为普通用户与root用户。这两种用户的权限不一样。
一、权限表
安装MySQL时会自动安装一个名为mysql的数据库。mysql数据库里面存储的都是权限表。
1、User表
user表有39个字段。这些字段可以分为4类:
用户列;权限列;安全列;资源控制列;
1、用户列
用户列包括Host、User、Password,分别表示主机名、用户名和密码。登录用的就是这个用户名与密码;
2、权限列
user表的权限列包括Select_priv、Insert_priv等以priv结尾的字段。
这些字段的值只有Y和N。Y表示该权限可以用到所有数据库上;N表示该权限不能用到所有数据库上;
通常,可以使用GRANT语句Wie用户赋予一些权限,也可以通过Update语句更新user表的方式来设置权限;
不过,修改user表之后,一定要执行一下FLUSH PRIVILEGES,否则可能会出现如下错误:
Error (1133): Can’t find any matching row in the user table

列说明
Select_priv确定用户是否可以通过SELECT命令选择数据
Insert_priv确定用户是否可以通过INSERT命令插入数据
Update_priv确定用户是否可以通过UPDATE命令修改现有数据
Delete_priv确定用户是否可以通过DELETE命令删除现有数据
Create_priv确定用户是否可以创建新的数据库和表
Drop_priv确定用户是否可以删除现有数据库和表
Reload_priv确定用户是否可以执行刷新和重新加载MySQL所用各种内部缓存的特定命令,包括日志、权限、主机、查询和表
Shutdown_priv确定用户是否可以关闭MySQL服务器。在将此权限提供给root账户之外的任何用户时,都应当非常谨慎
Process_priv确定用户是否可以通过SHOW PROCESSLIST命令查看其他用户的进程
File_priv确定用户是否可以执行SELECT INTO OUTFILE和LOAD DATA INFILE命令
Grant_priv确定用户是否可以将已经授予给该用户自己的权限再授予其他用户
References_priv目前只是某些未来功能的占位符;现在没有作用
Index_priv确定用户是否可以创建和删除表索引
Alter_priv确定用户是否可以重命名和修改表结构
Show_db_priv确定用户是否可以查看服务器上所有数据库的名字,包括用户拥有足够访问权限的数据库
Super_priv
确定用户是否可以执行某些强大的管理功能,例如通过KILL命令删除用户进程,使用SETGLOBAL修改全局MySQL变量,执行关于复制和日志的各种命令
Create_tmp_table_priv确定用户是否可以创建临时表
Lock_tables_priv确定用户是否可以使用LOCK TABLES命令阻止对表的访问/修改
Execute_priv确定用户是否可以执行存储过程
Repl_slave_priv确定用户是否可以读取用于维护复制数据库环境的二进制日志文件。此用户位于主系统中,有利于主机和客户机之间的通信
Repl_client_priv确定用户是否可以确定复制从服务器和主服务器的位置
Create_view_priv确定用户是否可以创建视图
Show_view_priv确定用户是否可以查看视图或了解视图如何执行
Create_routine_priv确定用户是否可以更改或放弃存储过程和函数
Alter_routine_priv确定用户是否可以修改或删除存储函数及函数
Create_user_priv确定用户是否可以执行CREATE USER命令,这个命令用于创建新的MySQL账户
Event_priv确定用户能否创建、修改和删除事件
Trigger_priv确定用户能否创建和删除触发器

Update修改权限:
UPDATEuserSET Select_priv='N'WHERE Host='%'
GRANT赋予权限
3、安全列
user表的安全列有4个字段:
ssl_type;ssl_cipher;x509_issuer;x509_subject;
ssl用于加密;x509标准可以用来标识用户。普通的发行版都没有加密功能。可以使用SHOW VARIABLES LIKE 'have_openssl'语句来查看是否具有ssl功能。如果取值为DISABLED,那么则没有ssl加密功能。
4、资源控制列
user表的4个资源控制列是:
max_questions:每小时可以允许执行多少次查询;max_updates:每小时可以允许执行多少次更新;max_connections:每小时可以建立多少连接;max_user_connections:单个用户可以同时具有的连接数。
默认值为0,表示无限制。
2、db表和host表
db表存储了某个用户对一个数据库的权限。
host表中存储了某个主机对数据库的操作权限,配合db表对给定主机上数据库级操作权限做更细致的控制;但是很少用,新版本已经取消了host表;
1、用户列
db表的用户列有3个字段:
Host:主机名;Db:数据库名;User:用户名;
2、权限列
db表:
Create_routine_priv:是否具有创建存储过程权限;Alter_routine_priv:是否具有修改存储过程权限;
user表中的权限是针对所有数据库的,如果user表中的Select_priv字段取值为Y,那么该用户可以查询所有数据库中的表;
如果为某个用户值设置了查询test表的权限,那么user表的Select_priv字段的取值为N。而这个SELECT权限则记录在db表中。db表中的Select_priv字段的取值将会是Y。
用户先根据user表的内容获取权限,然后再根据db表的内容获取权限。
3、tables_priv表和columns_priv表
tables_priv:可以对单个表进行权限设置:
tables_priv表包含8个字段:Host:主机名;DB:数据库名;User:用户名;Table_name:表名Table_priv:对表进行操作的权限(Select,Insert,Update,Delete,Create,Drop,Grant,References,Index,Alter)Column_priv:对表中的数据列进行操作的权限(Select,Insert,Update,Rederences);Timestamp:修改权限的事件Grantor:权限的设置者
columns_priv:可以对单个数据列进行权限设置,有7个列,作用同上:
Host、Db、User、Table_name、Column_name、Column_priv、Timestamp。
MySQL权限分配是按照user表-> db表-> table_priv表-> columns_priv表的顺序进行分配的。
在数据库系统中,先判断user表中的值是否为'Y',如果user表中的值是'Y',就不需要检查后面的表。如果user表为N,则一次检查后面的表。
4、procs_priv表
procs_priv表可以对存储过程和存储函数进行权限设置。procs_priv表包含8个字段,分别是:Host:主机名;Db:数据库名;User:用户名;Routine_name:存储过程或函数名称;Routine_type:类型(取值有:FUNCTION或PROCEDURE);Proc_priv:拥有的权限(Execute:执行;Alter Routine:修改;Grant:权限赋予);Timestamp:字段存储更新的时间;Grantor:字段设置者;
二、账户管理
账户管理是MySQL用户管理最基本的内容。包括登录,退出MySQL服务器、创建用户、删除用户、密码管理和权限管理等内容。
其中登录方式非常简单,在这个地址有:http://www.cnblogs.com/kissdodog/p/4154068.html
1、新建普通用户
在MySQL数据库中,建立用户有3种方式:
使用CREATE USER语句来创建新的用户;直接在mysql.user表中INSERT用户;使用GRANT语句来新建用户;
1、CREATE USER
使用CREATE USER语句创建用户,必须要拥有CREATE USER权限。其格式如下:
CREATEUSERuser[IDENTIFIED BY [PASSWORD]'password'],
[user[IDENTIFIED BY [PASSWORD]'password']]...
其中,user参数表示新建用户的账户,user由用户名(User)和主机名(Host)构成;IDENTIFIED BY关键字用来设置用户的密码;password参数表示用户的密码;如果密码是一个普通的字符串,就不需要使用PASSWORD关键字。可以没有初始密码。
示例:
CREATEUSER'admin'@'%' IDENTIFIEDBY'admin'
执行之后user表会增加一行记录,但权限暂时全部为‘N’。
2、用INSERT语句新建普通用户
可以使用INSERT语句直接将用户的信息添加到mysql.user表。但必须拥有mysql.user表的INSERT权限。
另外,ssl_cipher、x509_issuer、x509_subject没有值,必须要设置值,否则INSERT语句无法执行。
示例:
INSERTINTO mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject)VALUES('%','newuser1',PASSWORD('123456'),'','','')
执行INSERT之后,要使用命令:
FLUSHPRIVILEGES
命令来使用户生效。
3、用GRANT语句来新建普通用户
用GRANT来创建新的用户时,能够在创建用户时为用户授权。但需要拥有GRANT权限。
语法如下:
GRANT priv_typeONdatabase.tableTOuser[IDENTIFIED BY [PASSWORD]'password'] [,user [IDENTIFIED BY [PASSWORD]'password']...]
priv_type:参数表示新yoghurt的权限;databse.table:参数表示新用户的权限范围;user:参数新用户的账户,由用户名和主机构成;IDENTIFIED BY关键字用来设置密码;password:新用户密码;
GRANT语句可以同时创建多个用户。
GRANTSELECTON*.*TO netUser@'%'
*.*与db.*的区别在于。*.*对所有数据库生效,所以user表的SELECT会变为Y。而db.*user表为'N',更改的是Db表。
2、删除普通用户
1、DROP USER语句删除普通用户
需要拥有DROP USER权限。语法如下:
DROPUSERuser[,user]...
user是需要删除的用户,由用户名(User)和主机名(Host)构成。
DROPUSER'newuser1'@'%'
2、DELETE语句删除普通用户
可以使用DELETE语句直接将用户的信息从mysql.user表中删除。但必须拥有对mysql.user表的DELETE权限。
DELETEFROM mysql.userWHERE Host='%'ANDUser='admin'
删除完成后,一样要FLUSH PRIVILEGES才生效。
3、修改密码
1、使用mysqladmin命令来修改root用户的密码
语法:
mysqladmin-u-username-p password "new_password"
新密码(new_password)必须用括号括起来,单引号会报错。
示例:
(注:这个待验证,我怎么执行都不成功!)
2、修改user表
UPDATE user表的passwor字段的值,也可以达到修改密码的目的;
UPDATEuserSET Password= PASSWORD('123')WHEREUSER='myuser'
FLUSH PRIVILEGES后生效。
3、使用SET语句来修改密码
使用root用户登录到MySQL服务器后,可以使用SET语句来修改密码:
修改自己的密码,不需要用户名
SET PASSWORD= PASSWORD("123");
修改其他用户密码:
SET PASSWORDFOR'myuser'@'%'=PASSWORD("123456")
FOR 用户名@主机名
4、GRANT语句来修改普通用户的密码
使用GRANT语句修改普通用户的密码,必须拥有GRANT权限。
GRANT priv_typeONdatabase.tableTOuser[IDENTIFIED BY [PASSWORD]'password']
示例:
GRANTSELECTON*.*TO'test3'@'%' IDENTIFIEDBY'123'
4、忘记密码的解决方案
如果root用户密码丢失了,会给用户造成很大的麻烦。但是,可以通过某种特殊方法登录到root用户下,然后修改密码。
1、使用--skip-grant-tables选项启动MySQL服务
该选项将使MySQL服务器停止权限判断,任何用户都能够访问数据库。
在Windows操作系统下,使用mysqlid或mysqlid-nt来启动MySQL服务。
mysqld命令:
mysqld --skip-grant-tables
mysqld-nt命令:
mysqld-nt --skip-grant-tables
net start mysql命令:
net start mysql --skip-grant-tables
2、登录root用户,并且设置新密码
mysql -u root
必须使用UPDATE语句更新mysql数据库下的user表,而不能使用SET语句,因为--skip-grant-tables不能使用SET语句。
修改完密码以后,FLUSH PRIVILEGES语句加载权限表,新密码即生效。
三、权限管理
1、MySQL的各种权限

权限名称对应user表中的列权限的范围
CREATECreate_priv数据库、表或索引
DROPDrop_priv数据库或表
GRANT OPTIONGrant_priv数据库、表、存储过程或函数
REFERENCESReferences_priv数据库或表
ALTERAlter_priv修改表
DELETEDelete_priv删除表
INDEXIndex_priv用索引查询表
INSERTInsert_priv插入表
SELECTSelect_priv查询表
UPDATEUpdate_priv更新表
CREATE VIEWCreate_view_priv创建视图
SHOW VIEWShow_view_priv查看视图
ALTER ROUTINEAlter_routine修改存储过程或存储函数
CREATE ROUTINECreate_routine_priv创建存储过程或存储函数
EXECUTEExecute_priv执行存储过程或存储函数
FILEFile_priv加载服务器主机上的文件
CREATE TEMPORARY TABLESCreate_temp_table_priv创建临时表
LOCK TABLESLock_tables_priv锁定表
CREATE USERCreate_user_priv创建用户
PROCESSProcess_priv服务器管理
RELOADReload_priv重新加载权限表
REPLICATION CLIENTRepl_client_priv服务器管理
REPLICATION SLAVERepl_slave_priv服务器管理
SHOW DATABASESShow_db_priv查看数据库
SHUTDOWNShutdown_priv关闭服务器
SUPERSuper_priv超级权限

2、授权
GRANT语法如下:
GRANT priv_type[(column_list)]ONdatabase.tableTOuser[IDENTIFIED BY [PASSWORD]'password'] [,user [IDENTIFIED BY [PASSWORD]'password']]... WITH with_option[with_option]
priv_type参数表示权限类型;column_list:参数表示权限作用于哪些列上,没设置则位于整个表上;user参数由用户名和主机名构成;形式是"'username'@'hostname'";IDENTIFIED BY参数用于为用户设置密码;password:用户新密码;
WITH关键字后面带有一个或多个with_option参数。有5个选项:
GRANT OPTION:被授权的用户可以将这些权限赋予给别的用户;MAX_QUERIES_PER_HOUR count:设置没消失可以允许执行count次查询;MAX_UPDATES_PER_HOUR count:设置每个消失可以允许执行count次更新;MAX_CONNECTIONS_PER_HOUR count:设置每小时可以建立count个连接;MAX_USER_CONNECTIONS count:设置单个用户可以同时具有的count个连接数;
示例:
GRANTSELECT,UPDATEON*.*TO'myuser'@'%'WITHGRANTOPTION;
3、收回权限
收回权限,就是取消某个用户的某些权限。MySQL中使用REVOKE关键字来为用户设置权限。
语法如下:
REVOKE priv_type[(column_list)]ONdatabase.tableFROMuser[,user]
收回全部权限的REVOKE语句的基本语法如下:
REVOKEALLPRIVILEGES,GRANTOPTIONFROMuser[,user]...
示例:回收用户myuser的SELECT权限
REVOKESELECTON*.*FROM'myuser'@'%'
收回myuser的所有权限:
REVOKEALLPRIVILEGES,GRANTOPTIONFROM'myuser'@'%'
4、查看权限
SHOW GRANTS语句用于查看权限。同时mysql数据库下的user表中存储着用户的基本权限。
SELECT*FROM mysql.user SHOW GRANTS
posted on 逆心 阅读(...) 评论(...) 编辑收藏
转载于:https://www.cnblogs.com/kissdodog/p/4173337.html
MySQL用户可以分为普通用户和root用户。root用户是超级管理员,拥有所有权限,包括创建用户、删除用户和修改用户的密码等管理权限;普通用户只拥有被授予的各种权限。用户管理包 括管理用户账户、权限等。 MySQL...
一、权限表
MySQL是一个多用户数据库,具有功能强大的访问控制系统,可以为不同用户指定允许的权限。MySQL用户可以分为普通用户和root用户。root用户是超级管理员,拥有所有权限,包括创建用户、删除用户和修改用户的密码等管理权限;普通用户只拥有被授予的各种权限。用户管理包 括管理用户账户、权限等。
MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库中,由mysql_install_db 脚本初始化。存储账户权限信息表主要有:user、db、host、tables_priv、columns_priv 和procs_priv。
1.1 user表
user表是MySQL中最重要的一个权限表,记录允许连接到服务器的账号信息,里面的权限是 全局级的。例如:一个用户在user表中被授予r DELETE权限,则该用户可以删除MySQL服务 器上所有数据库中的任何记录。MySQL5.5中user表有42个字段,这些字段可以 分为4类,分别是用户列、权限列、安全列和资源控制列。
1.用户列
user表的用户列包括Host、User、Password.分别表示主机名、用户名和密码。其中User和Host为User表的联合主键。当用户与服务器之间建立连接时,输入的账户信息中的用户名称、主 机名和密码必须匹配User表中对应的字段,只有3个值都匹配的时候,才允许连接的建立。这3 个字段的值就是创建账户时保存的账户信息。修改用户密码时,实际就是修改user表的Password 字段的值。
2.权限列
权限列的字段决定了用户的权限,描述了在全局范围内允许对数据和数据库进行的操作。包 括査询权限、修改权限等普通权限,还包括了关闭服务器、超级权限和加载用户等髙级权限。普通 权限用于操作数据库:高级权限用于数据库管理。
user表中对应的权限是针对所有用户数据库的。这些字段值的类型为ENUM,可以取的值只 能为Y和N, Y表示该用户有对应的权限;N表示用户没有对应的权限。査看user表的结构可以 看到,这些字段的值默认都是N。如果要修改权限,可以使用GRANT语句或UPDATE语句更改 user表的这些字段来修改用户对应的权限。
3.安全列
安全列只有6个字段,其中两个是ssl相关的,2个是x509相关的,另外2个是授权插件相关 的。ssl用于加密;X509标准可用于标识用户;Plugin字段标识可以用于验证用户身份的插件,如 果该字段为空,服务器使用内建授权验证机制验证用户身份。读者可以通过SHOW VARIABLES LIKE 'have_openssl’语句来査询服务器是否支持ssl功能。
4.资源控制列
资源控制列的字段用来限制用户使用的资源,包含4个字段,分别为:
(1)	max_questions―用户每小时允许执行的查询操作次数。
(2)	max_updates―用户每小时允许执行的更新操作次数。
(3)	max connections	用户每小时允许执行的连接操作次数。
(4)	max user connections	用户允许同时建立的连接次数。
一个小时内用户査询或者连接数量超过资源控制限制,用户将被锁定,直到下一个小时,才 可以在此执行对应的操作。可以使用GRANT语句更新这些字段的值。
1.2 db 表和 host 表
db表和host表是MySQL数据中非常重要的权限表。db表中存储了用户对某个数据库的操作 权限,决定用户能从哪个主机存取哪个数据库。host表中存储了某个主机对数据库的操作权限,配合db权限表对给定主机上数据库级操作权限做更细致的控制。这个权限表不受GRANT和REVOKE语句的影响。db表比较常用,host表一般很少使用。db表和host表结构相似,字段大致 可以分为两类:用户列和权限列。
1.用户列
db表用户列有3个字段,分别是Host、User、Db,标识从某个主机连接某个用户对某个数据 库的操作权限,这3个字段的组合构成了 db表的主键。host表不存储用户名称,用户列只有2个 字段,分别是Host和Db,表示从某个主机连接的用户对某个数据库的操作权限,其主键包括Host 和Db两个字段。host很少用到,一般情况下db表就可以满足权限控制需求了。
2.权限列
db表和host表的权限列大致相同,表中create_routine_priv和alter_routine_priv这两个字段表 明用户是否有创建和修改存储过程的权限。
user表中的权限是针对所有数据库的,如果希望用户只对某个数据库有操作权限,那么需要将 user表中对应的权限设置为N,然后在db表中设置对应数据库的操作权限。例如,有一个名称为 Zhangting的用户分别从名称为large.domain.com和small.domain.com的两个主机连接到数据库,并 需要操作books数据库。这时,可以将用户名称Zhangting添加到db表中,而db表中的host字段 值为空,然后将两个主机地址分别作为两条记录的host字段值添加到host表中,并将两个表的数
据库字段设置为相同的值bookso当有用户连接到MySQL服务器时,db表中没有用户登录的主机 名称,则MySQL会从host表中查找相匹配的值,并根据查询的结果决定用户的操作是否被允许。
1.3 tables_priv 表和 columns_priv 表
tables_priv表用来对表设置操作权限,columns_priv表用来对表的某一列设置权限。
tables_priv 表有 8 个字段,分别是 Host^ Db、User、Table_name^ Grantor、Timestamp、Table_priv 和Column_priv,各个字段说明如下:
(1)	Host、Db、User和Table_name4个字段分表示主机名、数据库名、用户名和表名。
(2)	Grantor表示修改该记录的用户。
(3)	Timestamp字段表示修改该记录的时间。
(4)	Table_priv 表示对表的操作权限包括 Select、Insert、Update> DeleteCreateDrop> Grant、 Referencesx Index 和Alter。
(5)	Columnj)riv字段表示对表中的列的操作权限,包括Select. Insert. Update和References。
columns_priv 表只有 7 个字段,分别是 Host、Db、User、Table name、Column name、Timestamp、 Column_privo其中,Column name用来指定对哪些数据列具有操作权限。
1.4 procs_priv 表
procs_priv表可以对存储过程和存储函数设置操作权限。
procs_priv 表包含 8 个字段,分别是 Host^ Db、User> Routine_name> Routine type、Grantor、 Proc_priv和Timestamp,各个字段的说明如下:
(1)	Host、Db和User字段分别表示主机名、数据库名和用户名。Routine_name表示存储过 程或函数的名称。
(2)	Routinejype表示存储过程或函数的类型。
(3)	Routinejype 字段有两个值,分别是 FUNCTION 和PROCEDURE。FUNCTION 表示这 是-个函数:PROCEDURE表示这是一个存储过程。
(4)	Grantor是插入或修改该记录的用户。
(5)	Proc_priv 表示拥有的权限,包括 Execute> Aller Routinex Grant 3 种。
(6)	Timestamp表示记录更新时间。
二、账户管理
MySQL提供许多语句用来管理用户账号,这些语句可以用来管理包括登录和退出MySQL服 务器、创建用户、删除用户、密码管理和权限管理等内容。MySQL数据库的安全性,需要通过账户管理来保证。
2.1 登录和退岀MySQL服务器
通过mysql -help命令可以查看mysql命令帮助信息。mysql命令的常用参数如下:
(1)	-h主机名,可以使用该参数指定主机名或ip,如果不指定,默认是localhosto
(2)	-u用户名,可以使用该参数指定用户名。
(3)	-p密码,可以使用该参数指定登录密码。如果该参数后面有一段字段,则该段字符串将 作为用户的密码直接登录。如果后面没有内容,则登录的时候会提示输入密码。注意:该参数后面 的字符串和-P之前不能有空格。
(4)	-P端口号,该参数后面接MySQL服务器的端口号,默认为3306。
(5)	数据库名,可以在命令的最后指定数据库名。
(6)	-e执行sql语句。如果指定了该参数,将在登录后执行-e后面的命令或sql语句并退出。 可以使用mysql -user=monty -password=guess db name登录服务器。
如果想用较短的选项,命令应为:
mysql-u monty-pguess db name
示列: 使用root用户登录到本地MySQL服务器的test库中
mysql-uroot-p-hlocalhost test
2.2 新建普通用户
创建新用户,必须有相应的权限来执行创建操作。在MySQL数据库中,
有两种方式创建新用 户:
一种是使用CREATE USER或GRANT语句;
另一种是直接操作MySQL授权表。
最好的方法是使用GRANT语句,因为这样更精确,错误少。
2.2.1 使用CREATE USER语句创建新用户
CREATEUSER user_specification[,user specification]... user_specification:user@host[ IDENTIFIEDBY[PASSWORD]'password'| IDENTIFIEDWITH auth_plugin[AS'auth_string']]user表示创建的用户的名称;host表示允许登录的用户主机名称;IDENTIFIED BY表示用来 设置用户的密码;[PASSWORD]表示使用哈希值设置密码,该参数可选;'password'表示用户登 录时使用的普通明文密码;IDENTIFIED WITH语句为用户指定一个身份验证插件;auth_plugin是 插件的名称,插件的名称可以是一个带单引号的字符串,或者带引号的字符串;auth_string是可选 的字符串参数,该参数将传递给身份验证插件,由该插件解释该参数的意义。
CREATE USER语句会添加一个新的MySQL账户。使用CREATE USER语句用户,必须有全 局的CREATE USER权限或MySQL数据库的INSERT权限。每添加一个用户,CREATE USER语 句会在mysql.user表中添加一条新记录,但是新创建的账户没有任何权限。如果添加的账户己经存 在,CREATE USER语句会返回一个错误。
示列:使用CREATE USER创建-个用户,用户名是Jeffrey,密码是mypass,主机名是 localhost
CREATEUSER'jeffrey@localhost' IDENTIFIEDBY'mypass';
2.2.2 使用GRANT语句创建新用户
CREATE USER语句可以用来创建账户,通过该语句可以在user表中添加一条新的记录,但是CREATE USER语句创建的新用户没有任何权限,还需要使用GRANT语句赋予用户权限。而GRANT语句不仅可以创建新用户,还可以在创建的同时对用户授权。GRANT还可以指定账户的 其他特点,如使用安全连接、限制使用服务器资源等。使用GRANT语句创建新用户时必须有 GRANT权限。GRANT语句是添加新用户并授权他们访问MySQL对象的首选方法。
GRANTprivilegesON db.tableTOuser@host[IDENTIFIEDBY'password'][,user[IDENTIFIEDBY'password']][WITHGRANTOPTION];privileges表示赋予用户的权限类型db.table表示用户的权限所作用的数据库中的表;IDENTIFIED BY关键字用来设置密码;'password'表示用户密码;WITH GRANT OPTION为可选 参数,表示对新建立的用户赋予GRANT权限,即该用户可以对其他用户赋予权限。
示列:使用GRANT语句创建一个新的用户testUser,密码为testpwd,并授于用户对所有数据表的SELECT和UPDATE权限
GRANTSELECT,UPDATEON*.*TO'testUser'@'localhosf' IDENTIFIED BY 'testpwd';
2.2.3 直接操作MySQL用户表
通过前面的介绍,不管是CREATE USER或者GRANT,在创建新用户时,实际上都是在user 表中添加一条新的记录。因此,可以使用INSERT语句向user表中直接插入一条记录来创建一个 新的用户。使用INSERT语句,必须拥有对mysql.user表的INSERT权限。
INSERTINTO mysql.user(Host,User, Password,[privilegelist])VALUES('host','username', PASSWORD('password'), privilegevaluelist);Host、 User、Password分别为user表中的主机、用户名称和密码字段;privilegelist表示用户 的权限,可以有多个权限;PASSWORD函数为密码加密函数;privilegevaluelist为对应的权限的 值,只能取’Y’或者’N’。
示列:使用INSERT创建一个新账户,其用户名称为customerl,主机名称为localhost, 密码为customerl
INSERTINTOuser(Host,User,Password)VALUES('localhost','customerl',PASSWORD('customerr'));
2.3 删除普通用户
2.3.1 使用DROP USER语句删除用户
DROPUSERuser[,user];
DROP USER语句用于删除一个或多个MySQL账户。要使用DROP USER,必须拥有MySQL 数据库的全局CREATE USER权限或DELETE权限。使用与GRANT或REVOKE相同的格式为每个账户命名;例如,‘jefTrey’@‘localhost’, 账户名称的用户和主机部分与用户表记录的User和Host 列值相对应。
DROPUSER'user'@'localhost';DROPUSER;
第1条语句可以删除user在本地登录权限;
第2条语句可以删除来自所有授权表的账户权限记录。