Linux服务器安全配置之MySQL

1、设置root用户的安全口令

  • 法1 用mysqladmin命令来改root用户口令

# mysqladmin -uroot password newpassword

  • 用set password修改口令

mysql> set password for root@localhost=password('ecan5com');

  • 直接修改user表的root用户口令

mysql> use mysql;
mysql> update user set password=password('ecan5com') where user='root';
mysql> flush privileges;

2、删除默认的数据库和用户

我们的数据库是在本地,并且也只需要本地的php脚本对mysql进行读取,所以很多用户不需要.mysql初始化后会自动生成空用户和test库,这会对数据库构成威胁,我们全部删除.

mysql> use mysql;  
mysql> delete from db;  
mysql> delete from user where not(host="localhost" and user="root");  
mysql> flush privileges;

3、改变默认mysql管理员的名称(仅为建议)

因为默认的mysql的管理员名称是root,所以如果能够修改的话,能够防止一些脚本小子对系统的穷举.我们可以直接修改数据库,把root用户改为"admin".

mysql> use mysql;  
mysql> update user set user="admin" where user="root";  
mysql> flush privileges;

4.设置web应用专用mysql用户并控制权限

use mysql;
INSERT INTO user(Host,User,Password) VALUES('localhost','username',PASSWORD('yourpass'));

web应用一般只要有create,insert,select,update,delete,drop等权限就可以。有需要特殊数据库 特殊权限的可以单独赋予权限。

mysql权限管理 grant&revoke

一、GRANT 语句语法

GRANT privileges (columns)  ON what TO user IDENTIFIEDBY "password" WITH GRANT OPTION

语句各部分含义解释如下:

  1. privileges 分配给用户的权限。下表列出了可在GRANT 语句中使用的权限说明符;
    privileges权限说明符
  2. columns 权限适用的列。这是可选的,只来设置列专有的权限。如果命名多于一个列,则用逗号分开。
  3. what 权限应用的级别。权限可以是全局的(适用于所有数据库和所有的表)、数据库专有的(适用于某个数据库中的所有表),或表专有的。可以通过指定一个columns子句将权限授予特定的列。
  4. user 使用权限的用户。它由用户名和主机名组成。如:root@localhost
  5. password 分配给该用户的口令。这是可选的。如果您不给新用户指定IDENTIFIEDBY子句,该用户不分配口令(是非安全的)。对于已有的用户,任何指定的口令将替代旧口令。如果不指定新口令,用户的旧口令仍然保持不变。当您确实要使用IDENTIFIEDBY时,该口令串应该是直接量,GRANT 将对口令进行编码。当用SET PASSWORD语句时,不要使用PASSWORD() 函数。
  6. WITH GRANT OPTION 子句是可选的。如果包含该子句,该用户可以将GRANT 语句授予的任何权限授予其他的用户。可以使用该子句将授权的能力授予其他的用户。

二、REVOKE 语句

为了收回某个用户的权限,可使用REVOKE 语句。除了要用FROM 替换TO 并且没有IDENTIFIEDBY 或WITH GRANT OPTION 子句外,REVOKE 的语法与GRANT 语句非常相似:

REVOKE privileges (columns) ON what FROM user

user 部分必须与您想要取消其权限的用户的原始GRANT 语句的user 部分相匹配。priv i l e g e s 部分不需要匹配,您可用GRANT 语句授权,然后用REVOKE 语句取消其中的一部分。

REVOKE 语句只删除权限,不删除用户。用户的项仍然保留在user 表中,即使您取消了该用户的所有权限也是如此。这意味着该用户仍然可连接到服务器上。要想删除整个用户,必须用DELETE 语句将该用户的记录从user 表中直接删除。

更多相关内容请点击

5.mysql安全配置

  • file_priv 权限不付给管理员以外的用户,防止出现load data '/etc/passwd'到表中再用select 显示出来的问题
  • 不要将process或super权限付给非管理用户,该mysqladmin processlist可以列举出当前执行的查询文本;super权限可用于切断客户端连接、改变服务器运行参数状态、控制拷贝复制数据库的服务器
  • 禁止远程访问方法 1.Host=localhost 2.在my.ini或my.cnf中添加bind-address=127.0.0.1
  • 确信在mysql目录中只有启动数据库服务的用户才可以对文件有读和写的权限
  • 关闭phpmyadmin空密码登录:
    config.inc.php(根目录)或者config.default.php(根目录)
    再则:libraries\config.default.php
    (由于版本不一样可能涉及的文件不同,基本为这三个文件)
    中的$cfg['Servers'][$i]['AllowNoPassword'] = false;
    改为$cfg['Servers'][$i]['AllowNoPassword'] = true;
  • phpmyadmin不自动登录
    $cfg['Servers'][$i]['auth_type'] = 'cookie'; //原始设置为config
    $cfg['blowfish_secret'] = '这里输入一串字符';
    $cfg['Servers'][$i]['user'] = 'username';
    $cfg['Servers'][$i]['password'] = 'yourpass';

实例笔记:

mysql> use mysql;
mysql> INSERT INTO user(Host,User,Password) VALUES('localhost','username',PASSWORD('yourpass'));
mysql> flush privileges;
mysql> GRANT [CREATE,]SELECT,INSERT,DELETE,UPDATE,DROP ON db_name.* TO dbUser@localhost IDENTIFIED BY "password";
mysql> flush privileges;
参考文章

数据库与服务器安全选项拾遗

Mysql数据库的用户帐号管理

如何提高MySql的安全性?

标签: mysql, revoke, grant, privileges

添加新评论