本篇博客来讨论如何在mysql中创建用户并授予权限。当然,为了逻辑的完整性,你可以创建用户,就得能删除用户、重命名用户、重置密码等,你可以给用户授予权限,就得能给用户修改权限以及收回权限,这些内容都会包括在本篇博客中。
先来看一个简单的例子,如果你只是想简单地创建一个用户并赋予它所有的权限,可以简单地执行下面这个语句
mysql> grant all privileges on *.* to 'kite'@'%' identified by 'kitepassword';
它会创建一个名为kite
的用户,密码是kitepassword
,拥有所有数据库的所有权限,可以从所有地方连接到mysql server(前提是my.cnf文件中设置了bind-address)。如果你想知道更多细节,那么继续往下看。
创建用户
创建用户的语法如下
CREATE USER 'name'@'from-where' IDENTIFIED BY 'password'
创建用户的时候,你要指明三件事情:
- 用户名叫啥
- 可以从哪里登录到mysql server
- 登录密码是什么
其中,限制用户可以从哪里连接进来,可以有效地提高mysql的安全性。下面来看几个例子例子
CREATE USER 'super'@'localhost' IDENTIFIED BY 'password'
上面创建了一个名叫super的用户,只能从本机连接到mysql server。
CREATE USER 'super'@'192.168.1.%' IDENTIFIED BY 'password'
上面创建了一个名叫super的用户,可以从192.168.1.%
这个网段内登录,这个网段一般是局域网。%
是一个通配符,用法跟like
的用法差不多。
CREATE USER 'super'@'%' IDENTIFIED BY 'password'
上面创建了一个名叫super的用户,可以从任何地方登录。
CREATE USER
只决定了用户是否能够登录到mysql server,以及如何登录到mysql server,至于用户登录到mysql server以后可以做些什么,是由GRANT
语句来指定的,下面来看一下。
分配权限
分配权限的完整语法如下
GRANT privileges (columns)
ON what
TO account [IDENTIFIED BY 'password']
[REQUIRE encryption requirements]
[WITH grant or resource management options];
该命令可以一个用户分配权限,如果该用户不存在,则可以直接创建该用户。如果存在该用户,则可以改变现有的权限。
这个语句要指明这几件事:
- 分配哪些权限(允许用户执行哪些操作,如:select, update, delete, alter , create , drop table等)
- 权限可以作用在哪些对象。例如,作用到一个数据库,一个数据表,或者所有数据库(全局权限)
- 分配给哪个用户
- 该用户的密码(可用于分配权限时直接创建用户,也可以用作修改密码)
- 是否需要安全连接(SSL),可省略,默认不需要。
- 是否允许该用户给别的用户授权,可省略,默认不允许。
- 是否限制该用户的访问频率或访问次数,可省略,默认不限制。
下面来分别讨论这几个问题。
可以分配哪些权限
mysql的权限大致可以分为数据库管理权限和数据库对象操作权限,数据库管理权限包括create user,replication slave,reload,super,grant option等权限,执行这些命令时不需要指明数据库对象。其余的权限如:select, update, delete, alter , create , drop table等,是要在特定的数据库对象上进行操作的。除此之外,还有两个特殊的权限,分别是all privileges和usage权限。all privileges包括除了grant option以外的所有权限,usage的意思是没有权限,在修改权限时经常会用到。
需要注意的是,用户的权限本身和权限的级别(on what)是息息相关的,例如,一个用户具有某个数据库级别的所有权限,但他并不能执行create user
命令,原因是create user
属于数据库管理权限,需要有全局的权限才可以。下面来说一下权限的级别
权限的级别
权限的级别决定了权限可以做用到哪些数据库对象上,共包含以下几种级别:全局级别,数据库级别,表级别,以及数据列级别。
- 分配全局权限:
on *.*
- 分配数据库级权限:
on db1.*
- 分配表级别权限:
on db1.table1
查看权限
查看当前用户权限
show grants;
查看某个用户的权限
show grants for user
撤销权限
撤销权限的方式和分配权限的方式非常类似
revoke privileges on what from account;
修改密码
修改密码可以使用赋予usage权限的方式来重复设置密码,例如:
grant usage on *.* to acount identified by 'newpass';