如何使用 ansible 在 amazon mysql RDS 中创建只读用户
How to create readonly users in amazon mysql RDS using ansible
我想在 VPC 内的多个 RDS 实例中创建一个只读用户。基本的做法是:
- mysql -h "rds_endpoint" -u "admin_user" -p
- GRANT SELECT on . to 'eng_ro'@'jump_box_ip' IDENTIFIED BY 'password';
- FLUSH PRIVILEGES;
我使用jumpbox(public面向ip)登录VPC。我写了一个像这样的剧本:
---
- name: Connect to the mysql db as root
mysql_user:
login_user: root
login_password: temp+1234
host: {{ item }}
with_items:
- rds_endpoint1
- rds_endpoint2
- name: Create smeng_ro user for all databases
mysql_user:
login_user: root
login_password: temp+1234
host: {{ item }}
name: smeng_ro
password: engronly
priv: *.*,GRANT
state: present
with_items:
- rds_endpoint1
- rds_endpoint2
但这不是我想要的,我错过了什么?
首先,您的第一个任务实际上并没有执行任何操作,因此您可以将其删除。
至于创建具有某些权限的用户,您基本上已经在第二个任务中涵盖了这一点,但是您授予的权限只是向用户授予所有数据库的 GRANT
权限。尽管经过仔细检查,您在要 select (*.*
) 的数据库和给定的实际权限 (GRANT
) .
之间使用逗号而不是冒号
如果你只想给 SELECT
on all the databases you can replace that line with priv: *.*:SELECT
. The format for the priv
attribute is given as db.table:priv1,priv2
in the Ansible docs.
所以你的任务应该是这样的:
- name: Create smeng_ro user for all databases
mysql_user:
login_user: root
login_password: temp+1234
host: {{ item }}
name: smeng_ro
password: engronly
priv: *.*:SELECT
state: present
with_items:
- rds_endpoint1
- rds_endpoint2
我想在 VPC 内的多个 RDS 实例中创建一个只读用户。基本的做法是:
- mysql -h "rds_endpoint" -u "admin_user" -p
- GRANT SELECT on . to 'eng_ro'@'jump_box_ip' IDENTIFIED BY 'password';
- FLUSH PRIVILEGES;
我使用jumpbox(public面向ip)登录VPC。我写了一个像这样的剧本:
---
- name: Connect to the mysql db as root
mysql_user:
login_user: root
login_password: temp+1234
host: {{ item }}
with_items:
- rds_endpoint1
- rds_endpoint2
- name: Create smeng_ro user for all databases
mysql_user:
login_user: root
login_password: temp+1234
host: {{ item }}
name: smeng_ro
password: engronly
priv: *.*,GRANT
state: present
with_items:
- rds_endpoint1
- rds_endpoint2
但这不是我想要的,我错过了什么?
首先,您的第一个任务实际上并没有执行任何操作,因此您可以将其删除。
至于创建具有某些权限的用户,您基本上已经在第二个任务中涵盖了这一点,但是您授予的权限只是向用户授予所有数据库的 GRANT
权限。尽管经过仔细检查,您在要 select (*.*
) 的数据库和给定的实际权限 (GRANT
) .
如果你只想给 SELECT
on all the databases you can replace that line with priv: *.*:SELECT
. The format for the priv
attribute is given as db.table:priv1,priv2
in the Ansible docs.
所以你的任务应该是这样的:
- name: Create smeng_ro user for all databases
mysql_user:
login_user: root
login_password: temp+1234
host: {{ item }}
name: smeng_ro
password: engronly
priv: *.*:SELECT
state: present
with_items:
- rds_endpoint1
- rds_endpoint2