我正在使用 Salt 来配置云服务器,但 MySQLdb 为 MySQL 生成正确的权限时遇到问题。如果我直接执行 SQL 它将是:
GRANT ALL ON `install\_%`.* TO 'installer'@'localhost';
sls 文件包含:
installer_local_install_grants:
mysql_grants.present:
- grant: all privileges
- database: install\_%.*
- user: installer
- host: localhost
- escape: False
这会产生此错误:
Function: mysql_grants.present
Result: False
Comment: An exception occurred in this state: Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/salt/state.py", line 1560, in call
**cdata['kwargs'])
File "/usr/lib/python2.7/dist-packages/salt/states/mysql_grants.py", line 187, in present
grant, database, user, host, grant_option, escape, ssl_option, **connection_args
File "/usr/lib/python2.7/dist-packages/salt/modules/mysql.py", line 1666, in grant_add
_execute(cur, qry['qry'], qry['args'])
File "/usr/lib/python2.7/dist-packages/salt/modules/mysql.py", line 505, in _execute
return cur.execute(qry, args)
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 159, in execute
query = query % db.literal(args)
TypeError: * wants int
在提交到 MySQLdb 之前打开 salt 中的调试,相关行是:
Doing query: GRANT ALL PRIVILEGES ON install\_%.* TO %(user)s@%(host)s args: {'host': 'localhost', 'user': 'installer'}
因此,Salt 似乎输出了正确的代码,但 MySQLdb 没有正确处理查询的某些部分。查询缺少后面的勾号,但我真的不知道如何获取它们。
删除转义或将其设置为 True 后,授权看起来像:
+-----------+-----------------+------------------+
| Host | Db | User |
+-----------+-----------------+------------------+
| localhost | install\\_\% | installer |
+-----------+-----------------+------------------+
当它应该看起来像:
+-----------+-----------------+------------------+
| Host | Db | User |
+-----------+-----------------+------------------+
| localhost | install\_% | installer |
+-----------+-----------------+------------------+
最佳答案
好的,您会打开一个引用此帖子的问题吗?谢谢!
关于mysql - Saltstack mysql grants.present 下划线通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32362573/