如何更改已创建的 MySQL 用户的权限?

如何更改已创建的 MySQL 用户的权限?

我知道如何创建具有权限的新用户,但是更改已创建用户的权限的正确方法是什么?

我们正在进行数据库审计,有些用户的权限远远超出了需要的权限。另外,我不知道大多数 MySQL 用户的密码,所以我不想删除它们并创建新的密码。

答案1

列出用户:

select user,host from mysql.user;

显示特权:

show grants for 'user'@'host';

要更改权限,首先要撤销。例如:

revoke all privileges on *.* from 'user'@'host';

然后根据需要授予适当的权限:

grant SELECT,INSERT,UPDATE,DELETE ON `db`.* TO 'user'@'host';

最后,刷新:

flush privileges;

MySQL 文档非常出色:

答案2

无需停机,您可以执行以下操作(授予 ALTER 命令的示例):

UPDATE mysql.db
set Alter_priv='Y'
WHERE User='USER'

对于任何其他权限,请参阅当前用户权限和右列以进行更改:

SELECT *
FROM mysql.db
WHERE User='USER'

答案3

我的解决方案是使用 ansiblemysql_用户模块。它维护用户权限,而无需撤销所有内容。在数据库
中授予表的一些权限:内容:testtesttable
playbook.yaml

---
- name:
  hosts: localhost
  vars:
    ansible_python_interpreter: /usr/bin/python3
  tasks:
  - name: Test user
    community.mysql.mysql_user:
      name: testuser
      password: testpassword
      priv:
        'test.testtable': SELECT,INSERT,ALTER
      login_host: 127.0.0.1
      login_user: root
      login_password: root
      state: present

运行然后通过删除来ansible-playbook playbook.yaml
撤销:ALTERpriv

'test.testtable': SELECT,INSERT

再次运行ansible-playbook playbook.yaml
我检查了 mysql 日志以确保它在授予之前不会撤销所有内容:

2022-10-10T14:34:54.911222Z      1632 Query     SHOW GRANTS FOR 'testuser'@'localhost'
2022-10-10T14:34:54.911797Z      1632 Query     REVOKE ALTER ON `test`.`testtable` FROM 'testuser'@'localhost'
2022-10-10T14:34:54.947049Z      1632 Query     FLUSH PRIVILEGES
2022-10-10T14:34:54.951583Z      1632 Query     SHOW GRANTS FOR 'testuser'@'localhost'

相关内容