簡體   English   中英

如何授予新用戶在 MySQL 中創建新數據庫的權限

[英]how do I grant a new user the privilege to create a new database in MySQL

如何授予新用戶在 MySQL 中創建新數據庫的權限

具體來說:

  1. 數據庫還不存在
  2. 我已經成功創建了一個新的數據庫用戶帳戶(不是管理員)
  3. 我希望非管理員用戶創建一個新數據庫
  4. 我不希望“管理員”用戶創建數據庫,然后將數據庫權限授予新用戶
  5. 作為“管理員”,我想授予新用戶創建新數據庫的權限
  6. 我不想授予新用戶對現有數據庫的任何額外權限

我能找到的文檔中的任何地方都沒有涵蓋這一點。


周一 2022-04-04更新:

我創建了用戶“scott”,然后以 MySQL 用戶“admin”身份登錄 當我運行此命令時

注意:“測試”數據庫尚不存在

mysql>GRANT CREATE ON test.* to 'scott'@'localhost';

我得到一個錯誤==> ERROR 1410 (42000): You are not allowed to create a user with GRANT

為什么會出現此錯誤? 我不是在嘗試創建用戶,而是授予用戶訪問不存在的數據庫的權限(就像 MySQL 授予用戶創建數據庫權限的方法一樣)。


如果 up 更新 SQL 語句為: mysql>GRANT CREATE ON test.* to scott;

它運行正常查詢正常,0 行受影響(0.07 秒)


所以現在我以用戶 'scott 身份登錄並運行此語句:

mysql>創建數據庫朗姆酒;

==> 錯誤 1049 (42000): 未知數據庫 'test'

為什么會出現此錯誤?

此時,我仍然無法以非管理員用戶身份創建數據庫。

示例:授予“scott”創建test3數據庫的權限,該數據庫尚不存在:

mysql> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+

mysql> grant create on test3.* to 'scott'@'localhost';
Query OK, 0 rows affected (0.01 sec)

現在嘗試以 scott 的身份創建數據庫:

mysql> select user();
+-----------------+
| user()          |
+-----------------+
| scott@localhost |
+-----------------+

mysql> show grants;
+---------------------------------------------------------+
| Grants for scott@localhost                              |
+---------------------------------------------------------+
| GRANT USAGE ON *.* TO `scott`@`localhost`               |
| GRANT ALL PRIVILEGES ON `test`.* TO `scott`@`localhost` |
| GRANT CREATE ON `test3`.* TO `scott`@`localhost`        |
+---------------------------------------------------------+

mysql> create database test3;
Query OK, 1 row affected (0.00 sec)

mysql> use test3;
Database changed

MySQL 有一個名為CREATE的權限,用於創建數據庫和表。 參見https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_create

您可以授予用戶創建特定名稱數據庫的權限,或者授予他們創建任何名稱數據庫的權限,但這意味着他們還可以在新數據庫或其他現有數據庫中創建其他表. 抱歉,可能沒有解決方案讓您在授予權限時允許他們在不指定名稱的情況下創建任何新數據庫,但隨后只能在該數據庫中擁有權限。


您不能使用 GRANT 創建用戶

您沒有創建用戶 scott。 MySQL 的舊版本允許 GRANT 在不存在的情況下隱式創建用戶,但在較新的版本中已被禁用,因為人們意識到這是一個安全漏洞。

需要說明的是,用戶“scott”只是我使用的一個示例。 如果這不是您要授予權限的用戶,請不要按字面意思使用名稱“scott”。

您得到的其他錯誤似乎是您授予用戶對名為test.*的數據庫的權限,但隨后您嘗試創建一個具有不同名稱的數據庫。 我展示的示例授予創建特定命名數據庫的權限,而不是名為rum的數據庫或任何其他數據庫。

我知道您想授予創建任意名稱數據庫的權限。 其語法為GRANT CREATE ON *.* TO...但這也會授予用戶對所有其他現有數據庫的權限。

沒有語法組合來授予對任何數據庫名稱通配符的特權,這意味着任何數據庫,前提是它尚未創建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM