MySQL之賬戶管理
賬戶管理是MySQL用戶管理最基本的內容。包括登錄,退出MySQL服務器、創建用戶、刪除用戶、密碼管理和權限管理等內容。
1、新建普通用戶
在MySQL數據庫中,建立用戶有3種方式:
- 使用create user語句來創建新的用戶;
- 直接在mysql.user表中insert 用戶;
- 使用grant 語句來新建用戶;
(1)、方式一:create user
使用CREATE USER語句創建用戶,必須要擁有CREATE USER權限。其格式如下:
CREATE USER user[IDENTIFIED BY [PASSWORD] 'password'],
[user[IDENTIFIED BY [PASSWORD] 'password']]...
其中,user參數表示新建用戶的賬戶,user由用戶名(User)和主機名(Host)構成;IDENTIFIED BY關鍵字用來設置用戶的密碼;password參數表示用戶的密碼;如果密碼是一個普通的字符串,就不需要使用PASSWORD關鍵字。可以沒有初始密碼。
示例:
CREATE USER 'admin'@'%' IDENTIFIED BY 'admin'
執行之后user表會增加一行記錄,但權限暫時全部為'N'。
(2)、方式二:用INSERT語句新建普通用戶
可以使用INSERT語句直接將用戶的信息添加到mysql.user表。但必須擁有mysql.user表的INSERT權限。
另外,ssl_cipher、x509_issuer、x509_subject沒有值,必須要設置值,否則INSERT語句無法執行。
示例:
INSERT INTO mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) VALUES('%','newuser1',PASSWORD('123456'),'','','')
執行INSERT之后,需要使用一下命令來刷新權限:
FLUSH PRIVILEGES
命令來使用戶生效。
(3)、用GRANT語句來新建普通用戶
用GRANT來創建新的用戶時,能夠在創建用戶時為用戶授權。但需要擁有GRANT權限。
語法如下:
GRANT priv_type ON database.table
TO user[IDENTIFIED BY [PASSWORD] 'password']
[,user [IDENTIFIED BY [PASSWORD] 'password']...]
- priv_type:參數表示新yoghurt的權限;
- databse.table:參數表示新用戶的權限范圍;
- user:參數新用戶的賬戶,由用戶名和主機構成;
- IDENTIFIED BY關鍵字用來設置密碼;
- password:新用戶密碼;
GRANT語句可以同時創建多個用戶。
GRANT SELECT ON *.* TO netUser@'%'
*.*與db.*的區別在於。*.*對所有數據庫生效,所以user表的SELECT會變為Y。而db.*user表為'N',更改的是Db表。
2、刪除普通用戶
(1)、DROP USER語句刪除普通用戶
需要擁有DROP USER權限。語法如下:
DROP USER user[,user]...
user是需要刪除的用戶,由用戶名(User)和主機名(Host)構成。
DROP USER 'newuser1'@'%'
(2)、DELETE語句刪除普通用戶
可以使用DELETE語句直接將用戶的信息從mysql.user表中刪除。但必須擁有對mysql.user表的DELETE權限。
DELETE FROM mysql.user WHERE Host = '%' AND User = 'admin'
刪除完成后,一樣要FLUSH PRIVILEGES才生效。
3、修改密碼
(1)、使用mysqladmin命令來修改root用戶的密碼
語法:
mysqladmin -u -username -p password "new_password"
新密碼(new_password)必須用括號括起來,單引號會報錯。
示例:
(注:這個待驗證,我怎么執行都不成功!)
(2)、修改user表
UPDATE user表的passwor字段的值,也可以達到修改密碼的目的;
UPDATE user SET Password = PASSWORD('123') WHERE USER = 'myuser'
FLUSH PRIVILEGES后生效。
(3)、使用SET語句來修改密碼
使用root用戶登錄到MySQL服務器后,可以使用SET語句來修改密碼:
修改自己的密碼,不需要用戶名
SET PASSWORD = PASSWORD("123");
修改其他用戶密碼:
SET PASSWORD FOR 'myuser'@'%'=PASSWORD("123456")
FOR 用戶名@主機名
(4)、GRANT語句來修改普通用戶的密碼
使用GRANT語句修改普通用戶的密碼,必須擁有GRANT權限。
GRANT priv_type ON database.table TO user [IDENTIFIED BY [PASSWORD] 'password']
示例:
GRANT SELECT ON *.* TO 'test3'@'%' IDENTIFIED BY '123'
4、忘記密碼的解決方案
如果root用戶密碼丟失了,會給用戶造成很大的麻煩。但是,可以通過某種特殊方法登錄到root用戶下,然后修改密碼。
(1)、使用--skip-grant-tables選項啟動MySQL服務
該選項將使MySQL服務器停止權限判斷,任何用戶都能夠訪問數據庫。
在Windows操作系統下,使用mysqlid或mysqlid-nt來啟動MySQL服務。
mysqld命令:
mysqld --skip-grant-tables
mysqld-nt命令:
mysqld-nt --skip-grant-tables
net start mysql命令:
net start mysql --skip-grant-tables
(2)、登錄root用戶,並且設置新密碼
mysql -u root
必須使用UPDATE語句更新mysql數據庫下的user表,而不能使用SET語句,因為--skip-grant-tables不能使用SET語句。
修改完密碼以后,FLUSH PRIVILEGES語句加載權限表,新密碼即生效。
