我需要将特定数据库的所有特权以及进程权限授予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的用户?
您的问题来自这样一个事实,即与您所指出的其他问题不同,您试图将授予
特定数据库的进程
特权,而这在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
因此必须将process
和all
的grant
分开。
这仍然可以通过使用以下语法在单个任务中实现:
可以通过使用正斜杠来分隔每个特权来指定多个特权: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 声音.