[英]How to grant all privileges to root user in MySQL 8.0
嘗試過
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
獲得
ERROR 1064 (42000): 你的 SQL 語法有錯誤; 檢查與您的 MySQL 服務器版本對應的手冊,了解在第 1 行的“IDENTIFIED BY 'root' WITH GRANT OPTION'附近使用的正確語法。
注意:在以前的版本中嘗試時同樣有效。
也試過
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
獲得
ERROR 1410 (42000):不允許您使用 GRANT 創建用戶
MySQL (8.0.11.0) 用戶名/密碼是root/root。
從 MySQL 8 開始,您不再可以(隱式)使用GRANT
命令創建用戶。 使用CREATE USER代替,后跟GRANT語句:
mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'PASSWORD';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
關於WITH GRANT OPTION
的安全風險注意事項,請參見:
我看到很多(錯誤的)答案,就這么簡單:
USE mysql;
CREATE USER 'user'@'localhost' IDENTIFIED BY 'P@ssW0rd';
GRANT ALL ON *.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
注意:您可以使用root
連接到數據庫,而不是使用自創建user
。 但是,使用默認的 root 帳戶讓應用程序連接到數據庫並不是首選方式。
替代特權(小心並記住最小特權原則):
-- Grant user permissions to all tables in my_database from localhost --
GRANT ALL ON my_database.* TO 'user'@'localhost';
-- Grant user permissions to my_table in my_database from localhost --
GRANT ALL ON my_database.my_table TO 'user'@'localhost';
-- Grant user permissions to all tables and databases from all hosts --
GRANT ALL ON *.* TO 'user'@'*';
如果您以某種方式遇到以下錯誤:
ERROR 1130 (HY000): Host '1.2.3.4' is not allowed to connect to this MySQL server
您需要在/etc/mysql/my.cnf
添加/更改以下兩行並重新啟動 mysql:
bind-address = 0.0.0.0
skip-networking
1)這對我有用。 首先,創建一個新用戶。 示例:用戶foo
和密碼bar
> mysql> CREATE USER 'foo'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bar';
2) 用帶有'foo'的用戶名替換下面的代碼。
> mysql> GRANT ALL PRIVILEGES ON database_name.* TO'foo'@'localhost';
注意:database_name 是你想擁有權限的數據庫, . 意味着一切
3) 以用戶 foo 登錄
mysql> mysql -u foo -p
密碼:bar
4) 確保您從 Sequelize 的初始連接設置為 foo 和 pw bar。
對於那些在服務器計算機上已經有 root 帳戶的情況下對CREATE USER 'root'@'localhost'
感到困惑的人,請記住,您的'root'@'localhost'
和'root'@'your_remote_ip'
是mysql 服務器中的兩個不同用戶(相同的用戶名,但范圍不同)。 因此,使用your_remote_ip
后綴創建新用戶實際上將創建一個新的有效root
用戶,您可以使用該用戶從遠程機器訪問 mysql 服務器。
例如,如果您使用root
從 IP 為10.154.10.241
的遠程機器連接到您的 mysql 服務器,並且您想為遠程 root 帳戶設置密碼'Abcdef123!@#'
,這里是您的步驟想遵循:
在你的 mysql 服務器機器上,執行mysql -u root -p
,然后輸入你的密碼讓root
登錄。
進入mysql>
會話后,執行此操作為遠程范圍創建 root 用戶:
mysql> CREATE USER 'root'@'10.154.10.241' IDENTIFIED BY 'Abcdef123!@#';
在Query OK
消息之后,執行此操作以授予新創建的 root 用戶所有權限:
mysql> GRANT ALL ON *.* TO 'root'@'10.154.10.241';
進而:
FLUSH PRIVILEGES;
重啟mysqld服務:
sudo service mysqld restart
確認服務器已成功重啟:
sudo service mysqld status
如果執行上述步驟沒有任何錯誤,您現在可以使用root
從遠程機器訪問 mysql 服務器。
我的規格:
mysql --version
mysql Ver 8.0.16 for Linux on x86_64 (MySQL Community Server - GPL)
什么對我有用:
mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'desired_password';
mysql> GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' WITH GRANT OPTION;
兩個查詢中的響應:
Query OK, O rows affected (0.10 sec*)
注意:我之前創建了一個數據庫 (db_name),並創建了一個用戶憑據,該憑據具有授予數據庫中所有表的所有權限,而不是使用我在某處讀取的默認 root 用戶,這是最佳做法。
指定的用戶在您的 MySQL 中不存在(因此,MySQL 嘗試使用 GRANT 創建它,就像它在版本 8 之前所做的那樣,但由於此版本中引入的限制而失敗)。
MySQL 在這一點上非常愚蠢,所以如果你有 'root'@'localhost' 並試圖授予 'root'@'%' 權限,它會將它們視為不同的用戶,而不是任何主機上的 root 用戶的通用概念,包括本地主機。
錯誤消息也具有誤導性。
因此,如果您收到錯誤消息,請使用以下內容檢查現有用戶
SELECT CONCAT("'", user, "'@'", host, "'") FROM mysql.user;
然后創建缺少的用戶(如 Mike 建議的那樣)或將您的 GRANT 命令調整為實際存在的用戶規范。
只是我在這個主題上的 2 美分。 我在嘗試從 MySQL Workbench 連接時遇到了完全相同的問題。 我正在運行一個 bitnami-mysql 虛擬機來設置一個本地沙箱進行開發。
Bitnami 的教程說要運行“授予所有權限”命令:
/opt/bitnami/mysql/bin/mysql -u root -p -e "grant all privileges on *.* to 'root'@'%' identified by 'PASSWORD' with grant option";
這顯然不起作用,我終於使用 Mike Lischke 的回答讓它工作了。
我認為發生的事情是 root@% 用戶的憑據錯誤。 因此,如果您嘗試修改用戶的權限並且沒有運氣,請嘗試:
從 Mysql 控制台:
列出用戶(有助於查看所有用戶):
select user, host from mysql.user;
刪除所需用戶:
drop user '{{ username }}'@'%';
創建用戶並授予權限:
CREATE USER '{{ username }}'@'%' IDENTIFIED BY '{{ password }}';
GRANT ALL PRIVILEGES ON *.* TO '{{ username }}'@'%' WITH GRANT OPTION;
運行此命令:
FLUSH PRIVILEGES;
找到您的 mysql 配置文件“my.cnf”並查找如下所示的行:
bind-address=127.0.0.1
並使用“#”對其進行評論:
#bind-address=127.0.0.1
然后重啟你的mysql服務。
希望這可以幫助有同樣問題的人!
復制並立即使用它:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON *.* TO 'username'@'localhost';
FLUSH PRIVILEGES;
而不是使用單行代碼,例如:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
然后:
GRANT ALL ON *.* TO 'username'@'localhost';
然后:
FLUSH PRIVILEGES;
檢查您的用戶名和域是否與之前創建的相同。 Mysql通過user表中的兩列選擇賬號,如果不同,mysql可能認為你想通過grant創建一個新賬號,8.0版本以后不支持了。
在 select 語句中,將 'user'@'%' 更改為 'user'@'localhost' 解決了我的問題
這對我有用:
mysql> FLUSH PRIVILEGES
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES
我的規格:
mysql --version
mysql Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)
什么對我有用:
mysql> USE mysql;
mysql> UPDATE User SET Host='%' WHERE User='root' AND Host='localhost';
你會得到這個錯誤
ERROR 1410 (42000): 不允許您創建具有 GRANT 的用戶
如果您嘗試對不存在的用戶運行GRANT
!
因此,首先運行它以確保您在GRANT
中使用的用戶與您擁有的完全匹配:
select User, Host from user;
特別注意您創建的用戶是否在localhost
而您嘗試授予的用戶是%
這個命令對我有用:
1-登錄mysql並查看所有用戶
sudo mysql -u root
select user, host from mysql.user;
2-刪除老用戶
drop user root@localhost;
3-創建新用戶
CREATE USER 'root'@'localhost' IDENTIFIED BY 'mypassword'
4-為其添加所有權限:
GRANT ALL ON *.* TO 'root'@'localhost'
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword';
5-finally 刷新權限
FLUSH PRIVILEGES;
好吧,我只是遇到了同樣的問題。 即使路由有 '%' 也無法遠程連接。 現在,查看my.ini
文件(Windows 中的配置文件), bind-address
語句被遺漏了。
所以...我把這個bind-address = *
放在[mysqld]
並重新啟動了服務。 現在它起作用了!
1. 授予權限
mysql> 授予所有權限。 'root'@'%'with GRANT OPTION;
mysql> 刷新特權
2.查看用戶表:
mysql> 使用 mysql
3.修改配置文件
mysql默認綁定ip:127.0.0.1,如果要遠程訪問服務,刪除config即可
#Modify the configuration file
vi /usr/local/etc/my.cnf
#Comment out the ip-address option
[mysqld]
# Only allow connections from localhost
#bind-address = 127.0.0.1
4.最后重啟服務
brew 服務重啟 mysql
試試這個,我遇到了同樣的問題,我嘗試了幾個選項,但下面的方法有效。
全力以赴。 TO 'root'@'%';
非常感謝@ Nebulastic如果您只想使用以下命令允許遠程 IP
CREATE USER 'user_test'@'113.yy.xx.94' IDENTIFIED BY 'YOUR_PWD';
GRANT ALL ON *.* TO 'user_test'@'113.yy.xx.94';
FLUSH PRIVILEGES;
就我而言,我想做類似的事情,我從這里開始執行一些步驟,但最好的方法是 @nebulasic 提到的:
USE mysql;
CREATE USER 'user'@'localhost' IDENTIFIED BY 'P@ssW0rd';
GRANT ALL ON *.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
我的 root 沒有 GRANT 權限,所以我不能授予新用戶任何特權。 解決方案是刪除當前 root 用戶並使用“mysql_native_password”創建新用戶。
命令如下 以root身份登錄mysql
mysql> DROP USER 'root'@'localhost' IDENTIFIED BY 'PASSWORD' FROM mysql.user;
mysql> CREATE USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'locahost' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
這可能有效:
grant all on dbtest.* to 'dbuser'@'%' identified by 'mysql_password';
我有同樣的問題,這導致我來到這里。 特別是對於本地開發,我希望能夠在沒有sudo
情況下執行mysql -u root -p
。 我不想創建新用戶。 我想從本地 PHP Web 應用程序使用root
。
該錯誤消息具有誤導性,因為默認的'root'@'%'
用戶權限沒有任何問題。
相反,正如其他答案中提到的幾個人,解決方案只是在我的/etc/mysql/mysql.conf.d/mysqld.cnf
配置中設置bind-address=0.0.0.0
而不是bind-address=127.0.0.1
. 其他方面無需更改。
帶有 sudo 的 Stary mysql
sudo mysql
我在 CentOS 上遇到了同樣的問題,這對我有用(版本:8.0.11):
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
這對我有用
mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.