iT邦幫忙

0

在用 VirtualBox 安裝的 Ubuntu 上設定 mysql 權限

  • 分享至 

  • xImage

我目前用 php 的 PDO 在 Ubuntu 上想連線 mysql 資料庫
我有一個用以下指令賦予所有權限的 sueruser, 並且可以用她登入 mysql 和 phpmysqladmin (root 無法建立資料庫)

CREATE USER 'superuser'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'superuser'@'%';

因為我用 php PDO 連線在 /var/log/apche2/error.log 出現如下的錯誤訊息

Fatal error:  Uncaught PDOException: SQLSTATE[HY000] [1698] Access denied for user 'root'@'localhost'

所以我想賦予 root 所有 mysql 的權限 (我的程式在 Windows 可以跑,而且 php 連線字串是用 root)
我使用 superuser 登入 mysql 並輸入如下指令

CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';

卻出現如下錯誤訊息

ERROR 1045 (28000): Access denied for user 'superuser'@'%' (using password: YES)

上網查資料說我沒有設定 superuser 密碼 (其實我有設定),所以使用如下指令設定

GRANT ALL PRIVILEGES ON *.* TO 'superuser'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

卻出現如下錯誤訊息

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by 'password' with grant option' at line 1

目前一方面要設法把資料表匯入 root 一方面也要幫 root 設定權限,所以想請問各位大神關於設定權限有甚麼好解方嗎?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
一級屠豬士
iT邦大師 1 級 ‧ 2023-08-12 08:05:13

你上面的操作,是用哪個帳號去操作的?

Grant 權限,最後還要

FLUSH PRIVILEGES;

https://dev.mysql.com/doc/refman/8.0/en/privilege-changes.html

要學Linux,可以先把鳥哥的書,好好練習,打基礎打穩.
另外別只看PHP的書說的MySQL. 那些都傻傻的phpmyadmin.
世界上還有很多好用的軟體.例如 DBeaver Community 版可以使用
https://dbeaver.io/

MySQL 官方的 MySQL Workbench
https://dev.mysql.com/downloads/workbench/

這兩個比起 phpmyadmin ,不管在功能或是便利,都不遜色.

還有,真的想學Linux,去買台便宜的NB或PC吧,別光用VirtualBox,
有差別的. 當然若只是抱著試試看的心理,你可以去看來這裡有多少人喊著
要學XXX,還有宣示文,但...大多就沒有然後了.

BKY iT邦研究生 2 級 ‧ 2023-08-12 11:35:36 檢舉

這個跟實體機或虛擬機沒關係
練習本來就可以虛擬機
我覺得可能是mysql版本的關係
就跟ms sql 一樣,新版本的語法和舊版會有一些不同
樓主可以去查一下
還有我自己的經驗,mysql本身也怪怪的
同樣一段sql語局
自己用key的就是出現語法錯誤
但是我從網路教材上用附製貼上就過了
檢查幾次都不知道我哪里key錯了

To [BKY] : 賦權的問題我已經用如下指令解決了
"update user set Host='%',create_priv='y'where user='root';"
To [一級屠豬士] : 我想面試的職務是 PHP 工程師並且要求會 Linux 相關指令,現在既然 Windows 能 run 如果有通知就用 Windows 秀作品給主管看。正如您所說我就是那種誇口說大話但遇到困難就放棄的人,Linux 就到此止步了!(連 /var/log/apache2/error.log 都瞧不出端倪真的莫法度)

0

現在新版的MYSQL安裝,都會將 root 預設為 unix_socket 身份驗証方式。
而其它如localhost、IP連接的都會變成無權限或不存在。

這也常讓一些新手覺得很奇妙。為何可以用操作指令登入。但卻無法使用程式連接。
然後一直去修改權限,但不知道原來還有一個驗証方式也要一起調整。

這裏先說明一下,所謂的 unix_socket 驗証方式。是指需要使用啟動的 mysqld.sock 檔做連結。
且不需要指定host。(反正指定了也沒用就是了)

這是一個好處,這可以確保 root 無法利用連接方式登入。只能使用SSH進去後,用指令操作使用。
這是一種保護的安全機制。

當然,你可以在安裝完成後,用「mysql_secure_installation」的指令。將其特性給移除掉。

不過大多數來說,我都會建議將 root 維持原狀。另開一個新的帳號給程式端使用。
這才是安全的做法。

To [㊣浩瀚星空㊣] : 我參考以下的網站
https://www.cjkuo.net/mariadb-mysql-secure-installation-10-3/
第 3 個步驟 "關閉root 帳號遠端登入" 我 "Yes" 和 "No" 都試過,其他步驟都按 "Yes" 但仍然是不行。Linux 我真的已經放棄了!各位大神的好意雖然感激不盡但不成材的我真的不行了!Windows 可以用就好了!(其實 Windows 我也覺得不是很好寫)

我要發表回答

立即登入回答