页面“Linux下忘记mysql的root用户密码解决方法 忘记mysql密码 mysql修改密码方法”与“Mysql权限之授权,查看和回收以及删除用户”之间的差异

来自linux中国网wiki
(页面间的差异)
跳到导航 跳到搜索
 
 
第1行: 第1行:
=原因=
+
mysql权限之授权,查看和回收以及删除用户
不小心 把自己在公司的测试机上的mysql root 密码给忘记了,网上有很多方法,但这个是我试过的 包成功哦
 
  
=解决过程=
+
==mysql权限之授权==
 
<pre>
 
<pre>
首先 要把mysqld 进程停止 kill or killall 你自己选择
+
命令格式
接着
+
grant 权限 on 数据库名.表名 to 用户名@登陆方式 identified by 'password1';
  
用--skip-grant-tables参数启动mysqld
+
grant select,insert,update,delete on dbname.tablename to user@ip identified by 'password';
 +
# 4 root
 +
grant all on *.*  to root@'127.0.0.1' identified by 'myFD23';
  
# 其中/usr/local/mysql/bin是我的mysql安装目录
+
grant select,insert,
[root@localhost /]#/usr/local/mysql/bin/mysqld_safe --skip-grant-tables&
 
  
#不用密码进入mysql
+
update,delete  on  wiki.* to evan@'10.104.55.111' identified by  '12345678';
[root@localhost /]/usr/local/mysql/bin/mysql
 
  
#切换到mysql database good
+
#程序用的用户 
mysql> use mysql;
 
#将mysql root密码该为123456#了
 
  
 +
GRANT Select,Update,insert,delete  ON dbname1.* TO app@"%"  IDENTIFIED BY "xxxxx";
 +
GRANT Select,Update,insert,delete  ON dbname2.* TO app@"%"  IDENTIFIED BY "xxxxx";
 +
#创建只读用户
 +
GRANT SElECT ON *.* TO 'username'@'%' IDENTIFIED BY "password";
 +
flush privileges;
 +
 +
小结:使用引号或双引号没有任何区别,主要是用于区别字符和命令
 +
 +
</pre>
 +
 +
==mysql权限之密码修改==
 +
<pre>
 
#mysql5.7  
 
#mysql5.7  
  
第24行: 第33行:
 
flush privileges;
 
flush privileges;
 
特别提醒注意的一点是,新版的mysql数据库下的user表中已经没有Password字段了
 
特别提醒注意的一点是,新版的mysql数据库下的user表中已经没有Password字段了
 +
</pre>
 +
 +
==mysql授权查看==
 +
<pre>
 +
查看mysql中存在的用户 这个在回头查看授权时非常好用
 +
mysql> select user,host from mysql.user;
 +
 +
([email protected]:)[mysql]> select user,host from mysql.user;
 +
+------------+--------------------------+
 +
| user      | host                    |
 +
+------------+--------------------------+
 +
| oldgirl    | %                        |
 +
| wan        | %                        |
 +
| wanlong    | %                        |
 +
| rep        | 10.10.10.%              |
 +
| root      | 10.10.10.%              |
 +
| wan        | 10.10.10.%              |
 +
 +
查看MySQL用户权限:
 +
show grants for 你的用户@ip; #根据上面 就可以 收集回原来的授权详情
 +
 +
show grants for 你的用户; # or
 +
 +
 +
其它
 +
#查看len数据库已经授权的用户
 +
select user from mysql.db where db="dbname"
 +
 +
mysql> select * from mysql.user where user='root' \G   
 +
 +
#查看用户和IP ,下面的例子是查看 下面的库有没有 对 19.145.130.218 的dataviewre授权,对烦人的数据中心的报警很有用
 +
show grants for dataviewer@'19.145.130.218';
 +
这样就能看此机 哪些库对 dataviewer@’19.145.130.218‘ 有授权
 +
 +
 +
 +
查看MYSQL数据库中所有用户
 +
mysql>SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
  
  
#这个是mysql5.6之前
 
UPDATE user SET password=password('123456#') WHERE user='root';
 
FLUSH PRIVILEGES;
 
  
killall mysqld
 
  
#登录正常
 
mysql -uroot -p
 
 
</pre>
 
</pre>
  
=参考=
+
==常用权限==
 +
<pre> 1.select、insert、update和delete权限 允许你在一个数据库现有的表上实施操作,是基本权限
 +
2.alter权限允许你使用ALTER TABLE
 +
3.create和drop权限允许你创建新的数据库和表,或抛弃(删除)现存的数据库和表 如果你将mysql数据库的drop权限授予一个用户,该用户能抛弃存储了MySQL存取权限的数据库!
 +
4.grant权限允许你把你自己拥有的那些权限授给其他的用户。
 +
你不能明显地指定一个给定用户应该被拒绝存取。即,你不能明显地匹配一个用户并且然后拒绝连接。你不能指定一个用户有权创建立或抛弃一个数据库中的表,也不能创建或抛弃数据库本身。 可以同时列出许多被授予的单个权限。
 +
例如,如果想让用户能读取和修改已有表的内容,但又不允许创建新表或删除表,可按如下授权:
 +
GRANT SELECT,INSERT,DELETE,UPDATE ON samp_db.* TO 'user'@'%' IDENTIFIEDBY "pass"
 +
 
 +
#2017
 +
<privileges>是一个用逗号分隔的你想要赋予的MySQL用户权限的列表。你可以指定的权限可以分为三种类型:
 +
 
 +
数据库/数据表/数据列权限: Alter: 修改已存在的数据表(例如增加/删除列)和索引。
 +
Create: 建立新的数据库或数据表。
 +
Delete: 删除表的记录。
 +
Drop: 删除数据表或数据库。
 +
INDEX: 建立或删除索引。
 +
Insert: 增加表的记录。
 +
Select: 显示/搜索表的记录。
 +
Update: 修改表中已存在的记录。
 +
 
 +
全局管理MySQL用户权限:
 +
 
 +
file: 在MySQL服务器上读写文件。
 +
PROCESS: 显示或杀死属于其它用户的服务线程。
 +
RELOAD: 重载访问控制表,刷新日志等。
 +
SHUTDOWN: 关闭MySQL服务。
 +
 
 +
特别的权限:
 +
 
 +
ALL: 允许做任何事(和root一样)。
 +
USAGE: 只允许登录--其它什么也不允许做。
 +
 
 +
</pre>
 +
==密码修改==
 +
update mysql.user set authentication_string=password('123qwe') where user='root' and Host = 'localhost';
 +
flush privileges;
 +
 
 +
==mysql权限回收==
 +
<pre>
 +
revoke INSERT,UPDATE,DELETE  on dbname.tablename from user@ip;
 +
revoke all on user.* from tom@'localhost';
 +
 
 +
#最开始的权限
 +
([email protected]:)[mysql]> show grants for [email protected];
 +
+-------------------------------------------------------------------------------------------------------------------------------------------------+
 +
| Grants for [email protected]                                                                                                            |
 +
+-------------------------------------------------------------------------------------------------------------------------------------------------+
 +
| GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'sdk'@'10.104.103.162' IDENTIFIED BY PASSWORD '*dfds' |
 +
</pre>
 +
==删除用户==
 +
<pre>
 +
REVOKE语句只能取消用户的权限,而不可以删除用户。即使取消了所有的权限,用户仍然可以连接到服务器。要想彻底的删除用户,必须使用DELETE语句将该用户的记录从MySQL数据库中的user表中删除。
 +
该语句的语法格式如下:
 +
Delete from user where user = "user_name" and host = "host_name" ;
 +
使用DELETE删除用户sss,代码如下:
 +
delete from user where user='sss' and host='localhost' ;
 +
flush privileges ; </pre>
 +
 
 +
==常见问题==
 +
===问题1===
 +
<pre>
 +
授权后依然访问不了
 +
 
 +
mysql> grant all on *.* to  root@'192.168.30.54' ;
 +
Query OK, 0 rows affected (0.00 sec)
 +
 
 +
问题是 my.cnf bind-address问题
 +
bind-address 127.0.0.1
 +
改为
 +
bind-address 0.0.0.0
 +
 
 +
</pre>
 +
 
 +
 
 +
==参考==
 +
mysql授权查看
 +
http://blog.linuxchina.net/?p=950
 +
 
 +
mysql 权限回收
 +
https://dev.mysql.com/doc/refman/5.7/en/revoke.html
 +
 
 +
SQL之Grant(分配权限)和Revoke(回收权限)
 +
http://liaoen.blog.51cto.com/2253541/819081
 +
 
 +
MySQL取消权限和删除用户
 +
http://blog.linuxchina.net/?p=3437
 +
 
 +
mysql 数据库授权(给某个用户授权某个数据库)
 +
http://www.cnblogs.com/jifeng/archive/2011/03/06/1972183.html
  
[http://blog.linuxchina.net/?p=879 linux下忘记mysql的root用户密码解决方法–忘记mysql密码]
+
美国国家航空航天局宣布在TRAPPIST-1附近发现7颗行星,并有数颗位于适居带。
[[category:mysql]]
+
[[category:mysql]]

2019年11月14日 (四) 01:58的版本

mysql权限之授权,查看和回收以及删除用户

mysql权限之授权

命令格式
grant 权限 on 数据库名.表名 to 用户名@登陆方式 identified by 'password1';

grant select,insert,update,delete on dbname.tablename to user@ip identified by 'password';
# 4 root 
grant all on *.*  to root@'127.0.0.1' identified by 'myFD23';

grant  select,insert,

update,delete  on  wiki.* to evan@'10.104.55.111' identified by  '12345678';

#程序用的用户  

GRANT Select,Update,insert,delete  ON dbname1.* TO app@"%"  IDENTIFIED BY "xxxxx";
GRANT Select,Update,insert,delete  ON dbname2.* TO app@"%"  IDENTIFIED BY "xxxxx";
#创建只读用户
GRANT SElECT ON *.* TO 'username'@'%' IDENTIFIED BY "password";
flush privileges;

小结:使用引号或双引号没有任何区别,主要是用于区别字符和命令 

mysql权限之密码修改

#mysql5.7 

update mysql.user set authentication_string=PASSWORD('123456#') where user='root';
flush privileges;
特别提醒注意的一点是,新版的mysql数据库下的user表中已经没有Password字段了

mysql授权查看

查看mysql中存在的用户 这个在回头查看授权时非常好用
mysql> select user,host from mysql.user;

([email protected]:)[mysql]> select user,host from mysql.user;
+------------+--------------------------+
| user       | host                     |
+------------+--------------------------+
| oldgirl    | %                        |
| wan        | %                        |
| wanlong    | %                        |
| rep        | 10.10.10.%               |
| root       | 10.10.10.%               |
| wan        | 10.10.10.%               |

查看MySQL用户权限:
show grants for 你的用户@ip; #根据上面 就可以 收集回原来的授权详情

show grants for 你的用户; # or


其它
#查看len数据库已经授权的用户
select user from mysql.db where db="dbname"

mysql> select * from mysql.user where user='root' \G    

#查看用户和IP ,下面的例子是查看 下面的库有没有 对 19.145.130.218 的dataviewre授权,对烦人的数据中心的报警很有用
show grants for dataviewer@'19.145.130.218';
这样就能看此机 哪些库对 dataviewer@’19.145.130.218‘ 有授权



查看MYSQL数据库中所有用户
mysql>SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;




常用权限

 1.select、insert、update和delete权限 允许你在一个数据库现有的表上实施操作,是基本权限 
2.alter权限允许你使用ALTER TABLE 
3.create和drop权限允许你创建新的数据库和表,或抛弃(删除)现存的数据库和表 如果你将mysql数据库的drop权限授予一个用户,该用户能抛弃存储了MySQL存取权限的数据库! 
4.grant权限允许你把你自己拥有的那些权限授给其他的用户。 
你不能明显地指定一个给定用户应该被拒绝存取。即,你不能明显地匹配一个用户并且然后拒绝连接。你不能指定一个用户有权创建立或抛弃一个数据库中的表,也不能创建或抛弃数据库本身。 可以同时列出许多被授予的单个权限。 
例如,如果想让用户能读取和修改已有表的内容,但又不允许创建新表或删除表,可按如下授权: 
GRANT SELECT,INSERT,DELETE,UPDATE ON samp_db.* TO 'user'@'%' IDENTIFIEDBY "pass"

#2017
<privileges>是一个用逗号分隔的你想要赋予的MySQL用户权限的列表。你可以指定的权限可以分为三种类型:

数据库/数据表/数据列权限: Alter: 修改已存在的数据表(例如增加/删除列)和索引。
Create: 建立新的数据库或数据表。
Delete: 删除表的记录。
Drop: 删除数据表或数据库。
INDEX: 建立或删除索引。
Insert: 增加表的记录。
Select: 显示/搜索表的记录。
Update: 修改表中已存在的记录。

全局管理MySQL用户权限:

file: 在MySQL服务器上读写文件。
PROCESS: 显示或杀死属于其它用户的服务线程。
RELOAD: 重载访问控制表,刷新日志等。
SHUTDOWN: 关闭MySQL服务。

特别的权限:

ALL: 允许做任何事(和root一样)。
USAGE: 只允许登录--其它什么也不允许做。

密码修改

update mysql.user set authentication_string=password('123qwe') where user='root' and Host = 'localhost';
flush privileges;

mysql权限回收

revoke INSERT,UPDATE,DELETE   on dbname.tablename from user@ip;
revoke all on user.* from tom@'localhost'; 

#最开始的权限 
([email protected]:)[mysql]> show grants for [email protected];
+-------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                                            |
+-------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'sdk'@'10.104.103.162' IDENTIFIED BY PASSWORD '*dfds' |

删除用户

REVOKE语句只能取消用户的权限,而不可以删除用户。即使取消了所有的权限,用户仍然可以连接到服务器。要想彻底的删除用户,必须使用DELETE语句将该用户的记录从MySQL数据库中的user表中删除。
该语句的语法格式如下:
Delete from user where user = "user_name" and host = "host_name" ;
使用DELETE删除用户sss,代码如下:
delete from user where user='sss' and host='localhost' ;
flush privileges ; 

常见问题

问题1

 
授权后依然访问不了 

mysql> grant all on *.* to  root@'192.168.30.54' ;
Query OK, 0 rows affected (0.00 sec)

问题是 my.cnf bind-address问题
bind-address 127.0.0.1 
改为
bind-address 0.0.0.0


参考

mysql授权查看 http://blog.linuxchina.net/?p=950

mysql 权限回收 https://dev.mysql.com/doc/refman/5.7/en/revoke.html

SQL之Grant(分配权限)和Revoke(回收权限) http://liaoen.blog.51cto.com/2253541/819081

MySQL取消权限和删除用户 http://blog.linuxchina.net/?p=3437

mysql 数据库授权(给某个用户授权某个数据库) http://www.cnblogs.com/jifeng/archive/2011/03/06/1972183.html

美国国家航空航天局宣布在TRAPPIST-1附近发现7颗行星,并有数颗位于适居带。