mysql安全管理
数据库管理系统用于管理数据库服务器的各种数据库资源,MYSQL是一个支持多用户的数据库管理系统,实现多用户下,各种数据库资源的安全访问控制,确保数据库资源安全访问成为了数据库管理系统的核心功能。MYSQL安全管理是指允许合法账户访问合法数据库资源,并拒绝非法用户访问非法数据库资源。可以看出,MYSQL安全管理与MYSQL账户管理密不可分。
1.安全管理
假设用户拥有某些权限(update,delete等),MYSQL账户可以分为
MYSQL服务实例级别:可以修改MYSQL服务器上所有数据库所有表的记录
MYSQL数据库级别:可以修改某个数据库所有表的记录
MYSQL表级别:可以修改某个表的记录
另外还有MYSQL字段级别,以及MYSQL存储程序级别的账户。
2.MYSQL身份验证
mysql系统数据库记录了MYSQL的账户信息以及MYSQL账户的访问权限,进而实现了MYSQL账户的身份认证以及权限验证。
有关MYSQL账户的身份认证信息记录在mysql系统数据库中的user系统表中。
有关MYSQL服务实例级别账户的权限验证信息记录在db系统表中。
有关MYSQL表级别账户的权限验证信息记录在tables_priv系统表中。
有关MYSQL字段级别账户的权限验证信息记录在columns_priv系统表中。
有关MYSQL存储程序级别账户的权限验证信息记录在procs_priv系统表中。
3.MYSQL身份认证流程:
(1)在某台主机A上以root身份连接MYSQL服务器,这个过程是root账户的身份认证。
(2)root账户具有至高无上的权限,包括grant权限。root账户在命令提示符窗口A执行grant命令,创建MYSQL账户B,并为该账户绑定相应的资源访问权限。
(3)在某台合法登录主机B上打开命令提示符窗口B,以MYSQL账户B的身份链接MYSQL服务器。这个过程称为MYSQL账户B的身份认证。
(4)MYSQL账户B在命令提示符窗口B上执行MYSQL命令或者SQL语句,这些MYSQL命令或者SQL语句在执行前必须经过权限验证,判断MYSQL账户B是否具有权力执行该MYSQL命令或者语句。权限验证一旦通过,该账户则可以访问相应的数据库资源,否则MYSQL服务实例拒绝MYSQL账户B的资源访问。
4.MYSQL账户与权限表
MYSQL身份认证时,需要提供账户名,密码以及登陆主机IP地址信息。
MYSQL安全管理通过权限表实现MYSQL账户的身份认证以及权限验证,这些权限表存储引擎全部是MYISAM,主键全部为复合主键,字符集全部是UTF8,字符序全部是utf8_bin。
权限表主要包含两类字段:作用域字段和权限类型字段。作用域字段构成了各个权限表的主键,记录了该账户可以访问的数据库资源。权限类型字段定义了MYSQL账户对指定的数据库资源可以进行何种类型的访问。
(1)grant命令
格式:
grant 权限名称[(字段列表)]
[权限名称[(字段列表)]]…
on [(数据库资源类型)] 数据库资源
to MYSQL账户1 [, MYSQL账户2] …
[with grant option]
说明:数据库资源可以是*.*,db_name.*,db_name.table_name以及db_name.routine_name,分别表时MYSQL服务实例,MYSQL数据库,MYSQL数据库表以及MYSQL数据库的存储过程或者函数。
MYSQL账户包括账户名,密码以及登录主机等信息,而with grant option是赋予grant权限
(2)创建MYSQL服务实例级别的账户
grant all privileges on *.* to ‘server_user’@‘%’ identified by ‘password’;
创建账户名为“server_user”,密码为password,‘%’表示任何主机都可以连接,并且*.*表示所有数据库的所有数据库对象,all privileges表示该账户拥有所有权限(grant权限除外)。
(3)创建MYSQL数据库级别的账户
grant all privileges on choose.* to ‘database_user’@‘192.168.1.%’ identified by ‘password’ with grant option;
(4)创建表级别的账户
grant all privileges on table choose.choose to ‘table_user’@‘%’ identified by ‘password’ with grant option;
(5)创建字段级别的账户(假设表choose上的score字段)
grant select(score), insert(score) on table choose.choose to ‘column_user’@‘%’ identified by ‘password’;
(6)创建存储程序级别的账户
账户仅仅拥有choose数据库存储过程get_student_course_proc()与函数to_chinese_fn()的执行权限。
grant execute on procedure choose.get_student_course_proc to ‘%’@‘192.168.1.103’ identified by ‘password’;
5.账户管理
(1)创建账户
create user ‘user1’@‘localhost’ identified by ‘password’;
(2)查看账户信息
show grants for ‘user’@‘%’;
(3)删除账户
drop user ‘table_user’@‘%’;
(4)修改已有账户的信息
使用grant命令操作已有的账户,可以向已有的账户增加权限,修改已有帐户的密码。
使用revoke命令可以撤销已有账户的已有权限:
例如:revoke select on choose.* from ‘admin_user’@‘%’;
(5)已有账户的重命名
rename user old_user to new_user
(6)修改账户密码
set password [for user] = password(‘新密码’);
(7)使用更新语句后,还需要执行“flush privileges”或者重启mysql才能生效。