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

如何用Ansible授予MySQL服务器管理权限(超级、重新加载……)?

古刚洁
2023-03-14

是否有一种方法可以使用可移动的mysql_user模块(或使用任何其他模块)授予MySQL管理权限?我想为用户设置superreloadshow databases特权以及一些其他特定于数据库的特权。

以下基本设置对我很有效:

- name: Set user privileges
  mysql_user:
    user={{ mysql_user }}
    password={{ mysql_password }}
    state=present
    priv={{ item }}
  with_items:
    - 'somedatabase.*:ALL'
    - 'someotherdatabase.*:ALL'

...结果如下:

TASK: [db | Set user privileges]
**********************************************
ok: [dbuser] => (item=somedatabase.*:ALL)
ok: [dbuser] => (item=someotherdatabase.*:ALL)

下面的设置一直说“已更改”,而特权并不是你所期望的:

- name: Set user privileges
  mysql_user:
    user={{ mysql_user }}
    password={{ mysql_password }}
    state=present
    priv={{ item }}
  with_items:
    - '*.*:SUPER,RELOAD,SHOW\ DATABASES'
    - 'somedatabase.*:ALL'
    - 'someotherdatabase.*:ALL'

(重复)运行:

TASK: [db | Set user privileges]
**********************************************
changed: [dbuser] => (item=*.*:SUPER,RELOAD,SHOW\ DATABASES)
changed: [dbuser] => (item=somedatabase.*:ALL)
ok: [dbuser] => (item=someotherdatabase.*:ALL)

结果如下:

mysql> show grants for 'dbuser'@'localhost';
+---------------------------------------------------------------------------------------------------------------+
| Grants for dbuser@localhost                                                                                   |
+---------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'dbuser'@'localhost' IDENTIFIED BY PASSWORD '*2046D2DDAE359F311435E8B4D3776EFE13FB584C' |
| GRANT ALL PRIVILEGES ON `somedatabase`.* TO 'dbuser'@'localhost'                                              |
| GRANT ALL PRIVILEGES ON `someotherdatabase`.* TO 'dbuser'@'localhost'                                         |
+---------------------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)

有没有人知道如何:

  1. 设置超级重新加载显示数据库管理。特权?
  2. 使配置幂等?

共有1个答案

席烨
2023-03-14

终于找到了优雅的解决方案!首先,特权应该定义为一个列表:

$ cat group_vars/dbservers
mysql_privileges:
  - 'somedatabase.*:ALL'
  - 'someotherdatabase.*:ALL'
  - '*.*:SUPER,RELOAD,SHOW\ DATABASES'

mysql_user插件不需要附加特权,只需使用文档中提到的特权字符串,格式如下:mydb.*:insert,update/anotherdb.*:select/yetanotherdb.*:all

唯一的诀窍是如何将list转换为字符串:

- name: Set user privileges
  mysql_user:
    user={{ mysql_user }}
    password={{ mysql_password }}
    state=present
    priv={{ mysql_privileges|join('/') }}

任务的可重复运行不再显示已更改:

TASK: [db | Set user privileges]
**********************************************
ok: [dbuser]
 类似资料:
  • 我对Microsoft Graph Explorer有很少的问题,任何帮助都是感激的 > 如果我登录到Graph explorer门户(https://developer.microsoft.com/en-us/Graph/graph-explorer#)来测试API,假设我使用name@XXXX.com,其中XXXX是租户id,并且管理员向name@XXXX.com提供管理员访问权限,那么我就可

  • 我正在尝试制作一个使用数据库的java应用程序。我已经下载了db2并创建了一个用户'student'。我的程序中有以下几行: 显然,我几乎不知道我在做什么,我不知道如何给予“学生”必要的特权。也就是说,我不知道什么用户可以给他特权,因为我从来没有创建过另一个用户。我看到有人提到过'db2admin'(我使用的是windows),但我不知道该如何处理这段信息。我不知道如何检查现有用户,也不知道对db

  • 文档建议将服务帐户添加到GApps的第三方oauth访问列表必须由域管理员手动完成:https://developers.google.com/drive/delegation#delegate_domain-wide_authority_to_your_service_account 有没有一种方法可以通过身份验证页面来实现这一点?

  • 问题内容: 我正在尝试在mysql中执行查询。 错误: SQL查询: SET GLOBAL log_bin_trust_function_creators = 1 MySQL说: #1227- 访问被拒绝;您需要SUPER权限才能执行此操作 我想知道如何为任何数据库分配特权 问题答案: 您可以使用添加超级特权: 转到PHPMYADMIN>特权>编辑用户>在管理员选项卡下单击超级。>去 如果您想通过

  • 我已经创建了自己的android。这样我就可以使用隐藏的API调用“DisplayManager.connectWifiDisplay()”。 当我运行应用程序并调用该方法时,在通过Wifi Direct连接到显示器后, 我得到以下例外: java.lang.SecurityException:连接到wifi显示器所需的权限:用户10105和当前进程都没有android.Permission.CO

  • 如果我把我的Applescript给另一个人,他们将不得不手动允许Applescript控制他们的计算机进入系统首选项,点击安全 如果没有添加applescript以便它可以控制,我会得到错误,“脚本编辑器不允许辅助访问。”