本篇文章给大家带来了mysql中账户的权限的相关问题,当用户执行任何数据库操作时,服务器将会验证用户是否具有相应的权限,例如查询表需要 SELECT 权限,删除对象需要 DROP 权限。希望对大家有帮助。
当客户端连接 MySQL 服务器时,必须提供有效的身份认证,例如用户名和密码。当用户执行任何数据库操作时,服务器将会验证用户是否具有相应的权限,例如查询表需要 SELECT 权限,删除对象需要 DROP 权限。
为了方便用户权限的管理,MySQL 8.0 提供了角色的功能。角色(Role)是一组权限的集合。
本篇我们讨论 MySQL 中的账户和权限的管理。
5.1 管理用户
5.1.1 创建用户
MySQL 使用 CREATE USER 语句创建用户,基本语法如下:
CREATE USER [IF NOT EXISTS] account_name IDENTIFIED BY 'password';
其中,account_name 是账户名称;账户名称分为两个部分:用户名(user_name)和主机名(host_name),使用 % 连接。IDENTIFIED BY 用于指定用户的密码。IF NOT EXISTS 用于避免创建重名账户时产生错误信息。
以下语句创建一个新的用户 dev01,它可以从本机登录(localhost):
mysql> CREATE USER dev01@localhost IDENTIFIED BY 'Dev01@mysql'; Query OK, 0 rows affected (0.21 sec)
MySQL 中的账户由用户名和主机名共同决定,主机 office.example.com 上的 dev01 和主机 home.example.com 上的 dev01 是两个账户。如果不指定主机名,表示用户可以从任何主机登录:
user_name user_name@%
% 是通配符,表示任何字符串;另外,_ 表示任意单个字符。
如果用户名或主机名中包含特殊字符,例如空格或者 – ,需要使用引号分别引用这两部分内容:
'user-name'@'host-name'
除了单引号之外,也可以使用反引号(`)或者双引号(")。
MySQL 中的账户信息存储在系统数据库 mysql 的 user 表中:
mysql> select host, user from mysql.user; +-----------+------------------+ | host | user | +-----------+------------------+ | localhost | dev01 | | localhost | mysql.infoschema | | localhost | mysql.session | | localhost | mysql.sys | | localhost | root | +-----------+------------------+ 5 rows in set (0.00 sec)
除了 dev01@localhost 之外,其他 4 个用户都是初始化创建的系统用户。
除了基本语法之外,创建用户时还可以指定