一、基本的用户管理
新安装的mysql默认只有root用户,如果所有应用都使用root用户,将涉及到许多的权限与安全问题,所以需要创建不同的用户并设置密码来执行不同的操作。
mysql中的用户与密码存在mysql库的user表里。
登录mysql使用如下命令查看用户及密码
mysql>select User,Password from mysql.user;
下面演示创建、删除用户与密码设置
1.创建用户
mysql> create user mytest1; Query OK, 0 rows affected (0.01 sec)
2.设置密码
mysql> set password for mytest1 = password(‘mi123123‘); Query OK, 0 rows affected (0.00 sec)
说明:1.使用“for username”为指定用户设置密码,不然就是为当前用户设置密码。
2.使用password(‘密码‘)方式为要设置的密码进行加密,不然就会明文保存,不安全。
我们还可以在创建用户的同时设置密码
mysql> create user mytest2 identified by ‘my123123‘; Query OK, 0 rows affected (0.00 sec)
3.查看新建的用户以及设置的密码
mysql> select User,Password from user; +---------+-------------------------------------------+ | User | Password | +---------+-------------------------------------------+ | root | | | root | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | | mytest1 | *BB9971EEFFFEF5DB7694D41750FC84489F86A753 | +---------+-------------------------------------------+
4.如果需要更改用户的名称,可以使用rename user改变用户名称
mysql> rename user mytest1 to mytest3; Query OK, 0 rows affected (0.00 sec)
5.不再需要的用户可以进行删除
mysql> drop user mytest2; Query OK, 0 rows affected (0.00 sec)
二、基本的权限管理
以上的命令是用户的创建与设置密码等,虽然创建的用户,但是还是不能登录,必须授予权限。
演示登录
# mysql -u mytest3 -p‘my123123‘ ERROR 1045 (28000): Access denied for user ‘mytest3‘@‘localhost‘ (using password: YES)
权限包括2个部分:
1)是否具有连接到mysql的权限;
2)是否具有对所执行动作、操作对象的权限;
对操作对象的权限分为:全局层级、数据库层级、表层级、列层级等
使用grant进行授权,使用revoke收回授权
grant 权限 on 权限层级 to 用户名@主机 identified by ‘密码‘;
1)权限可以单独指定一些权限,如查询、更新、删除等,或者所有权限"all privileges";
2)权限层级可以设置为全局(*.*)、数据库级(mydbname.*)、表层级(mydbname.tablename)等;
3)用户名可以是之前建好的,如果不存在会自动创建新用户;
4)主机可以是本机(‘localhost‘),可以是一个网段(‘192.168.1.%‘),或者任意主机(‘%‘);
5)identified by 设置用户访问密码,是可选的,如果没有,将不需要密码访问。
1.授权mydbuser用户在本机访问mysql时,对mydbtest库的所有表具有任意权限
mysql> grant all on mydbtest.* to mydbuser@‘localhost‘ identified by ‘my123‘; Query OK, 0 rows affected (0.00 sec)
使用新用户访问
# mysql -u mydbuser -p‘my123‘ Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 5.1.61 Source distribution Copyright (c) 2000, 2011, 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>
2.只为mydbuser2在mydbtest数据库中授予select、update、drop权限
mysql> grant select,update,drop on mydbtest.* to mydbuser2@‘localhost‘ identified by ‘my123‘; Query OK, 0 rows affected (0.00 sec)
3.当权限不在需要的时候,使用revoke收回用户权限,可以全部收回,也可部分收回
首先来查看mydbuser在mydbtest中的权限,在mysql库中,有个db表,记录着每个数据库及对应用户的权限
mysql> select * from mysql.db where user=‘mydbuser‘\G *************************** 1. row *************************** Host: localhost Db: mydbtest User: mydbuser Select_priv: Y Insert_priv: Y Update_priv: Y Delete_priv: Y Create_priv: Y Drop_priv: Y Grant_priv: N References_priv: Y Index_priv: Y Alter_priv: Y Create_tmp_table_priv: Y Lock_tables_priv: Y Create_view_priv: Y Show_view_priv: Y Create_routine_priv: Y Alter_routine_priv: Y Execute_priv: Y Event_priv: Y Trigger_priv: Y 1 row in set (0.00 sec)
4.收回mydbuser对mydbtest库的delete、drop、index操作权限。
mysql> revoke delete,drop,index on mydbtest.* from mydbuser@‘localhost‘; Query OK, 0 rows affected (0.00 sec)
revoke与grant使用方法类似,只需要将to改成from即可。
5.收回mydbuser对mydbtest库所有的操作权限
mysql> revoke all on mydbtest.* from mydbuser@localhost; Query OK, 0 rows affected (0.00 sec)