本文将介绍以下几个知识点:
如何在RDS上创建数据库用户?
如何通过创建的用户来访问数据库?
如何用SQL语句创建用户并给用户授权?
文中所述操作步骤为RDS for MySQL 5.7版本的示例。
MySQL 5.7版本权限体系相比MySQL 5.5/5.6版本更加开放,只需一个初始账号就可以对实例进行管理,使用初始账号通过SQL可以创建其它数据库账号。
数据库账号没有个数限制。
[backcolor=transparent]注意事项:
分配数据库账号权限时,请按最小权限原则和业务角色创建账号,并合理分配只读和读写权限。必要时可以把数据库账号和数据库拆分成更小粒度,使每个数据库账号只能访问其业务之内的数据。如果不需要数据库写入操作,请分配只读权限。
请设置数据库账号的密码为强密码,并定期更换。
如何在RDS上创建数据库用户
当从阿里云上的RDS新建实例后,需要先创建一个拥有最高管理权限的初始账号来对数据库进行管理。
一旦这个账号创建完成,就可以通过它访问到数据库进行普通用户的创建和管理,以及对整个RDS数据库的管理。
操作步骤
登录RDS管理控制台。
选择目标实例所在地域。
单击目标实例的ID,进入[backcolor=transparent]基本信息页面。
选择左侧菜单栏中的[backcolor=transparent]账号管理,进入账号管理页面。
单击[backcolor=transparent]创建初始账号。
输入要创建的账号信息,单击[backcolor=transparent]确定,如下图所示。
参数说明:
- 数据库账号:由 2~16 个字符的小写字母,数字或下划线组成、开头需为字母,结尾需为字母或数字。
- 密码:该账号对应的密码,由 6~32 个字符的字母、数字、中划线或下划线组成。
- 确认密码:输入与密码一致的字段,以确保密码正确输入。
选择左侧菜单栏中的[backcolor=transparent]数据安全性,进入[backcolor=transparent]数据安全性页面。
单击白名单分组 default 后面的[backcolor=transparent]修改,进入[backcolor=transparent]修改白名单分组页面。
将IP段10.143.32.0/24、10.143.34.0/24和112.124.140.0/24添加到组内白名单栏中,然后单击[backcolor=transparent]确定,返回[backcolor=transparent]数据安全性页面。
注意:
- 本文以网络类型是经典网络的数据库为例,关于网络类型详情,请参见设置网络类型。若是VPC网络,则需将IP段100.104.175.0/24添加到白名单中。
- 关于白名单的设置详情,请参见设置白名单。
- 设置白名单后,约5分钟左右才能生效。为避免以下操作失败,请等待5分钟后再继续下面的操作。
如何通过创建的用户来访问数据库
一般,访问MySQL数据库是通过在终端输入`mysql -u root –p输入密码后进行访问的,在阿里云上是通过控制台进行远程登录的。
操作步骤
- 单击页面右上角的登录数据库,进入数据管理控制台的快捷登录页面。
在快捷登录页面,检查阿里云数据库标签页面显示的连接地址和端口信息。若正确,填写数据库用户名和密码,然后单击登录。
[backcolor=transparent]说明:若是VPC网络,请在快捷页面选择自建库标签页面,然后根据提示选择VPC网络类型并填写相关信息。关于操作详情,请参见DMS相关文档。
您可以在RDS管理控制台的实例基本信息页面查看该账号的连接地址和端口信息。
参数说明:
- 数据库用户名:要访问数据库的账户名称。
- 密码:上述账户所对应的密码。
填写验证码,然后单击登录。
[backcolor=transparent]说明:若您希望浏览器记住该账号的密码,可以先勾选[backcolor=transparent]记住密码,然后再单击[backcolor=transparent]登录。
如何用SQL语句创建用户并给用户授权
除了创建数据库初始账号是在控制台进行的,其它数据库账号都是通过SQL命令(例如create user语句)创建的。MySQL创建用户的方法分成三种:
INSERT USER表的方法:
因为数据库的用户信息都是保存在mysql.user这张表的,所以直接对该表进行插入语句,即可完成用户的创建。
向MySQL数据库的user表插入一条数据。[backcolor=transparent] mysql[backcolor=transparent]>[backcolor=transparent] insert [backcolor=transparent]into[backcolor=transparent] mysql[backcolor=transparent].[backcolor=transparent]user[backcolor=transparent]([backcolor=transparent]Host[backcolor=transparent],[backcolor=transparent]User[backcolor=transparent],[backcolor=transparent]Password[backcolor=transparent])- [backcolor=transparent] values[backcolor=transparent]([backcolor=transparent]'localhost'[backcolor=transparent],[backcolor=transparent]'phplamp'[backcolor=transparent],[backcolor=transparent]password[backcolor=transparent]([backcolor=transparent]'1234'[backcolor=transparent]));
刷新系统权限表。
- [backcolor=transparent] mysql[backcolor=transparent]>[backcolor=transparent]flush privileges[backcolor=transparent];
这样就创建了一个名为:phplamp,密码为:1234的用户。
CREATE USER的方法
语法:
CREATE USER 'username@host' [IDENTIFIED BY 'PASSWORD']
其中密码是可选项。
例子:
- [backcolor=transparent]mysql[backcolor=transparent]>[backcolor=transparent] CREATE USER [backcolor=transparent]'john@192.168.189.71'[backcolor=transparent] IDENTIFIED BY [backcolor=transparent]"123"[backcolor=transparent];
- [backcolor=transparent]mysql[backcolor=transparent]>[backcolor=transparent] CREATE USER [backcolor=transparent]'john@192.168.189.%'[backcolor=transparent] IDENTIFIED BY [backcolor=transparent]"123"[backcolor=transparent];
- [backcolor=transparent]mysql[backcolor=transparent]>[backcolor=transparent] CREATE USER [backcolor=transparent]'john@'[backcolor=transparent];
说明:该方法创建出来的用户只有连接数据库的权限,需要后续继续授权;
注意:用户与@后主机地址是一体的,用一个分号连接,否则会报错:ERROR 1396 (HY000): Operation CREATE USER failed for ‘remote’@’%’
GRANT的方法
当数据库存在用户的时候GRANT会对用户进行授权,但当数据库不存在该用户的时候,就会创建相应的用户并进行授权。
语法:
- [backcolor=transparent]GRANT [backcolor=transparent]<[backcolor=transparent]ALL[backcolor=transparent]|[backcolor=transparent]priv1[backcolor=transparent],[backcolor=transparent]priv2[backcolor=transparent],.....[backcolor=transparent]privn[backcolor=transparent]>[backcolor=transparent] ON
- [backcolor=transparent][[backcolor=transparent]object[backcolor=transparent]][backcolor=transparent] [backcolor=transparent][[backcolor=transparent]IDENTIFIED BY [backcolor=transparent]'password'[backcolor=transparent]]
- [backcolor=transparent][[backcolor=transparent]WITH GRANT OPTION[backcolor=transparent]];
- [backcolor=transparent]MAX_QUERIES_PER_HOUR count
- [backcolor=transparent]MAX_UPDATES_PER_HOUR count
- [backcolor=transparent]MAX_CONNECTIONS_PER_HOUR count
- [backcolor=transparent]MAX_USER_CONNECTIONS count
[backcolor=transparent]说明:priv代表权限select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14个权限。
使用示例:
- [backcolor=transparent]mysql[backcolor=transparent]>[backcolor=transparent]grant [backcolor=transparent]select[backcolor=transparent],[backcolor=transparent]insert[backcolor=transparent],[backcolor=transparent]update[backcolor=transparent],[backcolor=transparent]delete[backcolor=transparent],[backcolor=transparent]create[backcolor=transparent],[backcolor=transparent]drop on test[backcolor=transparent].[backcolor=transparent]hr to john@192[backcolor=transparent].[backcolor=transparent]168.10[backcolor=transparent].[backcolor=transparent]1[backcolor=transparent] identified [backcolor=transparent]by[backcolor=transparent] [backcolor=transparent]'123'[backcolor=transparent];
[backcolor=transparent]说明:给主机为192.168.10.1的用户john分配可对数据库test的hr表进行select,insert,update,delete,create,drop等操作的权限,并设定口令为123。
- [backcolor=transparent]mysql[backcolor=transparent]>[backcolor=transparent]grant all privileges on test[backcolor=transparent].*[backcolor=transparent] to joe@192[backcolor=transparent].[backcolor=transparent]168.10[backcolor=transparent].[backcolor=transparent]1[backcolor=transparent] identified [backcolor=transparent]by[backcolor=transparent] [backcolor=transparent]'123'[backcolor=transparent];
[backcolor=transparent]说明:给主机为192.168.10.1的用户john分配可对数据库test所有表进行所有操作的权限,并设定口令为123。
- [backcolor=transparent]mysql[backcolor=transparent]>[backcolor=transparent]grant all privileges on [backcolor=transparent]*.*[backcolor=transparent] to john@192[backcolor=transparent].[backcolor=transparent]168.10[backcolor=transparent].[backcolor=transparent]1[backcolor=transparent] identified [backcolor=transparent]by[backcolor=transparent] [backcolor=transparent]'123'[backcolor=transparent];
[backcolor=transparent]说明:给主机为192.168.10.1的用户john分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。
- [backcolor=transparent]mysql[backcolor=transparent]>[backcolor=transparent]grant all privileges on [backcolor=transparent]*.*[backcolor=transparent] to john@localhost identified [backcolor=transparent]by[backcolor=transparent] [backcolor=transparent]'123'[backcolor=transparent];
[backcolor=transparent]说明:用户john分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。
了解了MySQL创建用户的三种方式后,就可以通过阿里云的SQL执行窗口进行用户的创建,具体操作步骤如下:
通过数据管理控制台的快捷登录页面登录初始账号。
在页面上方的菜单栏中,选择[backcolor=transparent]SQL操作 > [backcolor=transparent]SQL窗口。
在SQL窗口中输入创建用户的命令命令,例如:[backcolor=transparent] CREATE USER [backcolor=transparent]'john@192.168.189.71'[backcolor=transparent] IDENTIFIED BY [backcolor=transparent]"123"[backcolor=transparent];
单击[backcolor=transparent]执行,用户创建完成。
用户创建后,就可以在数据管理控制台的快捷登录页面输入用户名和密码访问数据库。