MySQL知识(二十)——用户账户管理
来源:互联网 发布:淘宝号怎样快速升心 编辑:程序博客网 时间:2024/05/08 14:41
1 登录和退出MySQL服务器
(1)登录
mysql 参数
mysql命令的常用参数:
例如:
C:\Users\asus>mysql -u root -p -h localhost test -e"desc book;"Enter password: ****+------------------+--------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+------------------+--------------+------+-----+---------+-------+| bookid | int(11) | NO | | NULL | || bookname | varchar(255) | NO | MUL | NULL | || authors | varchar(255) | NO | | NULL | || info | varchar(255) | YES | | NULL | || comment | varchar(255) | YES | | NULL | || year_publication | year(4) | NO | MUL | NULL | |+------------------+--------------+------+-----+---------+-------+
(2)退出服务器
输入quit或exit即可。
2 新建普通用户
2.1 使用CREATE USER语句
执行CREATE USER或GRANT语句时,服务器会修改相应的用户授权表,添加或修改用户及其权限。
CREATE USER user_specification [,user_specification]...user_specification: user@host [ IDENTIFIED BY [PASSWORD] 'password' |IDENTIFIED WITH auth_plugin [AS 'auth_string'] ]
- user:用户的名称
- host:允许登录的用户主机名称
- IDENTIFIED BY:用来设置用户的密码
- [PASSWORD]:表示使用哈希值设置密码,可选
- ‘password’:用户登录的普通明文密码
- IDENTIFIED WITH:为用户指定一个身份验证插件
- auth_plugin:插件名
- auth_string:该参数将传递给身份验证插件,由该插件解释该参数的意义
例如,创建一个用户,名为jtzeng,密码是jtzeng123,主机名是localhost:
mysql> CREATE USER 'jtzeng'@'localhost' IDENTIFIED BY 'jtzeng123';Query OK, 0 rows affected (0.00 sec)
如果只指定用户名部分,主机名部分则默认为'%'(即对所有的主机开发权限)。
如果指定用户登录不需要密码,可以省略IDENTIFIED BY部分。
2.2 使用GRANT语句
CREATE USER语句创建的新用户没有任何权限,还需要使用GRANT语句赋予用户权限。
使用GRANT语句不仅可以创建新用户,还可以在创建的同时对用户授权。推荐使用GRANT语句来创建新用户。
GRANT privileges ON db.tableTO user@host [IDENTIFIED BY 'password'][,user[IDENTIFIED BY 'password']][WITH GRANT OPTION];
- privileges:表示赋予用户的权限类型
- db.table:用户权限所在的数据库中的表
- WITH GRANT OPTION:可选,表示对新建立的用户赋予GRANT权限,即该用户可以对其他用户赋予权限。
例如,新建用户testUser,密码testpwd,并授予用户对所有的数据表的SELECT和UPDATE权限:
mysql> GRANT SELECT,UPDATE ON *.* TO 'testUser'@'localhost' -> IDENTIFIED BY 'testpwd';Query OK, 0 rows affected (0.00 sec)mysql> SELECT Host,User,Select_priv,Update_priv -> FROM mysql.user -> WHERE user='testUser';+-----------+----------+-------------+-------------+| Host | User | Select_priv | Update_priv |+-----------+----------+-------------+-------------+| localhost | testUser | Y | Y |+-----------+----------+-------------+-------------+1 row in set (0.00 sec)
2.3 直接操作MySQL用户表
可以使用INSERT语句向user表中直接插入一条记录来创建一个新的用户,但必须拥有对mysql.user表的INSERT权限。
INSERT INTO mysql.user(Host,User,Password,[privilegelist])VALUES('host','username',PASSWORD('password'),privilegevaluelist);
privilegelist表示用户的权限,可以有多个权限;PASSWORD()函数为密码加密函数;privilegevaluelist为对应的权限的值,只能取值Y或N。
例子:
mysql> INSERT INTO mysql.user(Host,User,Password) -> VALUES('localhost','customer1',PASSWORD('customer1'));Query OK, 1 row affected, 3 warnings (0.01 sec)mysql> SHOW WARNINGS;+---------+------+---------------------------------------------------+| Level | Code | Message |+---------+------+---------------------------------------------------+| Warning | 1364 | Field 'ssl_cipher' doesn't have a default value || Warning | 1364 | Field 'x509_issuer' doesn't have a default value || Warning | 1364 | Field 'x509_subject' doesn't have a default value |+---------+------+---------------------------------------------------+3 rows in set (0.00 sec)
出现警告,三个字段在user表中没有默认值。
FLUSH PRIVILEGES;
重新加载授权表。
3 删除普通用户
3.1 DROP USER语句
DROP USER user[,user];
例如:
mysql> DROP USER 'jtzeng'@'localhost';Query OK, 0 rows affected (0.00 sec)mysql> select host,user,password from mysql.user;+-----------+-----------+-------------------------------------------+| host | user | password |+-----------+-----------+-------------------------------------------+| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B || 127.0.0.1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B || ::1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B || localhost | | || localhost | testUser | *22CBF14EBDE8814586FF12332FA2B6023A7603BB || localhost | customer1 | *73DA97747611396FD898E4A7E42B1097B0780646 |+-----------+-----------+-------------------------------------------+6 rows in set (0.00 sec)
3.2 DELETE语句
DELETE FROM MYSQL.user WHERE host='hostname' and user='username';
例如:
mysql> DELETE FROM MYSQL.user WHERE host='localhost' and user='customer1';Query OK, 1 row affected (0.00 sec)mysql> select host,user,password from mysql.user;+-----------+----------+-------------------------------------------+| host | user | password |+-----------+----------+-------------------------------------------+| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B || 127.0.0.1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B || ::1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B || localhost | | || localhost | testUser | *22CBF14EBDE8814586FF12332FA2B6023A7603BB |+-----------+----------+-------------------------------------------+5 rows in set (0.00 sec)
4 root用户修改自己密码
4.1 使用mysqladmin命令
在Windows命令行窗口输入:
mysqladmin -u username -h localhost -p password "新的密码"
例如:
mysqladmin -u root -p password "rootpwd"Enter password:
按照提示要求输入root用户原来的密码后即可。
4.2 修改mysql.user表
UPDATE myslq.user SET Password=PASSWORD("新的密码") WHERE User="root" AND Host="localhost";
4.3 使用SET语句
直接使用SET PASSWORD语句
SET PASSWORD=PASSWORD("新的密码");
例如,设置当前用户密码:
mysql> SET PASSWORD=PASSWORD("rootpwd");Query OK, 0 row affected (0.00 sec)
5 root用户修改普通用户密码
5.1 使用SET语句
SET PASSWORD FOR 'user'@'host'=PASSWORD('新的密码');
例如,修改testUser用户的密码为“newpwd”:
mysql> SET PASSWORD FOR 'testUser'@'localhost'=PASSWORD("newpwd");Query OK, 0 rows affected (0.00 sec)
5.2 使用UPDATE语句
UPDATE MYSQL.user SET Password=PASSWORD("pwd")WHERE User="username" AND Host="hostname";
例如,修改testUser用户的密码为“newpwd2”:
mysql> UPDATE MYSQL.user SET Password=PASSWORD("newpwd2") -> WHERE User="testUser" AND Host="localhost";Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> FLUSH PRIVILEGES;Query OK, 0 rows affected (0.00 sec)
5.3 使用GRANT语句(推荐使用)
GRANT USAGE ON *.* TO 'someuser'@'%' IDENTIFIED BY 'somepassword';
例如,修改testUser用户的密码为“newpwd3”:
mysql> GRANT USAGE ON *.* TO 'testUser'@'localhost' IDENTIFIED BY 'newpwd3';Query OK, 0 rows affected (0.00 sec)
6 普通用户修改密码
SET PASSWORD=PASSWORD("新的密码");
7 root用户密码丢的解决办法
第1步 使用- -skip-grant-tables选项启动MySQL服务
以skip-grant-tables选项启动时,MySQL服务器将不加载权限判断,任何用户都能访问数据库。
(1)windows系统下
mysqld --skip-grant-tables
或者
mysqld-nt --skip-grant-tables
(2)Linux系统下
mysqld_safe --skip-grant-tables user=mysqld
或者
/ect/init.d/mysqld start-mysqld --skip-grant-tables
第2步 使用root用户登录,重新设置密码
例子(window系统下):
(1)使用net stop mysql命令停止mysql服务器。(需要管理员身份打开命令行窗口)
C:\WINDOWS\system32>net start mysqlMySQL 服务正在启动 .MySQL 服务已经启动成功。C:\WINDOWS\system32>net stop mysqlMySQL 服务正在停止.MySQL 服务已成功停止。
(2)使用mysqld - -skip-grant-tables启动服务器
C:\WINDOWS\system32>mysqld --skip-grant-tables2016-02-28 13:09:40 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).2016-02-28 13:09:40 0 [Note] mysqld (mysqld 5.6.24) starting as process 8864 ...
(3)命令运行之后,用户无法输入指令,此时如果在任务管理器中可以看到名称为mysqld的进程,则表示可以受用root用户登录MySQL了。此时重新打开一个命令行窗口,输入:
C:\WINDOWS\system32>mysql -u rootWelcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.6.24 MySQL Community Server (GPL)Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
(4)登录成功后,可以使用UPDATE语句或mysqladmin命令重新设置root密码
第3步 加载权限表
重新加载权限表,新密码才生效
mysql> FLUSH PRIVILEGES;Query OK, 0 rows affected (0.00 sec)
- MySQL知识(二十)——用户账户管理
- MySQL知识(二十一)——用户管理之权限管理、访问控制
- MySQL用户账户管理
- 【mysql】MySQL用户账户管理
- DB-Mysql-用户账户管理
- Oracle12C--用户管理(二十)
- MySQL知识(十九)——用户管理之权限表
- 第3章 用户(账户)管理
- 第3章 用户(账户)管理
- linux 用户账户管理
- mysql的用户管理(二)
- MySQl 用户管理和权限管理(二)
- Ubuntu中的用户管理(一)用户账户
- mysql账户管理
- mysql 账户管理
- mysql 账户管理
- mysql 账户管理
- MySQL 账户管理
- Android SharedPreferences的简单封装
- commons-dbcp jar包详解
- Java对象序列化初探
- setInterval()和clearInterval()函数
- 【17】ListView——列表视图
- MySQL知识(二十)——用户账户管理
- 如何 调节 PID 增益
- Monocular slam 的理论基础(1)
- 安装2个不同版本jdk该怎么配置环境变量
- 最短路最长路整理
- iOS单例模式学习
- 01_XML基础
- 1106 Lowest Price in Supply Chain
- linux下简单编译与静态库编译使用