如何在AWS RDS中创建MySQL用户并授予权限

时间:2020-01-09 10:39:05  来源:igfitidea点击:

如何从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删除数据库时,不会自动删除专门为该数据库授予的特权。
如上所述,必须手动将其删除。