数据库–创建安全访问账户
是否经常听过某某公司离职程序员删库跑路这样的段子?关于这里面的江湖恩仇,各位客官就臆想一下得了。咋就说说为何会出现这样的桥段呢?原因很简单,要么他知道了数据库root账户的密码,或者是他开发程序中使用数据库账户权限过高,拥有drop权限,导致出现怨气之后,一个drop命名,删库跑路。
就数据库安全操作这块,简而言之,谨慎开放root账户,尤其root账户密码,能设置只允许root账户本地访问那就最好。对于开发者而言,创建普通用户,并设置好对数据库(可指定数据库,数据库表)访问权限就好。下面就看看对于数据库创建普通账户,并对账户设置账户权限的流程。
1. 登录root账户
mysql -uroot -p
输入密码即可登录mysql root账户
2. 创建新账户
可查看现有用户及host访问
mysql> select Host,User from mysql.user;
创建新账户test并设置密码为password,并设置为本地host ip登录
mysql> create user test@localhost identified by 'password';
-- 如果想要设置某个允许某个地址登录为:
-- test@‘192.168.1.85'
-- 不设置 create user test identified by 'password';则默认为“%”所有ip地址
mysql> flush privileges ;
-- 创建用户或者修改用户密码之后,我们需要执行指令flush privileges;刷新MySQL的系统权限相关表,使操作生效,以免出现拒绝访问。
3. 设置权限
修改访问host地址,"%"为允许任何地址访问,可设置本地,如localhost
mysql> update mysql.user set host = '%' where user = 'test';
设置对数据的访问:
如:设置对数据库mall下所有数据库表的操作,可test用户查询开放mall下表查询、修改、添加操作
mysql> grant select,update,insert on mall.* to test@'%' identified by 'password';
mysql> flush privileges;
注意:上面我们没有赋予delete删除权限,因此test用户没有删除数据库mall下面数据的权限
如果需要设置所有权限:
mysql> grant all privileges on mall.* to test@'%' identified by 'password';
mysql> flush privileges;
设置对所有数据库及表的操作,以下为粗暴设置法:
mysql> grant all privileges on *.* to 'test'@'%';
mysql> flush privileges;
撤销权限:
-- 撤销update权限
mysql> revoke update on mall.* from test@'%';
-- 撤销所有权限
mysql> revoke all on mall.* from test@'%';
mysql> flush privileges;