一、创建mysql用户
1 创建mysql数据库的管理用户
/usr/bin/mysqladmin -uroot password mopgaming
password前面一定不能--password,那是登录时需要输入的。如上命令回车即可。
2.1 创建一般用户,并授权 GRANT
工作中web服务器和mysql服务器不在同一台机器上,所以需要通过mysql的远程账户访问mysql
语法:
mysql> grant [权限1,权限2,..权限n] on [数据库名].[表名] to ['用户名']@['web服务器ip地址'] identified by ['密码'];
grant all privileges on lottery.* to test@'%' identified by 'mopgaming';
flush privileges; 刷新系统权限
授权test用户所有的权限,针对lottery数据库的所有表,test用户可以被任意ip登录,验证密码mopgmaing
grant select,update,create on lottery.* to test@x.x.x.x identified by 'mopgaming';
flush privileges; 刷新系统权限
授权test用户select,update,create权限,针对lottery数据库的所有表,并且只有指定ip(x.x.x.x)才能登录该用户,验证密码mopgaming
a.数据库操作权限,14个权限:
select,update,create,insert,delete,drop,index,alter,grant,references,reload,shutdown,process,file
也可以被all privileges或者all代替,赋予所有权限。
b.数据库表名称:
可以被 *.* 代替,表示针对该服务器上所有数据库和表授权
c.用户地址:
可以是localhost,只针对本地用户,可以在本地登录mysql。也可以是ip,hostname主机名,域名,针对指定主机授权,创建的用户不能本地mysql -uxxxx -p形式登录。也可以是 '%' ,表示授权任何主机连接,创建的用户不能本地mysql -uxxxx -p形式登录,‘10.10.86.%’指定给该网段的主机授权。
d.验证密码:
不能为空,否则创建失败,授权失败。
2.2 创建用户方法二
#create user 'xxx(用户名)'@'用户地址(ip/localhost/域名/%)' identified by 'xxx(验证密码)'
#mysql -uroot -pmopgaming
>cteate user test2@localhost identified by 'mopgaming';
>flush privileges; 刷新系统权限
该方法创建test2用户可以登上,但是没有授予mysql数据库任何操作权限,只能使用当前用户下生成的数据库。若再grant授权,则可以正常使用:
>grant all privileges on *.* to test2@'%' identified by 'mopgaming';
>flush privileges; 刷新系统权限
二、撤销用户权限
revoke 权限 on 库名.表名 from 用户名@用户地址;
mysql -uroot -p
>revoke select,insert on *.* from test2@'%'; 撤销test2用户select,insert权限。
>revoke all on test.* from test2@'%'; 撤销test2用户,针对test库的所有权限。
三、删除用户
1 直接删除用户 drop user:将用户信息全部删掉,包括user表和mysql.db表中的权限信息。
mysql -uroot -p
>drop user test1@'%';
>flush privileges;
2 删除用户 delete from user:只会清除对应user创建的表,其他比如db表中信息还是存在。(通过 >select * from db;还可以看到该用户对应的权限。如果delete删除该用户后,再最小权限创建一个同名的用户,那么会重用以前的权限。)
mysql -uroot -p
>use mysql;
>delete from user where user=test1 and host='%';
>flush privileges;
四、修改指定用户密码
#mysql -uroot -p
update mysql.user set password=password('新密码') where user="test2" and host="%";
flush privilieges;
修改指定用户密码的命令必须按照此格式。
五、远程访问测试授权的mysql用户
#mysql -hx.x.x.x(mysql服务器的ip) -uxxx(授权的用户名) -pxxx(验证密码)
mysql -h10.10.87.105 -utest2 -pmopgaming
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 18
Server version: 5.5.44-MariaDB MariaDB Server
copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
六、查询相关命令
1 查询mysql用户列表:
MariaDB [(none)]> select host,user from mysql.user;
+--------------+-------+
| host | user |
+--------------+-------+
| 127.0.0.1 | root |
| ::1 | root |
| localcentos7 | |
| localcentos7 | root |
| localhost | |
| localhost | root |
| localhost | test1 |
+--------------+-------+
MariaDB [(none)]> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
+------------------------------+
| query |
+------------------------------+
| User: 'root'@'127.0.0.1'; |
| User: 'root'@'::1'; |
| User: ''@'localcentos7'; |
| User: 'root'@'localcentos7'; |
| User: ''@'localhost'; |
| User: 'root'@'localhost'; |
| User: 'test1'@'localhost'; |
+------------------------------+
2 查询授权状态:
#mysql -uroot -p
>use mysql; 说明数据库状态信息保存在mysql数据库下。
> select * from db;
+------+---------+-------+-------------+-------------+-------------+----------
| Host | Db | User | Select_priv | Insert_priv | Update_priv | Delete_pri
+------+---------+-------+-------------+-------------+-------------+-----------
| % | test | | Y | Y | Y | Y
| % | test\_% | | Y | Y | Y | Y ..........
| % | test | test2 | Y | Y | N | N
+------+---------+-------+-------------+-------------+-------------+-----------
可见test2用户被授予的权限:只针对test数据库,有select,insert权限。
PS:mysql库中授权表解析
mysql授权表共有5个:user,db,host,tables_priv和columns_priv
每个表用途和内容”
user表:
列出服务器的用户及其口令,并且指出他们有那种权限。在user表总启用的权限都是全局权限,并适用所有数据库。例如,某用户启用delete权限,则可以在任何表中删除记录。
db表:
列出具体数据库对应的权限。在这里指定的权限适用于一个数据库中所有表。
host表:
host表和db表结合使用在一个较好层次上控制特定主机对数据库的访问权限。这个表不受grant和revoke语句的影响,所以,可能根本用不到。
tables_priv表
指定表级别的权限,在这里指定的一个权限适用于一个表的所有列。
columns_priv表
指定表内列级别的权限,在这里指定的权限适用于一个表的特定列。
参考资料:
1.Linux下给mysql创建用户分配权限
http://blog.csdn.net/chaoloveyou/article/details/6664718
2.linux下创建mysql用户
http://blog.sina.com.cn/s/blog_4c6e822d0102dyd5.html
3.MySql中添加用户,新建数据库,用户授权,删除用户,修改密码
http://blog.csdn.net/h1017597898/article/details/9815987
4.MySQL中授权(grant)和撤销授权(revoke)
http://blog.csdn.net/andy_yf/article/details/7487519