mysql grant授权与update密码

 grant all privileges on *.* to root@"%";  远程任意主机的所有权限

 FLUSH PRIVILEGES;  刷新

习惯了使用Navicat For MySQL之类的工具带来的便利,所以对mysql在命令行下的操作渐于生梳 。之前虽然mysql也对外不公开,不过可以使用Navicat For MySQL提供的ssh连接直连到现网的主机上,再进行操作 。但目前在设置过堡垒机和安全优化后,不需要对公的 mysql 不但取消了公网IP ,而且隐于堡垒机之后 。这样再使用工具就不好操作了 。以至于要新增用户,一时连grant授权和update密码都不知道怎么用了。

一、grant授权

grant命令的格式如下:

grant 权限on 数据库对象to 用户

例如,给一个名为common的用户,让其在任意主机上可以连接到testdb上进行查询、插入、更新、删除操作,具体grant 如下:

grant select on testdb.* to common@'%'
grant insert on testdb.* to common@'%'
grant update on testdb.* to common@'%'
grant delete on testdb.* to common@'%'

其中的%号表示任意主机 ,对一段IP设置为 192.168.0.%,对本机设置,后面就换为localhost 。不过上面的写法太繁琐,完全也可以用一条命令完成操作:

grant select, insert, update, delete on testdb.* to common@'%'

平时常用的权限如下图:

mysqlgrant

扫描二维码关注公众号,回复: 1130706 查看本文章

该图是使用Navicat For MySQL 工具操作时,截的一个图 。出于安全考虑,一般的程序只需select 、insert、update、delete、index、create tmp tables 或者create view几个权限完全够用了。没必要赋予更大的权限  ,程序有特别需要例外 。

想赋予上面提到的几个权限可以如下sql语句完成:

CREATE USER '361way'@'192.168.0.%' IDENTIFIED BY '12345';
grant select,insert,update,delete,create,index,trigger,create temporary tables on sky.* to '361way'@'192.168.0.%';
FLUSH PRIVILEGES;

注:特别注意下创建临时表的权限和上图上的不一致 。具体详细用法也可以参看官方文档 

二、查看用户及所授权限

如果想查看给所有用户,可以查看mysql.user表,查看具体用户所授予的权限,可以使用show grants命令。

1、查看所有用户:

mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;+---------------------------------------+| query                                 |+---------------------------------------+|User:'cactiuser'@'%';|||User:'dba'@'%';||User:'root'@'%';||User:'slave'@'%';||User:'root'@'127.0.0.1';||User:'root'@'192.168.166.200';|……………………………………省略

2、查看授权及权限回收:

mysql> show grants for'cactiuser'@'%';+-------------------------------------------------------------------------------------------------------------------+|Grantsfor cactiuser@%|+-------------------------------------------------------------------------------------------------------------------+| GRANT PROCESS, SUPER ON *.* TO 'cactiuser'@'%' IDENTIFIED BY PASSWORD '*DAFF917B80E3314B1ABECBA9DF8785AFD342CE89'|| GRANT ALL PRIVILEGES ON `cacti`.* TO 'cactiuser'@'%'|+------------------------------------------------------------------------------------------------------------------

默认使用show grants命令,后面不加参数时,查看的是root用户的权限信息 。也可以通过查看mysql.user表查看详细的权限信息:

mysql> select * from mysql.user where user='cactiuser' G
***************************1. row ***************************Host:%User: cactiuser
             Password:*DAFF917B80E3314B1ABECBA9DF8785AFD342CE89
          Select_priv: N
          Insert_priv: N
          Update_priv: N
          Delete_priv: N
          Create_priv: N
            Drop_priv: N
          Reload_priv: N
        Shutdown_priv: N
         Process_priv: Y
            File_priv: N
           Grant_priv: N
      References_priv: N
           Index_priv: N
           Alter_priv: N
         Show_db_priv: N
           Super_priv: Y
Create_tmp_table_priv: N

mysql.user表所具有的字段可以通过desc查看:

mysql> desc mysql.user;+-----------------------+-----------------------------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-----------------------+-----------------------------------+------+-----+---------+-------+|Host| char(60)| NO   | PRI ||||User| char(16)| NO   | PRI ||||Password| char(41)| NO   |||||Select_priv| enum('N','Y')| NO   || N       ||************************************+-----------------------+-----------------------------------+------+-----+---------+-------+39 rows inset(0.00 sec)

想要查看当前所登陆使用的用户可以使用select user() :

mysql> select user();+----------------+| user()|+----------------+| root@localhost |+----------------+1 row inset(0.00 sec)

想要收回某些权限,可以使用REVOKE 命令,其用法同grants类似 。也可以使用help revoke查看用法 。

三、更新密码

1、mysql shell下更改密码:

mysql> use mysql;
mysql>SET PASSWORD FOR 'user-name-here'@'hostname-name-here'= PASSWORD('new-password-here');

或者使用update语句:

UPDATE mysql.user SET Password=PASSWORD('new-password-here') WHERE User='user-name-here' AND Host='host-name-here';

例如更新tom用户的密码为foobar:

SET PASSWORD FOR 'tom'@'localhost'= PASSWORD('foobar');
UPDATE mysql.user SET Password=PASSWORD('foobar') WHERE User='tom' AND Host='localhost';

更改完成后,想要立即重载权限,可以使用下面的命令操作:

FLUSH PRIVILEGES;

2、mysqladmin命令修改法:

mysqladmin -u用户名-p 密码 password 新密码

猜你喜欢

转载自hugoren.iteye.com/blog/2209352