1. 程式人生 > >遇到問題---mysql賬戶密碼以及許可權的問題 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor

遇到問題---mysql賬戶密碼以及許可權的問題 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor

這種型別的提示是帳號密碼不對或者帳號不存在的現象。

我們先來梳理一下mysql的賬戶密碼思路 

mysql安裝完後 root的密碼預設為空 

所以  如果 mysql環境正常 已經啟動的話  

我們 直接輸入 mysql 可以直接進入 mysql環境 如下:

mysql還有一種登入方式就是帶帳號密碼的登入方式 :

mysql -u root -p

然後根據提示輸入密碼即可登入 為空時 直接回車可登入:


忘記密碼了怎麼辦 或者說 想把root的空密碼改成有密碼?修改密碼

方法如下:

方法一:

root密碼為空時用下面命令修改, 修改成12345:

mysqladmin -u root -p password  12345

不為空時  使用mysqladmin。假如原密碼為123456 ,修改為12345 命令如下

mysqladmin -u root -p 123456 password  "12345"
  注意:更改的密碼不能用單引號,可用雙引號或不用引號
 
mysqladmin -u root -p oldpassword  password  “newpasswd” 
執行這個命令後,需要輸入root的原密碼,這樣root的密碼將改為newpasswd。同樣,把命令裡的root改為你的使用者名稱,你就可以改你自己的密碼了。
當然如果你的mysqladmin連線不上mysql server,或者你沒有辦法執行mysqladmin,那麼這種方法就是無效的,而且mysqladmin無法把密碼清空

方法2:

# /etc/init.d/mysql stop 
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking & 
# mysql -u root mysql 
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root'; 
mysql> FLUSH PRIVILEGES; 

mysql> quit 

# /etc/init.d/mysqld restart 
# mysql -u root -p 
Enter password: 


mysql> 

如果我們想看看還有哪些賬戶 可以用下面的命令:

在mysql環境中

mysql>select * from mysql.user ;

新增賬戶:



GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' IDENTIFIED BY 'some_pass' WITH GRANT OPTION;

monty對應帳號    some_pass對應密碼

增加一個使用者,使用者名稱為sa,密碼為123。注意要使用PASSWORD函式,然後還要使用FLUSH
PRIVILEGES來執行確認。
下面的方法都在mysql提示符下使用,且必須有mysql的root許可權: 
mysql>mysql> INSERT INTO user
-> VALUES('%','monty',PASSWORD('some_pass'),
-> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',
-> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',
-> '','','','',0,0,0,0); 
mysql>FLUSH PRIVILEGES

使用者許可權設定
  1、以root(也可用其它有許可權的使用者)身份登入
  2、下面建立一個test使用者,密碼為test,並且只能對picture資料庫進行操作的命令
    mysql>GRANT ALL ON picture.* TO test IDENTIFIED BY "test";
  GRANT語句的語法看上去像這樣:
  GRANT privileges (columns) ON what TO user IDENTIFIED BY "password" WITH GRANT OPTION  

要使用該語句,你需要填寫下列部分: 
  privileges 授予使用者的許可權,下表列出可用於GRANT語句的許可權指定符: 
 許可權指定符 許可權允許的操作 
  Alter       修改表和索引 
  Create      建立資料庫和表 
  Delete      刪除表中已有的記錄 
  Drop    拋棄(刪除)資料庫和表 
  INDEX      建立或拋棄索引 
  Insert      向表中插入新行 
  REFERENCE   未用 
  Select     檢索表中的記錄 
  Update      修改現存表記錄 
  FILE       讀或寫伺服器上的檔案 
  PROCESS    檢視伺服器中執行的執行緒資訊或殺死執行緒 
  RELOAD     過載授權表或清空日誌、主機快取或表快取。 
  SHUTDOWN   關閉伺服器 
  ALL       所有;ALL PRIVILEGES同義詞 
  USAGE     特殊的“無許可權”許可權

  上表顯示在第一組的許可權指定符適用於資料庫、表和列,第二組數管理許可權。一般,這些被相對嚴格地授權,因為它們允許使用者影響伺服器的操作。第三組許可權特殊,ALL意味著“所有許可權”,UASGE意味著無許可權,即建立使用者,但不授予許可權。
  columns   許可權運用的列,它是可選的,並且你只能設定列特定的許可權。如果命令有多於一個列,應該用逗號分開它們。 
  what   許可權運用的級別。許可權可以是全域性的(適用於所有資料庫和所有表)、特定資料庫(適用於一個數據庫中的所有表)或特定表的。可以通過指定一個columns字句是許可權是列特定的。
  user    許可權授予的使用者,它由一個使用者名稱和主機名組成。在MySQL中,你不僅指定誰能連線,還有從哪裡連線。這允許你讓兩個同名使用者從不同地方連線。 MySQL讓你區分他們,並彼此獨立地賦予許可權。MySQL中的一個使用者名稱就是你連線伺服器時指定的使用者名稱,該名字不必與你的Unix登入名或 Windows名聯絡起來。預設地,如果你不明確指定一個名字,客戶程式將使用你的登入名作為MySQL使用者名稱。這只是一個約定。你可以在授權表中將該名 字改為nobody,然後以nobody連線執行需要超級使用者許可權的操作。 
  password    賦予使用者的口令,它是可選的。如果你對新使用者沒有指定IDENTIFIED BY子句,該使用者不賦給口令(不安全)。對現有使用者,任何你指定的口令將代替老口令。如果你不指定口令,老口令保持不變,當你用IDENTIFIED BY時,口令字串用改用口令的字面含義,GRANT將為你編碼口令,不要你用SET PASSWORD 那樣使用password()函式。 
  WITH GRANT OPTION子句是可選的。如果你包含它,使用者可以授予許可權通過GRANT語句授權給其它使用者。你可以用該子句給與其它使用者授權的能力。
  注意:使用者名稱、口令、資料庫和表名在授權表記錄中是大小寫敏感的,主機名和列名不是。 
  一般地,你可以通過詢問幾個簡單的問題來識別GRANT語句的種類: 

  誰能連線,從那兒連線? 

  使用者應該有什麼級別的許可權,他們適用於什麼? 

  使用者應該允許管理許可權嗎? 


  下面就討論一些例子。 
  1.1 誰能連線,從那兒連線? 
  你可以允許一個使用者從特定的或一系列主機連線。有一個極端,如果你知道降職從一個主機連線,你可以將許可權侷限於單個主機:
  GRANT ALL ON samp_db.* TO [email protected] IDENTIFIED BY "ruby"
  GRANT ALL ON samp_db.* TO [email protected] IDENTIFIED BY "quartz" 
  (samp_db.*意思是“samp_db資料庫的所有表)另一個極端是,你可能有一個經常旅行並需要能從世界各地的主機連線的使用者max。在這種情況下,你可以允許他無論從哪裡連線:
  GRANT ALL ON samp_db.* TO [email protected]% IDENTIFIED BY "diamond" 
  “%”字元起萬用字元作用,與LIKE模式匹配的含義相同。在上述語句中,它意味著“任何主機”。所以max和[email protected]%等價。這是建立使用者最簡單的方法,但也是最不安全的。其中,你可以允許一個使用者從一個受限的主機集合訪問。例如,要允許mary從snake.net域的任何主機連線,用一個%.snake.net主機指定符:
  GRANT ALL ON samp_db.* TO [email protected] IDENTIFIED BY "quartz";   
  如果你喜歡,使用者識別符號的主機部分可以用IP地址而不是一個主機名來給定。你可以指定一個IP地址或一個包含模式字元的地址,而且,從MySQL 3.23,你還可以指定具有指出用於網路號的位數的網路掩碼的IP號:

  GRANT ALL ON samp_db.* TO [email protected] IDENTIFIED BY "ruby" 
  GRANT ALL ON samp_db.* TO [email protected]% IDENTIFIED BY "quartz" 
  GRANT ALL ON samp_db.* TO [email protected]/17 IDENTIFIED BY "ruby" 
  第一個例子指出使用者能從其連線的特定主機,第二個指定對於C類子網192.168.128的IP模式,而第三條語句中,192.168.128.0/17指定一個17位網路號並匹配具有192.168.128頭17位的IP地址。
  1.2 使用者應該有什麼級別的許可權和它們應該適用於什麼?
  你可以授權不同級別的許可權,全域性許可權是最強大的,因為它們適用於任何資料庫。要使ethel成為可做任何事情的超級使用者,包括能授權給其它使用者,發出下列語句:
  GRANT ALL ON *.* TO [email protected] IDENTIFIED BY "coffee" WITH GRANT OPTION
  ON子句中的*.*意味著“所有資料庫、所有表”。從安全考慮,我們指定ethel只能從本地連線。限制一個超級使用者可以連線的主機通常是明智的,因為它限制了試圖破解口令的主機。
   有些許可權(FILE、PROCESS、RELOAD和SHUTDOWN)是管理許可權並且只能用"ON *.*"全域性許可權指定符授權。如果你願意,你可以授權這些許可權,而不授權資料庫許可權。例如,下列語句設定一個flush使用者,他只能發出flush語句。 這可能在你需要執行諸如清空日誌等的管理指令碼中會有用:
  GRANT RELOAD ON *.* TO [email protected] IDENTIFIED BY "flushpass" 
  一般地,你想授權管理許可權,吝嗇點,因為擁有它們的使用者可以影響你的伺服器的操作。
資料庫級許可權適用於一個特定資料庫中的所有表,它們可通過使用ON db_name.*子句授予:
  GRANT ALL ON samp_db TO [email protected] INDETIFIED BY "rock" GRANT Select ON samp_db TO [email protected]% INDETIFIED BY "rock" 
  第一條語句向bill授權samp_db資料庫中所有表的許可權,第二條建立一個嚴格限制訪問的使用者ro_user(只讀使用者),只能訪問samp_db資料
庫中的所有表,但只有讀取,即使用者只能發出Select語句。
  你可以列出一系列同時授予的各個許可權。例如,如果你想讓使用者能讀取並能修改現有資料庫的內容,但不能建立新表或刪除表,如下授予這些許可權:
 GRANT Select,Insert,Delete,Update ON samp_db TO [email protected] INDETIFIED BY "rock"
  對於更精緻的訪問控制,你可以在各個表上授權,或甚至在表的每個列上。當你想向用戶隱藏一個表的部分時,或你想讓一個使用者只能修改特定的列時,列特定許可權非常有用。如:
  GRANT Select ON samp_db.member TO [email protected] INDETIFIED BY "rock"
  GRANT Update (expiration) ON samp_db. member TO [email protected] 
  第一條語句授予對整個member表的讀許可權並設定了一個口令,第二條語句增加了Update許可權,當只對expiration列。沒必要再指定口令,因
為第一條語句已經指定了。 
  如果你想對多個列授予許可權,指定一個用逗號分開的列表。例如,對assistant使用者增加member表的地址欄位的Update許可權,使用如下語句
,新許可權將加到使用者已有的許可權中:
  GRANT Update (street,city,state,zip) ON samp_db TO [email protected] 
1.3 使用者應該被允許管理許可權嗎?
   你可以允許一個數據庫的擁有者通過授予資料庫上的所有擁有者許可權來控制資料庫的訪問,在授權時,指定WITH GRANT OPTION。例如:如
果你想讓alicia能從big.corp.com域的任何主機連線並具有sales資料庫中所有表的管理員許可權,你可以用如下 GRANT語句: 

  GRANT ALL ON sales.* TO [email protected]%.big.corp.com INDETIFIED BY "applejuice" WITH GRANT OPTION 
   在效果上WITH GRANT OPTION子句允許你把訪問授權的權利授予另一個使用者。要注意,擁有GRANT許可權的兩個使用者可以彼此授權。如果你只給予了第一個使用者Select權 限,而另一個使用者有GRANT加上Select許可權,那麼第二個使用者可以是第一個使用者更“強大”。 


2 撤權並刪除使用者 
  要取消一個使用者的許可權,使用REVOKE語句。REVOKE的語法非常類似於GRANT語句,除了TO用FROM取代並且沒有INDETIFED BY和WITH GRANT 
OPTION子句:
  REVOKE privileges (columns) ON what FROM user 
  user部分必須匹配原來GRANT語句的你想撤權的使用者的user部分。privileges部分不需匹配,你可以用GRANT語句授權,然後用REVOKE語句只撤銷部分許可權。 
  REVOKE語句只刪除許可權,而不刪除使用者。即使你撤銷了所有許可權,在user表中的使用者記錄依然保留,這意味著使用者仍然可以連線伺服器。要完全刪除一個使用者,你必須用一條Delete語句明確從user表中刪除使用者記錄: 
%mysql -u root mysql

mysql>Delete FROM user Where User="user_name" and Host="host_name";

mysql>FLUSH PRIVILEGES;
  Delete語句刪除使用者記錄,而FLUSH語句告訴伺服器過載授權表。(當你使用GRANT和REVOKE語句時,表自動過載,而你直接修改授權表時不是。)

相關推薦

遇到問題---mysql賬戶密碼以及許可權的問題 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor 這種型別的提示是帳號密碼不對或者帳號不存在的現象。 我們先來梳理一下mysql的賬戶密碼思路  mysql安裝完後 ro

MySQL修改密碼後無法進入問題ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor)

MySQL之前無密碼,使用 UPDATE mysql.user SET authentication_string=’xxxx’ WHERE user=’root’ and host=’localhost’; 修改增加密碼後登入一直報錯, root以

重置密碼解決MySQL for Linux錯誤 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor

一般這個錯誤是由密碼錯誤引起,解決的辦法自然就是重置密碼。 假設我們使用的是root賬戶。 1.重置密碼的第一步就是跳過MySQL的密碼認證過程,方法如下: #vim /etc/my.cnf(注:windows下修改的是my.ini) 在文件內搜尋mysqld定

解決MySQL登入ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor)問題

問題描述 今天在MAC上安裝完MYSQL後,MYSQL預設給分配了一個預設密碼,但當自己在終端上使用預設密碼登入的時候,總會提示一個授權失敗的錯誤:Access denied for user ‘root’@’localhost’ (using passwor)如圖

MYSQL重置密碼 MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password:YES)

一般這個錯誤是由密碼錯誤引起,解決的辦法自然就是重置密碼。 假設我們使用的是root賬戶。 1.重置密碼的第一步就是跳過MySQL的密碼認證過程,方法如下: #vim /etc/my.cnf(注:windows下修改的是my.ini) 在文件內搜尋mysqld定位

MySQL 8.0.13 密碼問題 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

先開一個cmd視窗A: //開啟MySQL C:\WINDOWS\system32>net start mysql MySQL 服務正在啟動 ... MySQL 服務已經啟動成功。 //登陸報錯 C:\WINDOWS\system32>mysql

MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)的真正原因

[[email protected] tmp]# rpm -ivh MySQL-server-advanced-5.6.20-1.rhel5.x86_64.rpmPreparing...                #########################################

Linux mysql 5.6: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

tail -200 /var/lib/mysql/DB-Server.err | more2014-07-22 14:59:41 9346 [Note] Shutting down plugin 'binlog'2014-07-22 14:59:41 9346 [Note] /usr/sbin/mysqld:

MySQL登入 ERROR 1045 (28000) Access denied for user 'root'@'localhost' (using password NO)問題

一、問題今天在CentOS安裝了mysql,由於mysql剛剛安裝完的時候,mysql的root使用者的密碼預設是空的,所以我使用命令mysql -uroot或mysql登入mysql,但是出現瞭如下錯誤:ERROR 1045(28000): Access denied fo

MySQL 報錯 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 的解決辦法

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 這次申請的 CentOS 6。7 虛擬機器映象 自帶了 MySQL ,然而進入這個虛擬機器

Linux錯誤 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES) 翻譯: 錯誤1045(28000):對使用者“root”@本地主機拒絕訪問(使用密碼:是) 一

centos7 上安裝mysql5.7後登入報錯ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using pas

安裝完mysql後會有個臨時密碼去日誌檢視,但是檢視登入修改密後還是不行 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password:yes) 於是 1,停止mysql服務 sy

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)問題的解決辦法

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)該故障碼的意思是拒絕訪問資料庫。 一般出現該故障碼是由於資料庫的賬號或密碼被更改過所致。解決的辦法是更改資

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

http://blog.csdn.net/qq160816/article/details/7722680 錯誤描述: Mysql中新增使用者之後可能出現登入時提示ERROR 1045 (28000): Access denied for user的錯誤.刪除user

Ubuntu server裡登入mySql時報錯:Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'的纖細解決方案

問題如下: 輸入正確密碼後,卻出現錯誤 首先我們用vi編輯器進入mysql的配置檔案mysqld.cnf 我們在檔案裡內容找到mysqld這一目錄,在其目錄下新增一行skip-grant-tables 隨後按esc鍵輸入:wq儲存退出 退出後

mysql】linux用yum安裝mysql後,登陸root使用者提示ERROR 1045 (28000): Access denied for user 'root'@'localhost' (..

系統是CentOS 6.8 yum -y install mysql mysql-server mysql-devel 安裝完之後 [root@iZwz9gjh3pbz2k2hin7cg8Z ~]# mysql -uroot -p 報

mysql連線問題 ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using pas

剛使用mysql,遇到如下問題: C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (usi

登入mysql資料庫出現 : ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO) ER

登入mysql資料庫的時候出現 : ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost'(using password: NO) ERROR 1045 (28000): Access denied for

windows系統下mysql出現Error 1045(28000) Access Denied for user 'root'@'localhost'

在windows作業系統安裝mysql資料庫,碰到Error 1045(28000) Access Denied for user 'root'@'localhost' 錯誤時,需要重新設定密碼。 具體方法是: 1.先在安裝目錄找到my.ini配置檔案,開啟配置檔案,找到[mysqld]一行,在下面新增

MySQL的啟動問題 (ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO))

2011-03-18 wcdj 解決方法如下 : (1) 開啟mysql的服務,因為我當時安裝選擇的手動啟動。 (2) 將mysql安裝的bin目錄新增到系統PATH環境變數裡,用;(分號)分割。 (