我知道如何创建具有权限的新用户,但是更改已创建用户的权限的正确方法是什么?
我们正在进行数据库审计,有些用户的权限远远超出了需要的权限。另外,我不知道大多数 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_用户模块。它维护用户权限,而无需撤销所有内容。在数据库
中授予表的一些权限:内容:test
testtable
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
撤销:ALTER
priv
'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'