MySQL :如何将 "ALTER DATABASES" 授予用户

MySQL : How to grant "ALTER DATABASES" to a USER

用户需要做的事情:

ALTER DATABASE `dbname` DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

...但即使是 :

GRANT ALL PRIVILEGES ON dbname.* TO 'user_name'@'localhost' IDENTIFIED BY '***';

...不允许用户这样做。

我找到了一些建议这样做的网站

GRANT USAGE ON SCHEMA dbname...

...但即使在 MySQL 8 中(抱歉我们在该服务器上有 Mysql 5)这似乎不存在 :

https://dev.mysql.com/doc/refman/8.0/en/grant.html

抱歉,如果这个问题完全没有分数、愚蠢或其他任何原因,但即使拥有“良好”MySQL 知识,我也不明白我做错了什么或我应该做什么。

非常感谢您的帮助!

丹尼斯

命令中不需要DEFAULT。这将更改数据库的默认字符集和排序规则:

ALTER DATABASE {DB_NAME} CHARACTER SET utf8 COLLATE utf8_unicode_ci;

但是,您还需要为该数据库中的每个 table 转换字符集和排序规则,否则将来当您尝试连接数据时会发生一些“坏事”。

ALTER TABLE {TABLE_NAME} CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

请务必将 {DB_NAME}{TABLE_NAME} 修改为正确的数据库和适当的 table 名称。

注意: 在 MySQL 5.4 Docker 容器中测试,MySQL 8.0.23 在裸机上测试金属.

这个答案在文档中。 https://dev.mysql.com/doc/refman/8.0/en/alter-database.html 说:

This statement requires the ALTER privilege on the database.

GRANT USAGE 只允许该用户连接到服务器。它不授予执行任何 SQL 语句的特权。事实上,在特定的数据库上 GRANT USAGE 是没有意义的。如果您尝试,用户最终只会获得服务器级别的 USAGE 权限:

mysql> grant usage on `dbname`.* to 'testuser'@'%';
Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql> show grants for 'testuser'@'%';
+--------------------------------------+
| Grants for testuser@%                |
+--------------------------------------+
| GRANT USAGE ON *.* TO 'testuser'@'%' |
+--------------------------------------+

简而言之,问题的解决方案是:

GRANT ALTER ON dbname.* TO 'user_name'@'localhost' IDENTIFIED BY '***';

解释和细节在 Bill Karwin 解决方案中。