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 解决方案中。
用户需要做的事情:
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 解决方案中。