如何在AWS RDS中创建MySQL用户并授予权限
如何从Linux命令行创建新的MySQL用户并在AWS RDS云服务中授予权限?
MySQL是一个免费的开源数据库。
互联网上的许多网站都将MySQL与Python,Perl,PHP和其他服务器端编程语言一起使用。
AWS提供具有高可用性选项的托管MySQL服务,包括备份,还原和修补。
本快速教程介绍了如何使用Linux命令行选项在AWS RDS上创建MySQL用户帐户和授予特权。
配置要求
以下命令可用于MariaDB和MySQL RDS实例。
显然,您需要一个AWS账户以及正在运行的MySQL/MariaDB RDS和EC2/Lightsail实例。
我还假设您在EC2/Lightsail Linux服务器上安装了mysql客户端。
例如,我们可以如下安装mysql客户端。
首先,使用ssh命令登录:
ssh -i ~/.ssh/EC2-keypem.pem [email protected]
接下来,根据Linux发行版安装mysql客户端。
Debian/Ubuntu Linux
$ sudo apt install mysql-client
CentOS/RHEL
$ sudo yum install mysql
Fedora Linux
$ sudo dnf install mysql
通过CLI测试AWS RDS连接
现在,我们可以使用mysql命令连接到AWS RDS mysql服务器:
$ mysql -u {USER_NAME} -h {AWS_RDS_HOST_NAME} -P {MYSQL_PORT} -p
例如:
$ mysql -u masteruser -h mysql–instance1.134342.us-west-1.rds.amazonaws.com -P 3306 -p
如何创建MySQL用户帐户并授予特权
首先,我将以dbmasteruser用户身份登录:
$ mysql -u dbmasteruser -h ls-gdgdg6585684767gdgjdg.eetg96lp.us-east-1.rds.amazonaws.com -P 3306 -p
步骤1:创建一个新的数据库
在大多数情况下,您需要创建一个新的数据库。
但是,如果RDS上已有MySQL数据库,请跳过此步骤。
让我们创建一个名为blog
的新MySQL数据库:
mysql> CREATE DATABASE blog; Query OK, 1 row affected (0.00 sec)
步骤2:在AWS RDS上创建一个新的MySQL用户帐户
我将为我们的名为" theitroad_blog"的数据库创建一个名为" Hyman"的新用户,如下所示:
mysql> CREATE USER 'Hyman'@'%' IDENTIFIED BY 'my_Super_Secret_Password'; Query OK, 0 rows affected (0.01 sec)
此外,出于安全原因,在创建新用户时,我们可以按以下方式为特定用户帐户强制进行SSL连接:
mysql> CREATE USER 'tom'@'%' IDENTIFIED BY 'password' REQUIRE SSL; Query OK, 0 rows affected (0.01 sec)
当客户端主机名部分设置为"%"时,任何客户端/服务器用户都可以连接到AWS RDS。
因此,我们可以用实际的EC2/Lightsail服务器IP地址或VPC子网替换"%",以提高安全性。
例如:
## EC2/Lightsail server IP address/client ## mysql> CREATE USER 'Hyman'@'172.26.9.11' IDENTIFIED BY 'password'; ## VPC sub/net client example for 172.26.0.0/20 ## mysql> CREATE USER 'Hyman'@'172.26.0.0/255.255.240.0' IDENTIFIED BY 'passwd';
我们可以为现有的MySQL用户帐户强制进行SSL连接,如下所示:
mysql> ALTER USER 'user_name'@'client_ip' REQUIRE SSL; mysql> ALTER USER 'Hyman'@'%' REQUIRE SSL;
默认情况下,在AWS RDS用户帐户上授予以下特权。
让我们为名为Hyman的用户运行SHOW GRANTS SQL命令:
mysql> SHOW GRANTS for userName; mysql> SHOW GRANTS for Hyman;
+-----------------------------------+ | Grants for Hyman@% | +-----------------------------------+ | GRANT USAGE ON *.* TO `Hyman`@`%` | +-----------------------------------+ 1 row in set (0.00 sec)
步骤3:授予MySQL用户帐户特权
注意,现在mysql帐户设置了最低或零(无)数据库特权。
以下是标准特权的列表:
- "数据使用权限"包括:SELECT,INSERT,UPDATE,DELETE和FILE
- 结构特权包括:CREATE,ALTER,INDEX,DROP,CREATE TEMPORARY TABLES,SHOW VIEW,CREATE ROUTINE,ALTER ROUTINE,EXECUTE,CREATE VIEW,EVENT和TRIGGER
- "管理特权包括":GRANT, SUPER, PROCESS, RELOAD, SHUTDOWN, SHOW DATABASES, LOCK TABLES, REFERENCES, REPLICATION CLIENT, REPLICATION SLAVE, , CREATE USER(授予,超级,过程,重新加载,关闭,显示数据库,锁表,引用,复制客户端,复制从属和创建用户)
- " SSL特权包括":REQUIRE NONE, REQUIRE SSL, REQUIRE X509(无要求,要求SSL,要求X509)
ALL PRIVILEGES
:授予mysql用户帐户所有特权的快捷方式。
授予不同用户权限的语法如下:
GRANT permission ON DB_NAME.TABLE_NAME TO 'userNameHere'@'client_ip'; GRANT permission1,permission2 ON DB.TABLE TO 'userNameHere'@'client_vpc_sub_net';
例如:
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON blog.* TO 'Hyman'@'%';
这是vpc子网/网络的另一个示例:
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON blog.* TO 'Hyman'@'172.26.0.0/255.255.240.0';
在此示例中,授予各种结构特权:
mysql> GRANT CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, CREATE VIEW, EVENT, TRIGGER, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON `blog`.* TO 'Hyman'@'%';
当然,我们也可以为Hyman用户的blog
数据库授予所有PRIVILEGES,如下所示:
mysql> GRANT ALL PRIVILEGES ON `blog`.* TO 'Hyman'@'%';
假设您需要使用用户" sai"创建一个名为" salesstats"的新数据库,并授予所有PRIVILEGES:
mysql> CREATE DATABASE salesstats; mysql> CREATE USER 'sai'@'%' IDENTIFIED BY 'PASSWORD_HERE'; mysql> GRANT ALL PRIVILEGES ON `salesstats`.* TO 'sai'@'%'; mysql> SHOW GRANTS for sai; mysql> SHOW GRANTS for 'sai'@'%';
请注意,您需要使用FLUSH PRIVILEGES SQL语句。
仅当您使用INSERT,UPDATE或DELETE等语句直接修改授权表时:
mysql> FLUSH PRIVILEGES;
步骤4:测试
只需从另一个EC2实例运行以下命令:
$ mysql -u sai -h mysql–instance1.134342.us-west-1.rds.amazonaws.com -P 3306 -p salesstats
与RDS实例的加密连接
首先使用wget命令下载包含中间证书和根证书的证书捆绑包:
$ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
现在按如下所示连接它:
$ mysql -h mysql–instance1.134342.us-west-1.rds.amazonaws.com \ --ssl-ca=rds-combined-ca-bundle.pem --ssl-mode=VERIFY_IDENTITY \ -u sai -P 3306 -p salesstats
现在,本教程的其余部分介绍了如何撤消所有步骤。
换句话说,您将学习如何使用mysql CLI删除数据库,用户和授予/权限。
步骤5:从AWS RDS MySQL用户帐户撤消特权
REVOKE SQL语句允许系统管理员撤消特权和角色。
语法为:
mysql> REVOKE ALL PRIVILEGE1,PRIVILEGE2 ON database.* FROM 'user'@'client_ip'; mysql> REVOKE ALL PRIVILEGES ON database.* FROM 'user'@'vpc_sub_net'; mysql> REVOKE INSERT, DELETE ON `salesstats`.* FROM 'sai'@'%'; mysql> REVOKE ALL PRIVILEGES ON `salesstats`.* FROM 'sai'@'%';
步骤6:删除AWS RDS MySQL用户帐户
要删除AWS RDS MySQL用户帐户,请使用DROP sql语句,如下所示:
mysql> DROP USER 'user'@'client_ip'; mysql> DROP USER 'sai'@'%';
有关更多信息,请参见如何删除MySQL/MariaDB用户帐户。
步骤7:删除现有的AWS RDS MySQL数据库
DROP DATABASE SQL语句删除数据库中的所有表并删除数据库。
因此,请谨慎使用以下语句:
mysql> DROP DATABASE db_name_here; mysql> DROP DATABASE salesstats;
验证一下:
mysql> SHOW DATABASES;
请注意,从RDS删除数据库时,不会自动删除专门为该数据库授予的特权。
如上所述,必须手动将其删除。