MySQL用户与权限

前面的示例,我们一直使用root用户登录本机(127.0.0.1或localhost)的MySQL数据库服务,而在实际的开发和应用场景中则会创建一些专用的账号进行操作,本文将讨论MySQL数据库用户及权限的管理。

用于登录MySQL数据库的“用户”包含两部分信息,一是用户名,如root;二是用户所在的服务器,如本机服务器地址就是127.0.0.1或localhost。如果需要远程访问数据库,则需要服务器IP、域名等服务器信息和对应的用户名。一个用户名可以在多个IP(主机)登录,比如,某一用户可以在本机登录,也可以远程登录。

创建用户时需要同时指定主机地址和用户名,格式如下。

MySQL
create user <用户名>@<主机> identified by <密码>;

删除用户时,可以使用drop user语句,格式如下。

MySQL
drop user <用户名>@<主机>;

create user和drop user语句中的要素包括:

  • <用户名>指定登录时的用户名称。
  • <主机>指定用户可以登录的主机,如'localhost'或'127.0.0.1'表示本机;'dba01'@'localhost'表示允许dba01用户在本机登录,'dba01'@'192.168.1.1'表示允许dba01用户通过地址192.168.1.1登录。如果允许用户在网络中的任何地方登录,可以在主机部分使用百分号(%),如'dba01'@'%'。
  • <密码>指定用户登录时的密码。

创建用户后,可以使用grant语句指定操作权限,格式如下。

MySQL
grant <权限> on<数据库>.<表>to <用户名>@<主机>;

其中:

  • <权限>,用于指定权限列表,多个权限使用逗号分隔。
  • <数据库>.<表>,指定权限应用于哪些数据库和表。如指定所有数据库的所有表,可以使用*.*;也可指定某个数据库中的所有表,如cdb_demo.*;如果只给一个表的操作权限,则同时指定数据库和表,如cdb_demo.t1。

下面给出了可以使用的权限:

  • all [privileges],除了grant option和proxy以外的所有权限。
  • alter,允许使用alter table语句。
  • alter routine,允许修改或删除用户函数和存储过程。
  • create,允许创建数据库和表。
  • create role,允许创建角色(role)。
  • create routine,允许创建用户函数和存储过程。
  • create tablespace,允许创建、修改和删除表空间(tablespaces)和日志文件组(log file groups)。
  • create temporary tables,使用create temporary table语句。
  • create user允许使用create user、drop user、rename user和revoke all privileges语句。
  • create view,允许创建和修改视图(view)。
  • delete,允许使用delete语句。
  • drop,允许删除数据库、表和视图。
  • drop role,允许删除角色。
  • event,允许创建、修改和删除事件(event)。
  • execute,允许执行存储过程。
  • file,允许在服务器中读取磁盘文件。
  • grant option,允许设置和删除权限。
  • index,允许创建和删除索引。
  • insert,允许使用insert语句。
  • lock tables,允许使用lock tables语句。
  • process,允许使用show processlist语句查看所有进程。
  • proxy,允许用户代理。
  • references,允许创建外键(foreign key)。
  • reload,允许flush操作。
  • replication client,允许查询主从服务器的状态。
  • replication slave,允许读取主服务器的二进制日志。
  • select,允许使用select语句。
  • show databases,允许使用show databases语句查看所有数据库。
  • show view,允许使用show create view语句。
  • shutdown,允许使用mysqladmin工具中的shutdown选项。
  • super,允许使用change master to、kill、purge binary logs、set global语句,并可以使用mysqladmin工具中的debug命令。
  • trigger,允许创建和删除触发器。
  • update,允许使用update语句。
  • usage,允许创建无权限的用户。

下面的代码,会创建dba01用户,它只能在本机登录,登录密码为dba0123456,并拥有cdb_demo数据库所有的基本权限。

MySQL
create user 'dba01'@'localhost' identified by 'dba0123456';
grant all on cdb_demo.* to 'dba01'@'localhost';

创建用户并分配权限后,可以测试使用dba01用户登录,登录后只能看到cdb_demo数据库及相关信息。

需要删除用户权限时,可以使用revoke语句,应用格式如下:

MySQL
revoke <权限> on <数据库>.<表>from <用户名>@<主机名>;

参数设置可参考grant语句。