当前位置: 首页 > 知识库问答 >
问题:

使用可移动的mysql_user模块授予进程

能烨华
2023-03-14

我需要将特定数据库的所有特权以及进程权限授予mysql用户。

我试过很多种组合,但都不奏效:

mysql_user: priv="{{ item.name | regex_replace ('[.-]', '_') }}.*:ALL/PROCESS" login_host="{{mysql.endpoint.address}}" login_port=3306 login_user="{{mysql_root_user}}" login_password="{{mysql_root_password}}" name="{{item.user}}" password="{{item.password}}" host=% state=present

结果:“无效特权字符串:列表索引超出范围”

mysql_user: priv="{{ item.name | regex_replace ('[.-]','_') }}.*:ALL/{{ item.name | regex_replace ('[.-]','_') }}.*:PROCESS" login_host="{{mysql.endpoint.address}}" login_port=3306 login_user="{{mysql_root_user}}" login_password="{{mysql_root_password}}" name="{{item.user}}" password="{{item.password}}" host=%  state=present

结果:DB授予权限和全局权限的使用不正确

mysql_user: priv="{{ item.name | regex_replace ('[.-'_') }}.*:ALL,PROCESS" login_host="{{mysql.endpoint.address}}" login_port=3306 login_user="{{mysql_root_user}}" login_password="{{mysql_root_password}}" name="{{item.user}}" password="{{item.password}}" host=%  state=present

(摘自https://stackoverflow.com/A/50785241/123594-我感到绝望)

结果:您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以获得使用near'Process ON...

如何将进程权限授予具有可移动mysql_user的用户?

共有1个答案

白智
2023-03-14

您的问题来自这样一个事实,即与您所指出的其他问题不同,您试图将授予特定数据库的进程特权,而这在MySQL中是不可能的。

一个来自MySQL命令行的示例:

mysql> GRANT PROCESS ON my_db.* TO usr;
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

发生这种情况的原因是process特权是全局特权,因此只能将其授予*.*

管理权限使用户能够管理MySQL服务器的操作。这些特权是全局的,因为它们不特定于特定的数据库。

来源:https://dev.mysql.com/doc/refman/5.7/en/priviles-provided.html

因此必须将processallgrant分开。

这仍然可以通过使用以下语法在单个任务中实现:

可以通过使用正斜杠来分隔每个特权来指定多个特权:db.table:priv/db.table:priv

来源:https://docs.ansible.com/ansible/latest/collections/community/mysql/mysql_user_module.html#parameter-priv

因此您的特权最终为:

"{{ item.name | regex_replace ('[.-]', '_') }}.*:ALL/*.*:PROCESS" 

下面是一本演示这一点的剧本:

- hosts: all
  gather_facts: no
      
  tasks:
    - mysql_user: 
        priv: >-
          {{ item.name | regex_replace ('[.-]', '_') }}.*:ALL/ 
          *.*:PROCESS 
        login_host: "{{ mysql.endpoint.address }}" 
        login_port: 3306 
        login_user: "{{ mysql_root_user }}" 
        login_password: "{{ mysql_root_password }}" 
        name: "{{ item.user }}" 
        password: "{{ item.password }}" 
        host: "%" 
        state: present
      loop: 
        - name: my.db
          user: usr
          password: pwd
      vars: 
        mysql_root_user: root
        mysql_root_password: root
        mysql:
          endpoint:
            address: mysql

其中给出了概述:

PLAY [all] **********************************************************************************************************

TASK [mysql_user] ***************************************************************************************************
changed: [localhost] => (item={'name': 'my.db', 'user': 'usr', 'password': 'pwd'})

PLAY RECAP **********************************************************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

并具有以下特权:

mysql> show grants for usr;
+------------------------------------------------+
| Grants for usr@%                               |
+------------------------------------------------+
| GRANT PROCESS ON *.* TO `usr`@`%`              |
| GRANT ALL PRIVILEGES ON `my_db`.* TO `usr`@`%` |
+------------------------------------------------+
2 rows in set (0.00 sec)
 类似资料:
  • Note: 使用此模块注册的快捷键是系统全局的(QQ截图那种), 不要在应用模块(app module)响应 ready 消息前使用此模块(注册快捷键). callback Function 注册 accelerator 快捷键. 当用户按下注册的快捷键时将会调用 callback 函数. Accelerator 注销全局快捷键 accelerator.

  • 虽然 autoUpdater 模块提供了一套各平台通用的接口,但是在每个平台间依然会有一些微小的差异。 在 OS X 上,autoUpdater 模块依靠的是内置的 Squirrel.Mac,这意味着你不需要依靠其他的设置就能使用。关于 更新服务器的配置,你可以通过阅读 Server Support 这篇文章来了解。 Windows 在 Windows 上,你必须使用安装程序将你的应用装到用户的计

  • 下面的这个例子将会展示如何在最后一个窗口被关闭时退出应用: app 对象会触发以下的事件: 当应用程序完成基础的启动的时候被触发。在 Windows 和 Linux 中, will-finish-launching 事件与 ready 事件是相同的; 在 OS X 中, 这个时间相当于 NSApplication 中的 applicationWillFinishLaunching 提示。 你应该经

  • 本文向大家介绍oauth 授权码授予,包括了oauth 授权码授予的使用技巧和注意事项,需要的朋友参考一下 示例 第1步 第2步 资源

  • 我们已经实现了 OAuth2 授权服务器(和身份提供程序)。现在,我们要执行负载测试来衡量系统性能。 我现在遇到的具体问题是,我想对授权代码流进行负载测试。到目前为止我一直在用JMeter。但是我不知道如何为所需的redirect_uri提供一个endpoint来完成这个流程。到底有没有办法做到这一点,还是我运气不好?谷歌帮不上忙。如果JMeter做不到,有没有工具可以?

  • 在用户默认浏览器中打开URL的示例: fullPath String 打开文件所在文件夹,一般情况下还会选中它. fullPath String 以系统默认设置打开外部协议.(例如,mailto: somebody@somewhere.io会打开用户默认的邮件客户端) fullPath String 播放 beep 声音.