MySQL远程连接

远程连接

授权

常见权限表

相关库:mysql

相关表:user

相关字段:select host,user from user;

创建用户、授权

  • 创建用户格式:create user 用户名@ip地址 identified by '密码';

  • 授权:grant all on *.* To 用户名@'ip地址';

    grant select,create on 数据库名.表名 To 用户名@ip地址;

# 创建用户
create user root@'192.168.11.%' identified by '123456';
# 这样root@192.168.11.% 这个网段的用户可以登录 create user hans@'192.168.11.161' identified by '123456';
# 这样只允许hans用户登录 create user li@'%' identified by '123456';
# 所有li用户都可登录 # 删除用户
drop user root@'192.168.11.%';
# 授权
grant all on *.* To hans@'192.168.11.161';
grant select,create on oldboy_test.* To hans@'192.168.11.161'; # 查看授权
show grants for hans@'192.168.11.161';
# 刷新权限表
flush privileges;

MySQL添加用户、删除用户、授权及撤销权限

一.创建用户:

mysql> insert into mysql.user(Host,User,Password) values("localhost","test",password("1234"));

#这样就创建了一个名为:test 密码为:1234 的用户。

注意:此处的"localhost",是指该用户只能在本地登录,不能在另外一台机器上远程登录。如果想远程登录的话,将"localhost"改为"%",表示在任何一台电脑上都可以登录。也可以指定某台机器(例如192.168.1.10),或某个网段(例如192.168.1.%)可以远程登录。

二.为用户授权:

授权格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"; 

2.1 首先为用户创建一个数据库(testDB):

mysql>create database testDB;

2.2 授权test用户拥有testDB数据库的所有权限(某个数据库的所有权限):

mysql>grant all privileges on testDB.* to test@localhost identified by '1234';

mysql>flush privileges;//刷新系统权限表,即时生效

2.3 如果想指定某库的部分权限给某用户本地操作,可以这样来写:

mysql>grant select,update on testDB.* to test@localhost identified by '1234';

mysql>flush privileges;

#常用的权限有select,insert,update,delete,alter,create,drop等。可以查看mysql可授予用户的执行权限了解更多内容。

2.4  授权test用户拥有所有数据库的某些权限的远程操作:   

mysql>grant select,delete,update,create,drop on *.* to test@"%" identified by "1234";

#test用户对所有数据库都有select,delete,update,create,drop 权限。

2.5 查看用户所授予的权限:

mysql> show grants for test@localhost;

三、删除用户:

mysql>Delete FROM user Where User='test' and Host='localhost';

mysql>flush privileges;

删除账户及权限:>drop user 用户名@'%';

        >drop user 用户名@ localhost;

四、修改指定用户密码:

mysql>update mysql.user set password=password('新密码') where User="test" and Host="localhost";

mysql>flush privileges;

五、撤销已经赋予用户的权限:

revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可:

mysql>grant all on *.* to dba@localhost;

mysql>revoke all on *.* from dba@localhost;

六、MySQL grant、revoke 用户权限注意事项:

6.1 grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。

6.2. 如果想让授权的用户,也可以将这些权限 grant 给其他用户,需要选项 "grant option"

mysql>grant select on testdb.* to dba@localhost with grant option;

mysql>grant select on testdb.* to dba@localhost with grant option;

这个特性一般用不到。实际中,数据库权限最好由 DBA 来统一管理。

补充:

mysql授权表共有5个表:user、db、host、tables_priv和columns_priv。

授权表的内容有如下用途:
user表
user表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限,并适用于所有数据库。例如,如果你启用了DELETE权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。

db表
db表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。

host表
host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响,所以,你可能发觉你根本不是用它。

tables_priv表
tables_priv表指定表级权限,在这里指定的一个权限适用于一个表的所有列。

columns_priv表
columns_priv表指定列级权限。这里指定的权限适用于一个表的特定列

MySQL可授予用户的执行权限

(以下操作都是以root身份登陆进行grant授权,以root@localhost身份登陆执行各种命令。)


MySQL包含哪些权限,共29个。

权限 说明 举例
usage 连接(登陆)权限,建立一个用户,就会自动授予其usage权限(默认授予)。
   该权限只能用于数据库登陆,不能执行任何操作;且usage权限不能被回收,也即REVOKE用户并不能删除用户。
mysql>  grant usage on *.* to 'root′@'localhost' identified by '123';
file 拥有file权限才可以执行  select ..into outfile和load data infile…操作,但是不要把file, process,  super权限授予管理员以外的账号,这样存在严重的安全隐患。 mysql>  grant file on *.* to root@localhost;
   mysql> load data infile '/home/mysql/pet.txt' into table pet;
super 这个权限允许用户终止任何查询;修改全局变量的SET语句;使用CHANGE  MASTER,PURGE MASTER LOGS。 mysql>  grant super on *.* to root@localhost;
   mysql> purge master logs before 'mysql-bin.000006′;
select 必须有select的权限,才可以使用select  table mysql>  grant select on pyt.* to 'root′@'localhost';
   mysql> select * from shop;
insert 必须有insert的权限,才可以使用insert  into ….. values…. mysql>  grant insert on pyt.* to 'root′@'localhost';
   mysql> insert into shop(name) values('aa');
update 必须有update的权限,才可以使用update  table mysql>  update shop set price=3.5 where article=0001 and dealer='A';
delete 必须有delete的权限,才可以使用delete  from ….where….(删除表中的记录) mysql>  grant delete on pyt.* to 'root′@'localhost';
   mysql> delete from table where id=1;
alter 必须有alter的权限,才可以使用alter  table mysql>  alter table shop modify dealer char(15);
alter routine 必须具有alter  routine的权限,才可以使用{alter |drop} {procedure|function} mysql>grant  alter routine on pyt.* to 'root′@' localhost ‘;
   mysql> drop procedure pro_shop;
   Query OK, 0 rows affected (0.00 sec)
create 必须有create的权限,才可以使用create  table mysql>  grant create on pyt.* to 'root′@'localhost';
drop 必须有drop的权限,才可以删除库、表、索引、视图等 mysql>  drop database db_name; 
   mysql> drop table tab_name;
   mysql> drop view vi_name; 
   mysql> drop index in_name;
create routine 必须具有create  routine的权限,才可以使用{create |alter|drop} {procedure|function} mysql>  grant create routine on pyt.* to 'root′@'localhost';
   当授予create routine时,自动授予EXECUTE, ALTER ROUTINE权限给它的创建者:
create temporary tables (注意这里是tables,不是table) 必须有create  temporary tables的权限,才可以使用create temporary tables.
   mysql> grant create temporary tables on pyt.* to  'root′@'localhost';
   [mysql@mydev ~]$ mysql -h localhost -u root -p pyt
   mysql> create temporary table tt1(id int);
create view 必须有create  view的权限,才可以使用create view mysql>  grant create view on pyt.* to 'root′@'localhost';
   mysql> create view v_shop as select price from shop;
create user 要使用CREATE  USER,必须拥有mysql数据库的全局CREATE USER权限,或拥有INSERT权限。 mysql>  grant create user on *.* to 'root′@'localhost';
   或:mysql> grant insert on *.* to root@localhost;
show database 通过show  database只能看到你拥有的某些权限的数据库,除非你拥有全局SHOW DATABASES权限。
   对于root@localhost用户来说,没有对mysql数据库的权限,所以以此身份登陆查询时,无法看到mysql数据库:
mysql>  show databases;
show view 必须拥有show  view权限,才能执行show create view mysql>  show create view name;
index 必须拥有index权限,才能执行[create  |drop] index mysql>  grant index on pyt.* to root@localhost;
   mysql> create index ix_shop on shop(article);
   mysql> drop index ix_shop on shop;
excute 执行存在的Functions,Procedures mysql>  call pro_shoroot(0001,@a);
event event的使用频率较低建议使用root用户进行创建和维护。
   要使event起作用,MySQL的常量GLOBAL event_scheduler必须为on或者是1
mysql>  show global variables like 'event_scheduler';
lock tables 必须拥有lock  tables权限,才可以使用lock tables mysql>  grant lock tables on pyt.* to root@localhost;
   mysql> lock tables a1 read;
   mysql> unlock tables;
references 有了REFERENCES权限,用户就可以将其它表的一个字段作为某一个表的外键约束。  
reload 必须拥有reload权限,才可以执行flush  [tables | logs | privileges] mysql>  grant reload on pyt.* to root@localhost;
   ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
   mysql> grant reload on *.* to 'root′@'localhost';
   Query OK, 0 rows affected (0.00 sec)
   mysql> flush tables;
replication client 拥有此权限可以查询master  server、slave server状态。 mysql>  grant Replication client on *.* to root@localhost;
   或:mysql> grant super on *.* to root@localhost;
   mysql> show master status;
replication slave 拥有此权限可以查看从服务器,从主服务器读取二进制日志。 mysql>  grant replication slave on *.* to root@localhost;
   mysql> show slave hosts;
   Empty set (0.00 sec)
   mysql>show binlog events;
Shutdown 关闭mysql权限 [mysql@mydev  ~]$ mysqladmin shutdown
grant option 拥有grant  option,就可以将自己拥有的权限授予其他用户(仅限于自己已经拥有的权限) mysql>  grant Grant option on pyt.* to root@localhost;
   mysql> grant select on pyt.* to p2@localhost;
process 通过这个权限,用户可以执行SHOW  PROCESSLIST和KILL命令。默认情况下,每个用户都可以执行SHOW PROCESSLIST命令,但是只能查询本用户的进程。 mysql>  show processlist;
all privileges 所有权限。with  grant option 可以连带授权 mysql>  grant all privileges on pyt.* to root@localhost with grant option;

另外:

  • 管理权限(如 super, process, file等)不能够指定某个数据库,on后面必须跟 *.*

  • 有人会问truncate权限呢,其实truncate权限就是create+drop,这点需要注意

MySQL远程连接、用户授权的更多相关文章

  1. mysql增加远程连接用户及查看数据库表结构

    一.增加远程连接用户 1.用root权限登录数据库  2.加用户:grant all privileges on *.* to '111'@'192.168.1.%' identified by '2 ...

  2. Navicat for mysql 远程连接 mySql数据库10061、1045错误

    原文地址:http://www.111cn.net/database/mysql/46377.htm 有朋友可能会碰到使用Navicat for mysql 远程连接 mySql数据库会提示10061 ...

  3. windows server服务器上mysql远程连接失败的坑

    windows server服务器上mysql远程连接失败的坑 背景:趁这阿里云活动,和朋友合伙买了个服务器,最坑的是没想到他买的是windows Server的,反正便宜,将就着用吧,自己装好了wa ...

  4. (转)Linux开启mysql远程连接的设置步骤

    Mysql默认root用户只能本地访问,不能远程连接管理mysql数据库,Linux如何开启mysql远程连接?设置步骤如下: 1.GRANT命令创建远程连接mysql授权用户itlogger mys ...

  5. Linux开启MySQL远程连接

    Linux开启MySQL远程连接的设置步骤 . MySQL默认root用户只能本地访问,不能远程连接管理MySQL数据库,那么Linux下如何开启MySQL远程连接?设置步骤如下: 1.GRANT命令 ...

  6. ubuntu允许mysql远程连接

    ubuntu允许mysql远程连接 第一步: vim /etc/MySQL/my.cnf找到bind-address = 127.0.0.1 注释掉这行,如:#bind-address = 127.0 ...

  7. 在Ubuntu14.04中配置mysql远程连接教程

    上一篇文章,小编带大家学会了在Ubuntu14.04中安装MySQL,没有来得及上课的小伙伴们可以戳这篇文章:如何在Ubuntu14.04中安装mysql,今天给大家分享一下,如何简单的配置MySQL ...

  8. MySQL远程连接不上的解决方法

    这篇文章主要为大家详细介绍了MySQL远程连接不上的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下   之前遇到过MySQL本地可以连接但是远程连不上的问题,没有记录,今天在云上新申请的服 ...

  9. mysql 安装 和 mysql 远程连接

    一.mysql安装 1.下载MySQL数据库可以访问官方网站:https://www.mysql.com/ 2.点击DOWNLOADS模块下的Community模块下的MySQL Community ...

随机推荐

  1. C#: .net序列化及反序列化 [XmlElement(“节点名称”)] [XmlAttribute(“节点属性”)] (上篇)

    .net序列化及反序列化 序列化是指一个对象的实例可以被保存,保存成一个二进制串,当然,一旦被保存成二进制串,那么也可以保存成文本串了.比如,一个计数器,数值为2,我们可以用字符串"2&qu ...

  2. J20航模遥控器开源项目系列教程(四)PCB打印 | 嘉立创PCB下单教程,5元顺丰包邮解君愁!

    我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/J ...

  3. BUAA_DS_聊聊链表

    幸福穿着节日的盛装欢迎你. --威廉•莎士比亚<罗密欧与朱丽叶> 1. 说在前面 大家在学数组的时候小脑瓜里有没有这样的疑惑:为什么数组必须是定长的?为什么数组开太长会编译错误?数组越界为 ...

  4. path()的name属性,有什么用?

    官网(参考:命名 URL 模式) 命名 URL 模式: 为了完成反向解析 URL ,你需要像上面那样使用 命名 URL 模式 .用于命名 URL 的字符串可以包含任意字符,并不仅限于 Python 里 ...

  5. 半吊子菜鸟学Web开发 -- PHP学习3-文件

    目录 1 PHP文件系统 1.1 PHP文件的读取 1.4 获得文件的大小 1.5 PHP写入文件 1.6 删除文件 1 PHP文件系统 1.1 PHP文件的读取 文件读取的函数是file_get_c ...

  6. 租户的概念和MybatisPlus实现

    租户的概念:https://baijiahao.baidu.com/s?id=1625945681925384464&wfr=spider&for=pc MybatisPlus框架的租 ...

  7. 什么是可重入锁ReentrantLock?

    举例来说明锁的可重入性 public class UnReentrant{ Lock lock = new Lock(); public void outer(){ lock.lock(); inne ...

  8. log4J——在Spring中的使用

    log4J简介 1.通过 log4j 可以看到程序运行过程中更详细的信息 (1)经常使用 log4j 查看日志 2.使用 (1)导入 log4j 的jar包 (2)复制 log4j 的配置文件,复制到 ...

  9. 10分钟go crawler colly从入门到精通

    Introduction 本文对colly如何使用,整个代码架构设计,以及一些使用实例的收集. Colly是Go语言开发的Crawler Framework,并不是一个完整的产品,Colly提供了类似 ...

  10. Linux ftp服务器部署(最简单的ftp教程)

    之前在阿里云领了一个ECS服务器(顺便说一句,白嫖的,真香~),就想着做点什么,然后试着做个 ftp 站点,因为第一次尝试,结果走了不少弯路.最后终于完成了,研究了两天(哎~,脑壳笨没办法)就想着记录 ...