我有以下状态公式:
crm01.dbperms2:
mysql_grant.present:
- grant: all privileges
- database: '*.*'
- user: tester2
- host: 10.1.0.2
当我执行state.sls时,我收到以下错误:
ID: crm01.dbperms2
Function: mysql_grants.present
Result: False
Comment: Failed to execute: "GRANT all privileges ON *.* TO tester2@10.1.0.2" (MySQL Error 1045: Access denied for user 'debian-sys-maint'@'localhost' (using password: YES))
Changes:
然而,如果我手动添加授权,那么在执行state.sls之后我不会收到任何错误:
ID: crm01.dbperms1
Function: mysql_grants.present
Result: True
Comment: Grant all privileges on *.* to bup@10.1.0.2 is already present
Changes:
我不知道我做错了什么。 是否有人知道如何通过salt-stack向mysql中的用户正确授予权限?
TIA
答案 0 :(得分:1)
我遇到了类似的问题,发现我需要添加连接凭据 - 在这种情况下,我使用了root登录。我也看到过一些人们指定connection_host的情况,但我似乎并不需要它。
crm01.dbperms2:
mysql_grant.present:
- grant: all privileges
- database: '*.*'
- user: tester2
- host: 10.1.0.2
- connection_user: root
- connection_pass: {{pillar.root_db_password}}
答案 1 :(得分:1)
我知道这是一个古老的问题,但这就是我如何做到的。
我添加了.my.cnf
文件,其中包含mysql用户和密码。这可以通过将文件放在主目录中来为任何用户完成。
/root/.my.cnf:
file:
- managed
- source: salt://files/mysql/root-my.cnf
- user: root
- group: root
- mode: 0600
- template: jinja
文件的内容看起来像这样。
[client]
user=root # any user having grant permission
password = {{ pillar['mysql']['server']['root_password'] }} # Password stored in pillar file.
在mysql柱文件(任何支柱文件)中添加以下行。这告诉minion从哪里读取mysql连接所需的参数,例如un,pw,host,port等。
mysql.default_file: /root/.my.cnf
现在您可以使用任何需要用户权限的mysql_database, mysql_user, mysql.grant
mysql模块。