本博文源于mysql基础,主要对用户与权限学习与练习。涉及内容:创建用户、修改用户、删除用户、授予用户权限、撤销用户权限、查看用户权限。
用户管理
在mysql的日常管理和实际操作中,为了避免用户恶意冒名使用root帐号控制数据库,通常需要创建一系列具备适当权限的帐号,应该尽可能地不用或少用root帐号登录系统,防止用户非安全访问。
创建用户
格式
CREATE USER <用户名> [IDENTIFIED] BY [PASSWORD] <口令>
创建用户需要注意以下几点:
- 如果使用CREATE USER语句时没有为用户指定口令,那么MySQL允许该用户可以不使用口令登陆系统。
- 使用CREATE USER语句必须拥有MySQL中mysql数据库地INSERT权限或全局CREATE USER权限。
- 使用CREATE USER语句创建一个用户,数据库用户表添加一条用户记录,如果用户存在,返回错误。
- 新创建地用户拥有权限很少。他们可以登录MySQL,只允许进行不需要权限的操作。如show。
- 如果两个用户具有相同的用户名但不同的主机名,这两个用户被认为不同。
例子:使用CREATE USER创建一个用户,用户名是james,密码是tiger,主机是localhost
create user 'james'@'localhost' identified by 'tiger';
修改用户
可以使用RENAME USER语句修改一个或多个已经存在地MySQL用户账号。
RENAME USER <旧用户> TO <新用户>
需要注意的是:
- RENAME USER 语句用于对原有的MySQL账户进行重命名
- 若系统中旧账户不存在或者新账户已存在,语句会出错
- 要使用RENAME USER命令,必须拥有MySQL中的mysql数据库的UPDATE权限或全局CREATE USER权限
修改用户口令使用SET PASSWORD
SET PASSWORD [ FOR <用户名> ] =
{
PASSWORD('新明文口令') } OLD_PASSWORD('旧明文口令') | '加密口令值'
}
修改用户密码注意:
- 在SET PASSWORD语句中,若不加上FOR子句,表示修改当前用户 若加上FOR子句,就是修改用户表里的用户口令;其中,user必须以‘user_name’@‘host_name’的格式给定。账户不存在,就会报错。
- 在SET PASSWORD语句中,只能使用选项PASSWORD(‘新明文口令’)和加密口令值中的一项,且必须使用其中的一项。
例子:使用RENAME USER语句将用户名james修改为jack,主机是localhost
rename user james@'localhost' to jack@'localhost';
例子:使用SET语句将用户为jack的密码修改为lion,主机是localhost
set password for 'jack'@'localhost'=password('lion');
删除用户
可以使用drop user语句来删除一个或多个用户帐号以及相关的权限
DROP USER <用户名1> [,<用户名2>]...
需要注意的是
- DROP USER语句可用于删除一个或多个MySQL帐号,并撤销其原有权限
- 使用这条语句必须有DELETE或者全局CREATE USER权限
- 在DROP USER语句的使用中,若没有明确给出账户的主机名,则该主机名默认为“%”
例子:使用DROP USER语句删除用户’jack’@'localhost’账户
drop user 'jack'@'localhost';
权限管理
用户创建成功后,需要为用户分配适当的访问权限
授予用户权限
对于新建的mysql用户,必须给它授权,可以用GRANT语句来实现对新建用户的授权
语法格式:
GRANT
<权限类型> [ (<列名>)][,<权限类型> [(<列名>)]]
ON <对象> <权限类别> TO <用户>
其中<用户>的格式:
<用户名> [IDENTIFIED] BY [PASSWORD] <口令>
[WITH GRANT OPTION]
| MAX_QUERIES_PER_HOUR <次数>
| MAX_UPDATES_PER_HOUR <次数>
| MAX_CONNECTIONS_PER_HOUR <次数>
| MAX_USER_CONNECTIONS <次数>
例子:使用grant语句创建一个新的用户testUser,密码为testPwd.用户testUser对所有的数据有查询、插入权限,并授予GRANT权限。
grant select,insert on *.* to 'testUser'@'localhost'
identified by 'testPwd' with grant option;
例子:使用select语句查询用户testUser的权限
select Host,User,Select_priv,Grant_priv from mysql.user where User = 'testUser';
撤销用户权限
可以使用REVOKE语句撤销一个用户的权限,此用户不会被删除
有两种格式,第一种:
REVOKE <权限类型> [(<列名>)] [,<权限类型>[(<列名>)]]...
ON <对象类型> <权限名> FROM <用户1> [,<用户2>]...
第二种:
REVOKE ALL PRIVILEGES,GRANT OPTION
FROM user <用户1> [,<用户2>]...
需要注意的是:
- REVOKE语法和GRANT语句的语法格式相似,但具有相反的效果
- 第一种语法格式用于回收某些特定的权限
- 第二种语法格式用于回收特定用户的所有权限
- 要使用REVOKE语句,必须拥有mysql数据库的全局CREATE USER权限或UPDATE权限
例子:撤销用户testUser的插入权限
revoke insert on *.* from 'testUser'@'localhost';
例子:使用select语句查询用户是否具有插入权限
select Host,User,Select_priv,Insert_priv,Grant_priv
from mysql.user where User = 'testUser';