MySQL知识(二十)——用户账户管理
2016-02-28 13:23
796 查看
1 登录和退出MySQL服务器
(1)登录mysql 参数
mysql命令的常用参数:
参数 | 描述 |
---|---|
-h,- -host=name | 指定主机名或ip,默认是localhost |
-u,- -user=name | 指定用户名 |
-p(小写),- -password[=pwd] | 指定登录密码。如果该字段后面有一段字符,则该段字符串将作为密码直接登录。如果后面没有内容,则登录时会提示输入密码。注意该参数后面的字符串和-p之间不能有空格 |
-P(大写),- -port=# | 指定mysql服务器的端口号,默认为3306 |
-V(大写),- -version | 输出版本信息并且退出 |
数据库名 | 可以在命令的最后指定数据库名 |
-e | 指定了该参数,将在登录后执行-e后面的命令或sql语句并退出 |
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.table TO 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: 0 mysql> 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 mysql MySQL 服务正在启动 . MySQL 服务已经启动成功。 C:\WINDOWS\system32>net stop mysql MySQL 服务正在停止. MySQL 服务已成功停止。
(2)使用mysqld - -skip-grant-tables启动服务器
C:\WINDOWS\system32>mysqld --skip-grant-tables 2016-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 root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server 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 its affiliates. Other names may be trademarks of their respective owners. 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表结构为InnoDB类型从ibd文件恢复数据
- PowerDesigner根据PhysicalDiagram产生数据库--连接mysql
- 经常被使用的MySQL函数
- Mysql比较操作符概述
- 两个mysql的函数
- mysql存储过程--返回两个时间的最大最小值
- MySQL的存储过程例子
- mysql之旅【第二篇】
- mysql中插入语句返回自增长操作
- MYSQL 函数datediff timestampdiff 的区别
- Mysql实时备份实现方法
- 关于MySQL数据导入之硬拷贝数据
- mySQL 5.7版 解决密码登录失败Access denied for user 'root'@'localhost' (using password: NO)
- MySQL知识(十九)——用户管理之权限表
- windows下安装MySQLdb模块
- 查看本地mysql端口号
- MySQL Workbench的使用方法(图文)
- mysql主从原理及错误代码的原因