用户管理
MySQL在安装时,会默认创建一个名为root的用户,该用户拥有超级权限,可以控制整个MySQL服务器。
在对MySQL的日常管理和操作中,为了避免有人恶意使用root用户控制数据库,我们通常创建一些具有适当权限的用户,尽可能地不用或少用root用户登录系统,以此来确保数据的安全访问。
* MySQL提供了以下3种方法创建用户:
1)使用CREATE USER语句创建用户
2)在mysql.user表中添加用户
3)使用GRANT语句创建用户
创建用户(3种方式)
1.使用CREATE USER 语句创建用户
使用CREATE USER语句来创建MySQL用户,并设置相应的密码。
语法格式: CREATE USER <用户> [IDENTIFIED BY [PASSWORD] 'password'] [用户 [IDENTIFIED BY [PASSWORD] 'password']]
* 语法说明:
1) 用户
指定创建用户账号,格式为user_name'@'host_name。这里的user_name是用户名,host_name为主机名,即用户连接MySQL时所用主机的名字。
如果在创建的过程中,只给出了用户名,而没指定主机名,那么主机名默认为“%”,表示一组主机,即对所有主机开放权限。
3) IDENTIFIED BY子句
用于指定用户密码。新用户可以没有初始密码,若该用户不设密码,可省略此子句。
2) PASSWORD 'password'
PASSWORD表示使用哈希值设置密码,该参数可选。
如果密码是一个普通的字符串,则不需要使用 PASSWORD 关键字。'password' 表示用户登录时使用的密码,需要用单引号括起来。
使用CREATE USER语句时应注意以下几点:
1)CREATE USER语句可以不指定初始密码。但是从安全的角度来说,不推荐这种做法。
2)使用CREATE USER语句必须拥有mysql 数据库的INSERT权限或全局CREATE USER权限。
3)使用CREATE USER语句创建一个用户后,MySQL会在mysql数据库的user表中添加一条新记录。
4)CREATE USER 语句可以同时创建多个用户,多个用户用逗号隔开。
新创建的用户拥有的权限很少,它们只能执行不需要权限的操作。如登录MySQL、使用SHOW语句查询所有存储引擎和字符集的列表等。如果两个用户的用户名相同,但主机名不同,MySQL会将它们视为两个用户,并允许为这两个用户分配不同的权限集合。
# 使用CREATE USER创建一个用户,用户名是chd,密码是chd,主机名是localhost
MySQL [mysql_chuid]> CREATE USER 'chd'@'localhost' IDENTIFIED BY 'chd';
Query OK, 0 rows affected (0.45 sec)
# 使用CREATE USER创建一个用户,用户名是chen,密码是123456,主机名是localhost
MySQL [mysql_chuid]> CREATE USER 'chen'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)* 在实际应用中,我们应避免明文指定密码,可以通过PASSWORD关键字使用密码的哈希值设置密码。
# 使用password()函数获取密码的哈希值
MySQL [mysql_chuid]> SELECT password('chd');
+-------------------------------------------+
| password('chd') |
+-------------------------------------------+
| *D71BC5CBA4635EFE6B79B1B94CEF2A0FEF9C839B |
+-------------------------------------------+
1 row in set (0.00 sec)
# 使用密码chd的哈希值创建用户chd
MySQL [mysql_chuid]> CREATE USER 'chd'@'localhost' IDENTIFIED BY PASSWORD'*D71BC5CBA4635EFE6B79B1B94CEF2A0FEF9C839B';
Query OK, 0 rows affected (0.01 sec)
2.使用INSERT语句新建用户
可以使用INSERT语句将用户的信息添加到mysql.user表中,但必须拥有对mysql.user表的INSERT权限。
通常INSERT语句只添加Host、User和authentication_string这3个字段的值。
# MySQL 5.7的user表中的密码字段从Password变成了authentication_string,如果你使用的是MySQL 5.7之前的版本,将authentication_string字段替换成Password即可。
使用INSERT语句创建用户语法格式:INSERT INTO mysql.user(Host, User, authentication_string, ssl_cipher, x509_issuer, x509_subject) VALUES ('hostname', 'username', PASSWORD('password'), '', '', '');
由于mysql数据库的user表中,ssl_cipher、x509_issuer和x509_subject这3个字段没有默认值,所以向user表插入新记录时,一定要设置这3个字段的值,否则INSERT语句将不能执行。
# 使用INSERT语句创建用户
MySQL [mysql_chuid]> INSERT INTO mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject)VALUES('localhost','chenhd',PASSWORD('chenhd'),'','','');
Query OK, 1 row affected (0.03 sec)
MySQL [mysql_chuid]> flush privileges; # 刷新系统权限相关表(执行FLUSH命令需要RELOAD权限)
Query OK, 0 rows affected (0.10 sec)
* user表中的User和Host字段区分大小写,创建用户时要指定正确的用户名称或主机名。
3.使用GRANT语句新建用户
CREATE USER和INSERT INTO语句都可以创建普通用户,但是这两种方式不便授予用户权限。于是MySQL提供了GRANT语句。
使用CREATE USER和INSERT INTO语句创建用户
语法格式:GRANT priv_type ON database.table TO user [IDENTIFIED BY [PASSWORD] 'password']
* 语法说明:
1)priv_type参数表示新用户的权限;
2)database.table参数表示新用户的权限范围,即只能在指定的数据库和表上使用自己的权限;
3)user 参数指定新用户的账号,由用户名和主机名构成;
4)IDENTIFIED BY关键字用来设置密码;
5)password参数表示新用户的密码。
# 使用GRANT语句创建chd1的用户,主机名为localhost,密码为123456
MySQL [mysql_chuid]> GRANT SELECT ON *.* TO 'chd1'@localhost IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.02 sec)
# 其中,“*.*”表示所有数据库下的所有表。结果显示创建用户成功,且chd1用户对所有表都有查询(SELECT)权限。
* GRANT语句是MySQL中一个非常重要的语句,它可以用来创建用户、修改用户密码和设置用户权限。教程后面会详细介绍如何使用GRANT语句修改密码、更改权限。
修改用户
使用RENAME USER语句修改一个或多个已经存在的用户账号。
语法格式:RENAME USER <旧用户> TO <新用户>
* 语法说明:
<旧用户>:系统中已经存在的MySQL用户账号。
<新用户>:新的MySQL用户账号。
* 使用RENAME USER语句时应注意以下几点:
1)RENAME USER语句用于对原有的MySQL用户进行重命名。
2)若系统中旧账户不存在或者新账户已存在,该语句执行时会出现错误。
3)使用RENAME USER语句,必须拥有mysql数据库的UPDATE权限或全局CREATE USER权限。
MySQL [mysql_chuid]> GRANT SELECT ON *.* TO 'chd1'@localhost IDENTIFIED BY '123456'; # 创建用户chd1
Query OK, 0 rows affected (0.37 sec)
# 使用RENAME USER语句将用户chd1修改为chd,主机是localhost
MySQL [mysql_chuid]> RENAME USER 'chd1'@'localhost' TO 'chd'@'localhost';
Query OK, 0 rows affected (0.17 sec)
# 在cmd命令行工具中,使用chd1用户登录数据库服务器
C:\Users\USER>mysql -h localhost -u chd1 -p
删除用户
在MySQL数据库中,可以使用DROP USER语句删除用户,也可以直接在mysql.user表中删除用户以及相关权限。
使用DROP USER语句删除普通用户
语法格式:DROP USER <用户1> [ , <用户2> ]...
其中,用户用来指定需要删除的用户账号。
* 使用DROP USER语句应注意以下几点:
1)DROP USER语句可用于删除一个或多个用户,并撤销其权限。
2)使用DROP USER语句必须拥有mysql数据库的DELETE权限或全局CREATE USER权限。
3)在DROP USER语句的使用中,若没有明确地给出账户的主机名,则该主机名默认为“%”。
* 用户的删除不会影响他们之前所创建的表、索引或其他数据库对象,因为MySQL并不会记录是谁创建了这些对象。
# 删除用户'chd'@'localhost
MySQL [mysql_chuid]> DROP USER 'chd'@'localhost';
Query OK, 0 rows affected (0.00 sec)
使用DELETE语句删除普通用户
语法格式:DELETE FROM mysql.user WHERE Host='hostname' AND User='username';
使用DELETE语句直接删除mysql.user表中相应的用户信息,但必须拥有mysql.user表的DELETE权限。
* Host和User这两个字段都是mysql.user表的主键。因此,需要两个字段的值才能确定一条记录。
# 使用DELETE语句删除用户'chd1'@'localhost'
MySQL [mysql_chuid]> DELETE FROM mysql.user WHERE Host='localhost' AND User='chd1';
Query OK, 0 rows affected (0.02 sec)
# 查看mysql.user表里面的chd1用户是否删除成功
MySQL [mysql_chuid]> select * from mysql.user;
查看用户权限
在MySQL中,可以通过查看mysql.user表中的数据记录来查看相应的用户权限,也可以使用SHOW GRANTS语句查询用户的权限。
MySQL数据库下的user表中存储着用户的基本权限,可以使用SELECT语句来查看。
SELECT语句的语法格式:SELECT * FROM mysql.user;
执行该语句,必须拥有对user表的查询权限。
* 新创建的用户只有登录MySQL服务器的权限,没有任何其它权限,不能查询user表。
使用SHOW GRANTS FOR语句查看权限。
语法格式:SHOW GRANTS FOR 'username'@'hostname';
* 其中,username表示用户名,hostname表示主机名或主机IP
# 创建用户chd1 ,并查询权限
MySQL [mysql_chuid]> CREATE USER 'chd1'@'localhost';
Query OK, 0 rows affected (0.00 sec)
MySQL [mysql_chuid]> SHOW GRANTS FOR 'chd1'@'localhost';
+------------------------------------------+
| Grants for chd1@localhost |
+------------------------------------------+
| GRANT USAGE ON *.* TO 'chd1'@'localhost' |
+------------------------------------------+
1 row in set (0.01 sec)
* 其中,USAGE ON *.*表示该用户对任何数据库和任何表都没有权限。
MySQL [mysql_chuid]> SHOW GRANTS FOR 'root'@'localhost'; # 查询root用户的权限
+----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost |
+----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+----------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
用户授权
授权就是为某个用户赋予某些权限。例如,可以为新建的用户赋予查询所有数据库和表的权限。MySQL提供了GRANT语句来为用户设置权限。
在MySQL中,拥有GRANT权限的用户才可以执行GRANT语句
语法格式:GRANT priv_type [(column_list)] ON database.table
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user[IDENTIFIED BY [PASSWORD] 'password']] ...
[WITH with_option [with_option]...]
* 语法说明:
1)priv_type参数表示权限类型;
2)columns_list参数表示权限作用于哪些列上,省略该参数时,表示作用于整个表;
3)database.table用于指定权限的级别;
4)user参数表示用户账户,由用户名和主机名构成,格式是“'username'@'hostname'”;
5)IDENTIFIED BY参数用来为用户设置密码;
6)password参数是用户的新密码。
* WITH 关键字后面带有一个或多个with_option参数。这个参数有5个选项,详细介绍如下:
1)GRANT OPTION:被授权的用户可以将这些权限赋予给别的用户;
2)MAX_QUERIES_PER_HOUR count:设置每个小时可以允许执行count次查询;
3)MAX_UPDATES_PER_HOUR count:设置每个小时可以允许执行count次更新;
4)MAX_CONNECTIONS_PER_HOUR count:设置每小时可以建立count个连接;
5)MAX_USER_CONNECTIONS count:设置单个用户可以同时具有的count个连接。
* MySQL中可以授予的权限有如下几组:
1)列权限,和表中的一个具体列相关。例如,可以使用UPDATE语句更新表students中name列的值的权限。
2)表权限,和一个具体表中的所有数据相关。例如,可以使用SELECT语句查询表students的所有数据的权限。
3)数据库权限,和一个具体的数据库中的所有表相关。例如,可以在已有的数据库mytest中创建新表的权限。
4)用户权限,和MySQL中所有的数据库相关。例如,可以删除已有的数据库或者创建一个新的数据库的权限。
* 对应的,在GRANT 语句中可用于指定权限级别的值有以下几类格式:
1)*:表示当前数据库中的所有表。
2)*.*:表示所有数据库中的所有表。
3)db_name.*:表示某个数据库中的所有表,db_name指定数据库名。
4)db_name.tbl_name:表示某个数据库中的某个表或视图,db_name指定数据库名,tbl_name指定表名或视图名。
5)db_name.routine_name:表示某个数据库中的某个存储过程或函数,routine_name指定存储过程名或函数名。
6)TO 子句:如果权限被授予给一个不存在的用户,MySQL 会自动执行一条CREATE USER语句来创建这个用户,但同时必须为该用户设置密码。
权限类型说明
1.授予数据库权限时,<权限类型>可以指定为以下值:
权限说明 | 对应user表中的字段 | 说明 |
SELECT | Select_priv | 表示授予用户可以使用SELECT语句访问特定数据库中所有表和视图的权限。 |
INSERT | Insert_priv | 表示授予用户可以使用INSERT语句向特定数据库中所有表添加数据行的权限。 |
DELETE | Delete_priv | 表示授予用户可以使用DELETE语句删除特定数据库中所有表的数据行的权限。 |
UPDATE | Update_priv | 表示授予用户可以使用UPDATE语句更新特定数据库中所有数据表的值的权限。 |
REFERENCES | References_priv | 表示授予用户可以创建指向特定的数据库中的表外键的权限。 |
CREATE | Create_priv | 表示授权用户可以使用CREATE TABLE语句在特定数据库中创建新表的权限。 |
ALTER | Alter_priv | 表示授予用户可以使用ALTER TABLE语句修改特定数据库中所有数据表的权限。 |
SHOW VIEW | Show_view_priv | 表示授予用户可以查看特定数据库中已有视图的视图定义的权限。 |
CREATE ROUTINE | Create_routine_priv | 表示授予用户可以为特定的数据库创建存储过程和存储函数的权限。 |
ALTER ROUTINE | Alter_routine_priv | 表示授予用户可以更新和删除数据库中已有的存储过程和存储函数的权限。 |
INDEX | Index_priv | 表示授予用户可以在特定数据库中的所有数据表上定义和删除索引的权限。 |
DROP | Drop_priv | 表示授予用户可以删除特定数据库中所有表和视图的权限。 |
CREATE TEMPORARY TABLES | Create_tmp_table_priv | 表示授予用户可以在特定数据库中创建临时表的权限。 |
CREATE VIEW | Create_view_priv | 表示授予用户可以在特定数据库中创建新的视图的权限。 |
EXECUTE ROUTINE | Execute_priv | 表示授予用户可以调用特定数据库的存储过程和存储函数的权限。 |
LOCK TABLES | Lock_tables_priv | 表示授予用户可以锁定特定数据库的已有数据表的权限。 |
ALL或ALL PRIVILEGES或SUPER | Super_priv | 表示以上所有权限/超级权限。 |
2.授予表权限时,<权限类型>可以指定为以下值:
权限名称 | 对应user表中的字段 | 说明 |
SELECT | Select_priv | 授予用户可以使用 SELECT 语句进行访问特定表的权限 |
INSERT | Insert_priv | 授予用户可以使用 INSERT 语句向一个特定表中添加数据行的权限 |
DELETE | Delete_priv | 授予用户可以使用 DELETE 语句从一个特定表中删除数据行的权限 |
DROP | Drop_priv | 授予用户可以删除数据表的权限 |
UPDATE | Update_priv | 授予用户可以使用 UPDATE 语句更新特定数据表的权限 |
ALTER | Alter_priv | 授予用户可以使用 ALTER TABLE 语句修改数据表的权限 |
REFERENCES | References_priv | 授予用户可以创建一个外键来参照特定数据表的权限 |
CREATE | Create_priv | 授予用户可以使用特定的名字创建一个数据表的权限 |
INDEX | Index_priv | 授予用户可以在表上定义索引的权限 |
ALL或ALL PRIVILEGES或SUPER | Super_priv | 所有的权限名 |
3.授予列权限时,<权限类型>的值只能指定为SELECT、INSERT和UPDATE,同时权限的后面需要加上列名列表column-list。
4.最有效率的权限是用户权限。
授予用户权限时,<权限类型>除了可以指定为授予数据库权限时的所有值之外,还可以是下面这些值:
CREATE USER:表示授予用户可以创建和删除新用户的权限。
SHOW DATABASES:表示授予用户可以使用SHOW DATABASES语句查看所有已有的数据库的定义的权限。
# 使用GRANT语句创建一个新用户chuid,密码是123456,用户对所有的数据有查询、插入权限,并授予GRANT权限
MySQL [mysql_chuid]> GRANT SELECT,INSERT ON *.* TO 'chuid'@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;
Query OK, 0 rows affected (0.15 sec)
# 使用SHOW GRANTS语句查询用户chuid的权限(chuid对所有数据库的所有表有查询、插入权限,并可以将这些权限赋予给别的用户)
MySQL [mysql_chuid]> SHOW GRANTS FOR 'chuid'@'localhost';
+-----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for chuid@localhost |
+-----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT ON *.* TO 'chuid'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' WITH GRANT OPTION |
+-----------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
* 数据库管理员给普通用户授权时一定要特别小心,如果授权不当,可能会给数据库带来致命的破坏。一旦发现给用户的权限太多,应该尽快使用REVOKE语句将权限收回。此处特别注意,最好不要授予普通用户SUPER权限、GRANT权限。
删除用户权限
在MySQL中,可以使用REVOKE语句删除某个用户的某些权限(此用户不会被删除),在一定程度上可以保证系统的安全性。
例如,如果数据库管理员觉得某个用户不应该拥有DELETE权限,那么就可以删除DELETE权限。
使用 REVOKE 语句删除权限的语法格式有两种形式:
1)删除用户某些特定的权限
语法格式:REVOKE priv_type [(column_list)]... ON database.table FROM user [, user]...
* 语法说明:
REVOKE 语句中的参数与 GRANT 语句的参数意思相同。
* priv_type参数表示权限的类型;
* column_list参数表示权限作用于哪些列上,没有该参数时作用于整个表上;
* user参数由用户名和主机名构成,格式为“username'@'hostname'”。
2)删除特定用户的所有权限
语法格式:REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
* 删除用户权限语法说明:
* REVOKE语法和GRANT语句的语法格式相似,但具有相反的效果。
* 要使用REVOKE语句,必须拥有MySQL数据库的全局CREATE USER权限或UPDATE权限。
# 使用REVOKE语句取消用户chuid的插入权限
MySQL [mysql_chuid]> REVOKE INSERT ON *.* FROM 'chuid'@'localhost';
Query OK, 0 rows affected (0.16 sec)
# 删除chuid用户的INSERT权限成功
MySQL [mysql_chuid]> SHOW GRANTS FOR 'chuid'@'localhost';
+---------------------------------------------------------------------------------------------------------------------------------+
| Grants for chuid@localhost |
+---------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT ON *.* TO 'chuid'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' WITH GRANT OPTION |
+---------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
登陆和退出服务器
启动MySQL服务器后,登陆MySQL服务器
语法格式:mysql -h hostname|hostlP -p port -u username -p DatabaseName -e “SQL语句”
* 参数说明:
-h:指定连接MySQL服务器的地址。可以用两种方式表示,hostname为主机名,hostIP为主机IP地址。
-p:指定连接MySQL服务器的端口号,port为连接的端口号。MySQL的默认端口号是3306,因此如果不指定该参数,默认使用3306连接MySQL服务器。
-u:指定连接MySQL服务器的用户名,username为用户名。
-p:提示输入密码,即提示Enter password。
DatabaseName:指定连接到MySQL服务器后,登录到哪一个数据库中。如果没有指定,默认为mysql数据库。
-e:指定需要执行的SQL语句,登录MySQL服务器后执行这个SQL语句,然后退出MySQL服务器。
MySQL root修改普通用户密码
使用SET语句修改普通用户的密码
在MySQL中,只有root用户可以通过更新MySQL数据库来更改密码。使用root用户登录到MySQL服务器后,可以使用SET语句来修改普通用户密码。
语法格式: SET PASSWORD FOR 'username'@'hostname' = PASSWORD ('newpwd');
* 语法说明:
1)username参数是普通用户的用户名
2)hostname参数是普通用户的主机名
3)newpwd是要更改的新密码
* 新密码必须使用PASSWORD()函数来加密,如果不使用PASSWORD()加密,也会执行成功,但是用户会无法登录。
* 如果是普通用户修改密码,可省略FOR子句来更改自己的密码。
语法格式:SET PASSWORD = PASSWORD('newpwd');
# 使用SET语句将chuid用户的密码改为123
MySQL [mysql_chuid]> GRANT SELECT ON *.* TO 'chuid'@localhost IDENTIFIED BY '123456'; # 创建chuid用户
Query OK, 0 rows affected (0.01 sec)
MySQL [mysql]> SET PASSWORD FOR 'chuid'@'localhost' = PASSWORD('123'); # 修改chuid用户密码
Query OK, 0 rows affected (0.02 sec)
[root@master ~]# mysql -u chuid –p # 使用普通用户chuid登录
Enter password: # 这里的密码是修改后的密码123
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.6.19-log Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
* 新密码必须使用PASSWORD()函数来加密,如果不使用PASSWORD()加密,也会执行成功,但是用户会无法登录。
如果是普通用户修改密码,可省略 FOR 子句来更改自己的密码。
语法格式: SET PASSWORD = PASSWORD('newpwd');
MySQL [mysql_chuid]> SET PASSWORD = PASSWORD('chd123');
Query OK, 0 rows affected (0.01 sec)
使用UPDATE语句修改普通用户的密码
使用root用户登录MySQL服务器后,可以使用UPDATE语句修改MySQL数据库的user表的authentication_string字段,从而修改普通用户的密码。
UPDATA语句的语法:UPDATE MySQL.user SET authentication_string = PASSWORD("newpwd") WHERE User = "username" AND Host = "hostname";
其中,username参数是普通用户的用户名,hostname参数是普通用户的主机名,newpwd是要更改的新密码
* 执行UPDATE语句后,需要执行FLUSH PRIVILEGES语句重新加载用户权限。
# 使用root登录MySQL服务器,再使用UPDATE语句将chuid用户的密码修改为‘chuid123’
MySQL [mysql_chuid]> UPDATE mysql.user SET authentication_string = PASSWORD('chuid123') WHERE User = 'chuid' AND Host = 'localhost';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0
MySQL [mysql_chuid]> FLUSH PRIVILEGES; # 重新加载权限
Query OK, 0 rows affected (0.13 sec)
使用GRANT语句修改普通用户密码
可以在全局级别使用GRANT USAGE语句指定某个账户的密码而不影响账户当前的权限。使用GRANT语句修改密码,必须拥有GRANT权限。一般情况下最好使用该方法来指定或修改密码。
语法格式:GRANT USAGE ON *.* TO 'user'@’hostname’ IDENTIFIED BY 'newpwd';
其中,username 参数是普通用户的用户名,hostname 参数是普通用户的主机名,newpwd 是要更改的新密码。
# 使用root用户登录MySQL服务器,再使用GRANT语句将chuid用户的密码修改为‘chd123’
MySQL [mysql_chuid]> GRANT USAGE ON *.* TO 'chuid'@'localhost' IDENTIFIED BY 'chd123';
Query OK, 0 rows affected (0.02 sec)
MySQL [mysql_chuid]> FLUSH PRIVILEGES; # 刷新授权表
Query OK, 0 rows affected (0.00 sec)
MySQL [mysql_chuid]> quit # 退出数据库
Bye
[root@master ~]# mysql -u chuid –p # 使用普通用户chuid登录
Enter password: # 这里的密码是修改后的密码chd123
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 27
Server version: 5.6.19-log Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
MySQL修改root密码
使用mysqladmin命令在命令行指定新密码
在MySQL中,root用户拥有很高的权限,因此必须保证root用户密码的安全。
root用户可以使用mysqladmin命令来修改密码
mysqladmin的语法格式:mysqladmin -u username -h hostname -p password "newpwd"
* 语法说明:
1)usermame 指需要修改密码的用户名称,在这里指定为root用户;
2)hostname 指需要修改密码的用户主机名,该参数可以不写,默认是localhost;
3)password 为关键字,而不是指旧密码;
4)newpwd 为新设置的密码,必须用双引号括起来。如果使用单引号会引发错误,可能会造成修改后的密码不是你想要的。
# 使用mysqladmin命令将root用户的密码修改为‘123’
[root@master ~]# mysqladmin -u root -p password '123'
Enter password:
[root@master ~]#
[root@master ~]# mysql -u root -p
Enter password: # 这里的密码是修改后的密码123
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 29
Server version: 5.6.19-log Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
修改MySQL数据库的user表
所有账户信息都保存在user表中,因此可以直接通过修改user表来改变root用户的密码。
root用户登录到MySQL服务器后,可以使用UPDATE语句修改MySQL数据库的user表的authentication_string字段,从而修改用户的密码。
使用 UPDATA 语句修改 root 用户密码的语法格式:
UPDATE mysql.user set authentication_string = PASSWORD ("rootpwd) WHERE User = "root" and Host="localhost";
新密码必须使用PASSWORD()函数来加密。执行UPDATE语句后,需要执行FLUSH PRIVILEGES语句重新加载用户权限。
# 使用UPDATE语句将root用户的密码修改为‘root123’
MySQL [(none)]> UPDATE mysql.user SET authentication_string = password ('root123') WHERE User = 'root' AND Host = 'localhost';
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
MySQL [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
使用SET语句修改root用户的密码
SET PASSWORD语句可以用来重新设置其他用户的登录密码或者自己使用的账户的密码。
使用SET语句修改密码的语法格式:SET PASSWORD = PASSWORD ("rootpwd");
# 使用SET语句将root用户的密码修改为“123456”
MySQL [(none)]> SET password = password ("123456");
Query OK, 0 rows affected (0.00 sec)
MySQL [(none)]> quit
Bye
[root@master ~]# mysql -u root -p
Enter password: # 这里的密码是修改后的密码123456
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 34
Server version: 5.6.19-log Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>