首页 > mysql > mysql权限管理

mysql权限管理

作者:bin

在介绍权限管理前,我们要先理解,mysql权限的机制:

系统用的权限表都在”mysql”这个数据库中,这个数据库在mysql被安装是就会创建,其中有user、db、host,还有后缀为priv的表。

权限范围以此递减:user->db->tables_priv->columns_priv。

例如在user中有select权限,即在所有数据库,表中都有select权限,使用如下命令查看权限:

SELECT * FROM `user` where user = 'root' \G;

 

一、创建账户

有2种方式创建账户,使用grant语法创建或者直接修改授权表,推荐使用grant,因为这样不容易出错;

创建一个ben用户,权限是可以修改所有数据库

grant all privileges on *.* to ben@localhost

这里的第一个*就所有数据库,第二个*就是所有表 ben是账户名,localhost是连接的ip

然后我们查看user表,发现ben拥有除了grant以外的所有权限,我们也可以给他加上grant

grant all privileges on *.* to ben@localhost with grant option;

然后我们可以设置密码为123:

grant all privileges on *.* to ben@localhost identified by '123'  with grant option;

我们可以创建用户,可以从任意ip访问,并且只有select权限:

grant select on *.* to 'ben'@'%' identified by '123' ;

只运行以192.168.123.开头的host进行连接:

grant select on *.* to 'ben'@'192.168.123.%' identified by '123' ;

任何用户从192.168.123.1进行连接

grant select on *.* to ''@'192.168.123.1' identified by '123' ;

如果一个用户满足多个user表中的连接权限,那么会根据host进行排序,匹配的等一行;

 

二、查看账户权限

mysql> show grants for ben@localhost;

+-------------------------------------------------------------------------+
| Grants for ben@localhost |
+-------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'ben'@'localhost' IDENTIFIED BY PASSWORD <secret> |
| GRANT SELECT ON `test`.* TO 'ben'@'localhost' |
+-------------------------------------------------------------------------+

mysql 5.0之后,也可以通过information_schema查看权限

mysql> use information_schema;

mysql> select * from SCHEMA_PRIVILEGES where grantee="'ben'@'localhost'"; 
+-------------------+---------------+--------------+----------------+--------------+
| GRANTEE | TABLE_CATALOG | TABLE_SCHEMA | PRIVILEGE_TYPE | IS_GRANTABLE |
+-------------------+---------------+--------------+----------------+--------------+
| 'ben'@'localhost' | def | test | SELECT | NO |
+-------------------+---------------+--------------+----------------+--------------+

三、更改账号权限

使用grant 新增权限,使用revoke回收权限;

grant上面介绍过来,现在介绍一下revoke,删除delete权限从ben@localhost:

revoke delete on *.*  from  ben@localhost;

值得注意的是usage不能被回收,也就是说revoke不能用来删除用户;

四、修改密码

1、使用mysqladmin

mysqladmin -u ben -p 123 password 'newpassword'

2、执行set password

mysql>set password for 'ben@localhost' = password('123');

3、执行set password修改自己密码

mysql> set password = password('123');

4、直接改表

mysql>insert into user (Host, User, Password) values ('localhost', 'ben', '123');

mysql>flush privileges;

5、我们还可以直接用md5加密后的密码直接进行设置

grant usage on *.* to ben@localhost identifed by password '59BC28EFBBFE2A5CA4C723FBB8760D7FBD178761';

注意前面没有* ,或者

mysql>set password = '59BC28EFBBFE2A5CA4C723FBB8760D7FBD178761'

五、账号资源限制

mysql还可以配置每个账号实际具有的资源限制:

1、单账号每小时执行查询次数(MAX_QUERIES_PRE_HUOR num);

2、单账号每小时执行更新次数(MAX_UPDATES_PRE_HUOR num);

3、单账号每小时连接服务器次数(MAX_CONNECTIONS_PRE_HUOR num);

4、单账号并发连接次数(MAX_USER_CONNECTIONS_PER_HOUR num);

设置的方法为[option]为上面括号中内容:

grant all privileges on *.* to ben@localhost with [option]

一小时10次;

grant all privileges on *.* to ben@localhost with MAX_QUERIES_PRE_HUOR 10;

六、删除账号

drop user ben@localhost;

 

您必须 [ 登录 ] 才能发表留言!