为了方便,前面都是用root用户来登录MySQL访问数据库数据,本章介绍如何添加用户并给用户授权。例如:可以允许一个用户创建新的表,另一个用户被授权更新现有的表,第三个用户只能查询表。
可以使用标准的sql语句——grant和revoke语句来修改控制客户访问的授权表
8.1 用户管理
8.1.1 添加、删除用户
1. 添加用户
用户可以使用create user语法添加一个或多个用户,并设置相应的密码:
create user 用户 [identified by [password] '密码' ]
[,...]
用户的格式为:
'用户名' @ '主机名'
- 大多数SQL产品中,用户名和密码只由字母和数字组成
- identified by 为账户给定一个密码。特别是要在纯文本中指定密码,需忽略password关键字,如果不想以明文发送密码,而且知道password()函数返回给密码的混编值,则可以指定该混编值,但要加关键字password。
- create user 用户创建新的MySQL账户,此后会在系统本身的mysql数据库的user表中添加一个新纪录
- 要使用该命令,必须拥有mysql数据库的全局create user权限或insert权限,如果用户账户已经存在则会出现错误
例如:添加两个新用户,king的密码为queen,palo的密码为530415
create user
'king'@'localhost' identified by 'queen',
'palo'@'localhost' identified by '530415';
完成后可切换到mysql数据库,从user表中查到刚刚添加的两个用户记录
use mysql
show tables;
select * from user;
- 如果一个用户名和主机名中包含特殊符号如”_“,或通配符如”%“,则需要用单引号将其括起来。”%“表示一组主机
- 如果两个用户具有相同的用户名但是主机名不一致,MySQL将其视为不同用户,允许为这两个用户分配不同的权限合集
- 如果没有输入密码,那么MySQL允许相关的用户不适用密码登录,但是从安全的角度不推荐这种做法
- 刚创建的用户还没有很多权限,他们可以登录到MySQL,但是他们不能使用use语句在让用户已经创建的任何数据库称为当前数据库,因此无法访问那些数据库的表,只允许进行不需要权限的操作,例如用一条show语句查询所有存储引擎和字符集的列表
2. 删除用户
删除用户的语法格式如下:
drop user 用户 [, 用户]....
要使用drop user 必须拥有mysql数据库的全局create user权限或delete权限
例如:删除用户palo
drop user palo@localhost;
如果被删除的用户已创建了表,索引或其他数据库对象,他们将继续保留,因为mysql并没有记录是由谁创建了这些对象。
8.1.2 修改用户名,密码
1. 修改用户名
rename user 老用户 to 新用户
[,..]
要使用该命令,必须拥有mysql数据库的全局create user权限或mysql数据库update权限,如果旧帐户不存在或者新账户已存在则会出现错误。
例如:将用户king的名字修改为ken
rename user
'king'@'localhost' to 'ken'@'localhost';
2. 修改某个用户的密码
set password [for 用户]='新密码';
如果不加for用户则为修改当前用户密码,加了for 用户则修改特定用户密码
例如:将用户ken的密码修改为qen
set pass