数据库的安全配置
在数据库管理系统中, MySQL 具有的高性能、高可靠性、易用性及开源免费的特点,使其成为个人使用者和中小企业的首选,成为世界上最流行的开源关系型数据库管理系统。本章将以MySQL 为对象介绍如何保证数据库的安全性。
本节将以MySQL 为实例,介绍如何对数据库进行安全配置。
用户、口令、权限设置
1.设置root 用户口令
缺省安装MySQL 后,root 用户拥有所有权限,且是空口令。为了安全起见,必须为root 用户设置口令。可以采用如下方法设置root 口令:
方法1 :使用MySQL 自带的命令mysaladmin 设置root 口令
% mysqladmin -u root password 'rootpassword'
方法2: 使用set password 设置口令
%mysql> SET password for root@localhost=PASSWORD('rootpassword');
方法3: 登录数据库,修改数据岸mysql 下user 表的字段内容
%mysql> use mysql;
%mysql> UPDATE user SET password=PASSWORD('rootpassword') WHERE user='root';
%mysql> FLUSH PRIVILEGES; / /强制刷新内存授权表
2. 删除默认数据库和数据库用户
MySQL 初始化后会自动生成空用户和test 数据库,进行安装的测试,这会对数据库的安全构成威胁,有必要全部删除,只保留单个root 用户即可,以后根据需要再增如用户和数据库。
(1)删除test 数据库
%mysql> SHOW DATABASES; //显示所有数据库
%mysql> DROP DATABASE test; //删除数据库test
(2)删除非root 用户
%mysql> DELETE FROM user WHERE NOT (User='root' );
(3)删除空口令的root 用户
%mysql> DELETE FROM user WHERE User='root' and password='';
%mysql> FLUSH PRIVILEGES;
3. 改变MySQL 默认管理员名称
MySQL 默认的管理员名称是root,一般情况下都没进行修改,这在一定程度为攻击数据库提供了便利,可修改为不易被猜中的用户名。
%mysql> UPDATE user SET User='newroot' WHERE User='root'; //改成不易被猜测的用户名
%mysql> FLUSH PRIVILEGES;
4. 修改用户口令
为防止口令泄露导致的数据库非法访问,需定期修改用户口令。
%mysql> use mysql;
%mysql> UPDATE user SET password=PASSWORD('newpassword') WHERE User='usemame' and Host='host';
5. 用户授权
用户授权就是给予用户一定的访问数据库的权限,主要是用SQL 语言的GRANT 语句授权。授权操作的数据库对象包括表、视图与列等,经过授权的用户可以在指定的数据库对象上进行特定的操作。
%mysql> GRANT privi1edges ON databasename.tablename TO 'usemame'@'host';
说明privi1edges 是指用户的操作权限,如SELECT 、INSERT 、UPDATE 等操作权限,若是给用户授予全部权限,用ALL 或者ALL PRIVILEGES; databasename 是指数据库名tablename 是指表名:若要授予用户对所有数据库和表的相应操作权限,可用*表示(如*.*)。
例1: 将数据库whu 的所有权眼授权给用户John
%mysql> GRANT ALL PRIVILEDGES ON whu. * TO 'John'@'localhost';
例2: 将数据库whu 的student 表的插入权限授权给用户David
%mysql> GRANT INSERT ON whu.student TO 'David'@'%';
例3: 将数据库whu 的course 表的查询、插入、更新权限授权给用户David
%mysql> GRANT SELECT,INSERT,UPDATE ON whu.course TO 'David'@'%';
6. 用户权限查看及收回
可根据数据库安全性的需求,收回指定用户的权限。
(1)查看用户权限,使用SHOWGRANTS 语句
%mysql> SHOW GRANTS FOR 'username'@'host';
(2) 收回用户权限,使用阻VO阻语句
%mysql> REVOKE priviledges ON databasename.tablename FROM 'usemame' @'host';