MySQL 密碼設(shè)置
更新時(shí)間:2009年04月15日 19:56:10 作者:
本文介紹了如何修改一個(gè)用戶的密碼,你可以使用三種方法,GRANT語(yǔ)句、SET PASSWORD語(yǔ)句、直接修改授權(quán)表以及使用管理工具mysqladmin。
一個(gè)重要的應(yīng)用就是如何在遺忘root用戶密碼的時(shí)候修改密碼,使用的方法是啟動(dòng)MySQL服務(wù)器時(shí)忽略加載授權(quán)表。
由MySQL使用用戶名和口令的方法與Unix或Windows使用的方式有很多不同之處:
·MySQL 使用于認(rèn)證目的的用戶名,與Unix用戶名(登錄名字)或Windows用戶名無(wú)關(guān)。缺省地,大多數(shù)MySQL客戶嘗試使用當(dāng)前 Unix用戶名作為MySQL用戶名登錄,但是這僅僅為了方便??蛻舫绦蛟试S用-u或--user選項(xiàng)指定一個(gè)不同的名字,這意味著無(wú)論如何你不能使得一個(gè)數(shù)據(jù)庫(kù)更安全,除非所有的MySQL用戶名都有口令。任何人可以試圖用任何名字連接服務(wù)器,而且如果他們指定了沒(méi)有口令的任何名字,他們將成功。
·MySQL用戶名最長(zhǎng)可以是16各字符;典型地,Unix用戶名限制為8個(gè)字符。
·MySQL口令與Unix口令沒(méi)關(guān)系。在你使用登錄到一臺(tái)Unix機(jī)器口令和你使用在那臺(tái)機(jī)器上存取一個(gè)數(shù)據(jù)庫(kù)的口令之間沒(méi)有必要有關(guān)聯(lián)。
·MySQL加密口令使用了一個(gè)Unix登錄期間所用的不同算法。
本節(jié)將介紹如何為MySQL數(shù)據(jù)庫(kù)系統(tǒng)的用戶修改密碼。
使用myadmin實(shí)用程序
使用mysqladmin實(shí)用程序修改密碼的命令行是:
shell>mysqladmin -u user -p password "newpassword"
運(yùn)行這個(gè)命令,在提示輸入密碼時(shí),數(shù)據(jù)就密碼,則用戶user的密碼就被改為newpassword
。如果,原來(lái)的用戶沒(méi)有密碼,則不比指定-p選項(xiàng)。例如,初始化授權(quán)表之后,root用戶的密碼就是空的,你可以這樣為root用戶設(shè)立密碼:
shell>mysqladmin -u root password "newpassword"
使用語(yǔ)句SET PASSWORD
使用mysqladmin為用戶修改密碼有一個(gè)明顯的缺點(diǎn),就是必須知道用戶原來(lái)的密碼,如果是為了給遺忘了密碼的用戶重設(shè)密碼就無(wú)能為力了。一個(gè)專(zhuān)門(mén)用于修改密碼的SQL語(yǔ)句為SET PASSWORD:
·SET PASSWORD = PASSWORD('some password')
設(shè)置當(dāng)前用戶的口令。任何非匿名的用戶能改變他自己的口令!
連接到服務(wù)器后,你可以這樣改變自己的密碼:
mysql> SET PASSWORD = PASSWORD('another pass');
·SET PASSWORD FOR user = PASSWORD('some password')
設(shè)置當(dāng)前服務(wù)器主機(jī)上的一個(gè)特定用戶的口令。只有具備存取mysql數(shù)據(jù)庫(kù)的用戶可以這樣做。用戶應(yīng)該以u(píng)ser@hostname格式給出,這里 user和hostname完全與他們列在mysql.user表?xiàng)l目的User和Host列一樣。例如,如果你有一個(gè)條目其User和Host字段是 'bob'和'%.loc.gov',你將寫(xiě)成:
mysql> SET PASSWORD FOR bob@"%.loc.gov" = PASSWORD("newpass");
直接修改授權(quán)表
另一種修改,密碼的方法是直接修改授權(quán)表user。只有具備存取mysql數(shù)據(jù)庫(kù)的用戶可以這樣做。
例如,如果你有一個(gè)條目其User和Host字段是'bob'和'%.loc.gov',你將寫(xiě)成:
mysql> UPDATE mysql.user SET password=PASSWORD("newpass") where user="bob' AND host="%.loc.gov";
mysql>FLUSH PRIVILEGES;
重新設(shè)置一個(gè)遺忘的root口令
如果你遺忘了root用戶的口令,那么將會(huì)是一件非常麻煩的事。除非你有其它有特權(quán)的用戶,否則很多操作都無(wú)法完成,例如,關(guān)閉數(shù)據(jù)庫(kù)等等。
你應(yīng)當(dāng)選用--without-grant-tables選項(xiàng)啟動(dòng)mysqld服務(wù),你可以在這時(shí)更改授權(quán)表的相關(guān)內(nèi)容,也可以用mysqlaccess檢查你的授權(quán)是否到位。
例如,如果你忘記了你的MYSQL的root口令的話,你可以通過(guò)下面的過(guò)程恢復(fù)。
1、關(guān)閉MySQL服務(wù)器
向mysqld server 發(fā)送kill命令關(guān)掉mysqld server(不是 kill -9),存放進(jìn)程ID的文件通常在MYSQL的數(shù)據(jù)庫(kù)所在的目錄中。
kill `cat /mysql-data-directory/hostname.pid`
你必須是UNIX的root用戶或者是你所運(yùn)行的SERVER上的同等用戶,才能執(zhí)行這個(gè)操作。
如果在windows平臺(tái)上,也可以停止進(jìn)程。如果是NT還可以用net stop mysql命令關(guān)閉數(shù)據(jù)庫(kù)。
2、使用'--skip-grant-tables' 參數(shù)來(lái)啟動(dòng) mysqld。
Unix平臺(tái):
$su mysql
$safe_mysqld --skip-grant-tables &
Windows平臺(tái):
C:\mysql\bin>mysqld --skip-grant-tables
以上語(yǔ)句,假定都位于正確的目錄。
3、連接到服務(wù)器,修改口令
使用'mysql -h hostname mysql'命令登錄到mysqld server ,用grant命令改變口令:
mysql>GRANT ALL ON *.* TO root@localhost INDENTIFIED BY 'new password'
-> WITH GRANT OPTION;
mysql>GRANT ALL ON *.* TO root@% INDENTIFIED BY 'new password'
-> WITH GRANT OPTION;
(如果存在一個(gè)能從任意地址登錄的root用戶,初始化授權(quán)表后,生成該用戶,為了安全,你可能已經(jīng)刪除該用戶)。
其實(shí)也可以直接修改授權(quán)表:
mysql> use mysql;
mysql> update user set password =password('yourpass') where user='root';
你可能使用工具mysqladmin修改密碼:
shell> mysqladmin -h hostname -u root password 'new password
但是它修改的密碼語(yǔ)服務(wù)器匹配的用戶有關(guān)。如果,你從服務(wù)器主機(jī)連接,那么服務(wù)器匹配的是root@localhost,修改該用戶密碼,否則一般修改root@%密碼,除非你有其它root用戶存在。
4. 載入權(quán)限表:
shell> mysqladmin -h hostname flush-privileges
或者使用 SQL 命令`FLUSH PRIVILEGES'。
當(dāng)然,在這里,你也可以重啟mysqld。
由MySQL使用用戶名和口令的方法與Unix或Windows使用的方式有很多不同之處:
·MySQL 使用于認(rèn)證目的的用戶名,與Unix用戶名(登錄名字)或Windows用戶名無(wú)關(guān)。缺省地,大多數(shù)MySQL客戶嘗試使用當(dāng)前 Unix用戶名作為MySQL用戶名登錄,但是這僅僅為了方便??蛻舫绦蛟试S用-u或--user選項(xiàng)指定一個(gè)不同的名字,這意味著無(wú)論如何你不能使得一個(gè)數(shù)據(jù)庫(kù)更安全,除非所有的MySQL用戶名都有口令。任何人可以試圖用任何名字連接服務(wù)器,而且如果他們指定了沒(méi)有口令的任何名字,他們將成功。
·MySQL用戶名最長(zhǎng)可以是16各字符;典型地,Unix用戶名限制為8個(gè)字符。
·MySQL口令與Unix口令沒(méi)關(guān)系。在你使用登錄到一臺(tái)Unix機(jī)器口令和你使用在那臺(tái)機(jī)器上存取一個(gè)數(shù)據(jù)庫(kù)的口令之間沒(méi)有必要有關(guān)聯(lián)。
·MySQL加密口令使用了一個(gè)Unix登錄期間所用的不同算法。
本節(jié)將介紹如何為MySQL數(shù)據(jù)庫(kù)系統(tǒng)的用戶修改密碼。
使用myadmin實(shí)用程序
使用mysqladmin實(shí)用程序修改密碼的命令行是:
shell>mysqladmin -u user -p password "newpassword"
運(yùn)行這個(gè)命令,在提示輸入密碼時(shí),數(shù)據(jù)就密碼,則用戶user的密碼就被改為newpassword
。如果,原來(lái)的用戶沒(méi)有密碼,則不比指定-p選項(xiàng)。例如,初始化授權(quán)表之后,root用戶的密碼就是空的,你可以這樣為root用戶設(shè)立密碼:
shell>mysqladmin -u root password "newpassword"
使用語(yǔ)句SET PASSWORD
使用mysqladmin為用戶修改密碼有一個(gè)明顯的缺點(diǎn),就是必須知道用戶原來(lái)的密碼,如果是為了給遺忘了密碼的用戶重設(shè)密碼就無(wú)能為力了。一個(gè)專(zhuān)門(mén)用于修改密碼的SQL語(yǔ)句為SET PASSWORD:
·SET PASSWORD = PASSWORD('some password')
設(shè)置當(dāng)前用戶的口令。任何非匿名的用戶能改變他自己的口令!
連接到服務(wù)器后,你可以這樣改變自己的密碼:
復(fù)制代碼 代碼如下:
mysql> SET PASSWORD = PASSWORD('another pass');
·SET PASSWORD FOR user = PASSWORD('some password')
設(shè)置當(dāng)前服務(wù)器主機(jī)上的一個(gè)特定用戶的口令。只有具備存取mysql數(shù)據(jù)庫(kù)的用戶可以這樣做。用戶應(yīng)該以u(píng)ser@hostname格式給出,這里 user和hostname完全與他們列在mysql.user表?xiàng)l目的User和Host列一樣。例如,如果你有一個(gè)條目其User和Host字段是 'bob'和'%.loc.gov',你將寫(xiě)成:
mysql> SET PASSWORD FOR bob@"%.loc.gov" = PASSWORD("newpass");
直接修改授權(quán)表
另一種修改,密碼的方法是直接修改授權(quán)表user。只有具備存取mysql數(shù)據(jù)庫(kù)的用戶可以這樣做。
例如,如果你有一個(gè)條目其User和Host字段是'bob'和'%.loc.gov',你將寫(xiě)成:
mysql> UPDATE mysql.user SET password=PASSWORD("newpass") where user="bob' AND host="%.loc.gov";
mysql>FLUSH PRIVILEGES;
重新設(shè)置一個(gè)遺忘的root口令
如果你遺忘了root用戶的口令,那么將會(huì)是一件非常麻煩的事。除非你有其它有特權(quán)的用戶,否則很多操作都無(wú)法完成,例如,關(guān)閉數(shù)據(jù)庫(kù)等等。
你應(yīng)當(dāng)選用--without-grant-tables選項(xiàng)啟動(dòng)mysqld服務(wù),你可以在這時(shí)更改授權(quán)表的相關(guān)內(nèi)容,也可以用mysqlaccess檢查你的授權(quán)是否到位。
例如,如果你忘記了你的MYSQL的root口令的話,你可以通過(guò)下面的過(guò)程恢復(fù)。
1、關(guān)閉MySQL服務(wù)器
向mysqld server 發(fā)送kill命令關(guān)掉mysqld server(不是 kill -9),存放進(jìn)程ID的文件通常在MYSQL的數(shù)據(jù)庫(kù)所在的目錄中。
kill `cat /mysql-data-directory/hostname.pid`
你必須是UNIX的root用戶或者是你所運(yùn)行的SERVER上的同等用戶,才能執(zhí)行這個(gè)操作。
如果在windows平臺(tái)上,也可以停止進(jìn)程。如果是NT還可以用net stop mysql命令關(guān)閉數(shù)據(jù)庫(kù)。
2、使用'--skip-grant-tables' 參數(shù)來(lái)啟動(dòng) mysqld。
Unix平臺(tái):
$su mysql
$safe_mysqld --skip-grant-tables &
Windows平臺(tái):
C:\mysql\bin>mysqld --skip-grant-tables
以上語(yǔ)句,假定都位于正確的目錄。
3、連接到服務(wù)器,修改口令
使用'mysql -h hostname mysql'命令登錄到mysqld server ,用grant命令改變口令:
mysql>GRANT ALL ON *.* TO root@localhost INDENTIFIED BY 'new password'
-> WITH GRANT OPTION;
mysql>GRANT ALL ON *.* TO root@% INDENTIFIED BY 'new password'
-> WITH GRANT OPTION;
(如果存在一個(gè)能從任意地址登錄的root用戶,初始化授權(quán)表后,生成該用戶,為了安全,你可能已經(jīng)刪除該用戶)。
其實(shí)也可以直接修改授權(quán)表:
mysql> use mysql;
mysql> update user set password =password('yourpass') where user='root';
你可能使用工具mysqladmin修改密碼:
shell> mysqladmin -h hostname -u root password 'new password
但是它修改的密碼語(yǔ)服務(wù)器匹配的用戶有關(guān)。如果,你從服務(wù)器主機(jī)連接,那么服務(wù)器匹配的是root@localhost,修改該用戶密碼,否則一般修改root@%密碼,除非你有其它root用戶存在。
4. 載入權(quán)限表:
shell> mysqladmin -h hostname flush-privileges
或者使用 SQL 命令`FLUSH PRIVILEGES'。
當(dāng)然,在這里,你也可以重啟mysqld。
相關(guān)文章
MySql 8.0.11-Winxp64(免安裝版)配置教程
這篇文章主要介紹了MySql 8.0.11-Winxp64(免安裝版)配置教程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2018-05-05
SQL使用聚集函數(shù)實(shí)現(xiàn)對(duì)數(shù)據(jù)匯總
這篇文章主要介紹了SQL使用聚集函數(shù)實(shí)現(xiàn)對(duì)數(shù)據(jù)匯總,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
MySQL的InnoDB擴(kuò)容及ibdata1文件瘦身方案完全解析
在使用InnoDB存儲(chǔ)引擎后,MySQL的ibdata1文件常常會(huì)占據(jù)大量存儲(chǔ)空間,這里我們就為大家?guī)?lái)MySQL的InnoDB擴(kuò)容及ibdata1文件瘦身方案完全解析:2016-06-06
MySQL的執(zhí)行原理之 MySQL的查詢重寫(xiě)規(guī)則詳解
MySQL 性能調(diào)優(yōu)是一個(gè)復(fù)雜且多維度的過(guò)程,下面從數(shù)據(jù)庫(kù)設(shè)計(jì)、查詢優(yōu)化、配置參數(shù)調(diào)整、硬件優(yōu)化幾個(gè)方面為你介紹相關(guān)的調(diào)優(yōu)方法,本文給大家介紹MySQL的執(zhí)行原理之 MySQL的查詢重寫(xiě)規(guī)則,感興趣的朋友一起看看吧2025-04-04
mysql 8.0.15 安裝配置方法圖文教程(Windows10 X64)
這篇文章主要為大家詳細(xì)介紹了Windows10 X64 mysql 8.0.15 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03
查看 MySQL 已經(jīng)運(yùn)行多長(zhǎng)時(shí)間的方法
查看MySQL啟動(dòng)時(shí)間以及運(yùn)行了多長(zhǎng)時(shí)間的方法有利用show與updtime或在linux中直接使用grep mysql 相關(guān)參數(shù)來(lái)查看,下面我們一起來(lái)看看2014-01-01

