mysql - Saltstack mysql grants.present 下划线通配符

标签 mysql salt-stack

我正在使用 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        |
+-----------+-----------------+------------------+

最佳答案

好的,您会打开一个引用此帖子的问题吗?谢谢!

https://github.com/saltstack/salt/issues/new

关于mysql - Saltstack mysql grants.present 下划线通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32362573/

相关文章:

linux - SaltStack - 更改文件权限

ansible - Saltstack 中的 register(Ansible) 相当于什么?

mysql - Django-MySQL : 1146 Table doesn't exist

c# - 数据库 "openpg"不存在严重性 : FATAL Code: 3D000

php - 在 PHP 中构建动态 sql 语句

mysql - 如何将数据库行合并在一起?

salt-stack - 自动化 Salt-Minion 安装

salt-stack - Salt 中处于单一状态的多个 file.line

linux - 在 Thunar 中远程创建自定义操作

mysql - 合并 MySQL 中不同行的相邻范围