MySQL审计工具Audit插件使用

MySQL审计工具Audit插件使用,第1张

一、介绍MySQL AUDIT

MySQL AUDIT Plugin是一个 MySQL安全审计插件,由McAfee提供,设计强调安全性和审计能力。该插件可用作独立审计解决方案,或配置为数据传送给外部监测工具。支持版本为MySQL (5.1, 5.5, 5.6, 5.7),MariaDB (5.5, 10.0, 10.1) ,Platform (32 or 64 bit)。从Mariadb 10.0版本开始audit插件直接内嵌了,名称为server_audit.so,可以直接加载使用。

二进制文件地址:https://bintray.com/mcafee/mysql-audit-plugin/release

macfee的mysql audit插件虽然日志信息比较大,对性能影响大,但是如果想要开启审计,请斟酌。

二、安装使用MySQL AUDIT

# unzip audit-plugin-mysql-5.6-1.1.5-774-linux-x86_64.zip

MySQL的插件目录为:

mysql>show global variables like 'plugin_dir'

+---------------+------------------------+

| Variable_name | Value                  |

+---------------+------------------------+

| plugin_dir    | /app/mysql/lib/plugin/ |

+---------------+------------------------+

1 row in set (0.00 sec)

复制库文件到MySQL库目录下

# cp audit-plugin-mysql-5.6-1.1.2-694/lib/libaudit_plugin.so /app/mysql/lib/plugin/

# chmod a+x /app/mysql/lib/plugin/libaudit_plugin.so

加载Audit插件

mysql>INSTALL PLUGIN AUDIT SONAME 'libaudit_plugin.so'

查看版本

mysql>show global status like '%audit%'

+------------------------+-----------+

| Variable_name          | Value    |

+------------------------+-----------+

| Audit_protocol_version | 1.0      |

| Audit_version          | 1.1.2-694 |

+------------------------+-----------+

2 rows in set (0.00 sec)

开启Audit功能

mysql>SET GLOBAL audit_json_file=ON

Query OK, 0 rows affected (0.00 sec)

执行任何语句(默认会记录任何语句),然后去mysql数据目录查看mysql-audit.json文件(默认为该文件)。

当然,我们还可以通过命令查看audit相关的命令。

mysql>SHOW GLOBAL VARIABLES LIKE '%audit%'

其中我们需要关注的参数有:

1、audit_json_file

是否开启audit功能。

2、audit_json_log_file

记录文件的路径和名称信息。

3、audit_record_cmds

audit记录的命令,默认为记录所有命令。可以设置为任意dml、dcl、ddl的组合。如:audit_record_cmds=select,insert,delete,update。还可以在线设置set global audit_record_cmds=NULL。(表示记录所有命令)

4、 audit_record_objs

audit记录 *** 作的对象,默认为记录所有对象,可以用SET GLOBAL audit_record_objs=NULL设置为默认。也可以指定为下面的格式:audit_record_objs=,test.*,mysql.*,information_schema.*。

5、audit_whitelist_users

用户白名单。

三、查看审计数据

插入一些数据,查看一下mysql-audit.json文件信息(json格式),如下:

$ cat /app/mysql/data/mysql-audit.json

{"msg-type":"activity","date":"1517989674556","thread-id":"3","query-id":"39","user":"root","priv_user":"root","ip":"","host":"localhost","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"1331209","_client_version":"5.6.27","_platform":"x86_64","program_name":"mysql"},"pid":"3472328296227680304","os_user":"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","appname":"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","rows":"10","cmd":"select","objects":[{"db":"sbtest","name":"sbtest1","obj_type":"TABLE"}],"query":"select * from sbtest1 limit 10"}

审计记录文件一般存放在mysql的数据目录下。

oracle 审计功能怎么配置

审计是对选定的使用者动作的监控和记录,通常用于:

u 审查可疑的活动。例如:资料被非授权使用者所删除,此时安全管理员可决定对该 资料库的所有连线进行审计,以及对资料库的所有表的成功地或不成功地删除进行审计。

u 监视和收集关于指定资料库活动的资料。例如:DBA可收集哪些被修改、执行了多少次逻辑的I/O等统计资料。

ORACLE支援三种审计型别:

u 语句审计,对某种型别的SQL语句审计,不指定结构或物件。

u 特权审计,对执行相应动作的系统特权的使用审计。

u 物件审计,对一特殊模式物件上的指定语句的审计。

ORACLE所允许的审计选择限于下列方面:

u 审计语句的成功执行、不成功执行,或者其两者。

u 对每一使用者会话审计语句执行一次或者对语句每次执行审计一次。

u 对全部使用者或指定使用者的活动的审计。

当资料库的审计是使能的,在语句执行阶段产生审计记录。审计记录包含有审计的 *** 作、使用者执行的 *** 作、 *** 作的日期和时间等资讯。审计记录可存在资料字典表(称为审计记录)或作业系统审计记录中。资料库审计记录是在SYS模式的AUD$表中。

设定ORACLE审计

下列步骤可以设定ORACLE的审计功能:

1. 修改引数档案(init.ora,如果使用伺服器引数档案使用alter system set = scope=spfile|both,详情参照1.1节中关于引数档案的介绍),设定 AUDIT_TRAIL引数,并且重启资料库。AUDIT_TRAIL的取值如下:

l DB/TRUE:启动审计功能,并且把审计结果存放在资料库的 SYS.AUD$ 表中

l OS:启动审计功能,并把审计结果存放在作业系统的审计资讯中

l DB_EXTENDED:具有DB/TRUE的功能,另外填写AUD$的SQLBIND和SQLTEXT栏位

l NONE/FALSE:关闭审计功能

2.如果设定 AUDIT_TRAIL = OS, 还需要修改引数AUDIT_FILE_DEST。

如果作业系统支援设定AUDIT_TRAIL=OS,档案会自动存放在AUDIT_FILE

_DEST所指定的目录下,并且档名包含程序的PID。

比如:

AUDIT_FILE_DEST = $ORACLE_HOME/rdbms/audit

$ ls -l $ORACLE_HOME/rdbms/audit

-rw-rw---- 1 ora92 dba 881 Mar 17 09:57 ora_13264.aud

$ ps -ef|grep 13264

ora92 13264 13235 0 09:56:43 ? 0:00 oracleV92 (DESCRIPTION=(LOCAL=Y)

SQL>select spid, program, username from v$process

SPID PROGRAM USERNAME

------ -------------------------------------------- -------------

...

13264 oracle@frhp11 (TNS V1-V3) ora92

注意:WINDOWS NT不使用AUDIT_FILE_DEST引数,如果使用OS设定,那么审计资讯会存放在WINDOWS NT的事件日志里。下面的章节会有专门的介绍。

3. 确认审计相关的表是否已经安装

SQLPLUS>connect / AS SYSDBA

SQLPLUS>select * from sys.aud$-- 没有记录返回

SQLPLUS>select * from dba_audit_trail-- 没有记录返回

如果做上述查询的时候发现表不存在,说明审计相关的表还没有安装,需要安装。

SQLPLUS>connect / as sysdba

SQLPLUS>@$ORACLE_HOME/rdbms/admin/cataudit.sql

审计表安装在SYSTEM表空间。所以要确保SYSTEM表空间又足够的空间存放审计资讯。

4. 关闭并重启资料库

5. 设定所需要的审计资讯

下面是一个例子

SQL>connect system/manager

SQL>grant audit system to scott

SQL>connect scott/tiger

SQL>audit session

停止审计:

SQL>noaudit session

设定审计的例项:对试图尝试口令的访问的审计

本节讨论的是一个审计的例项,用于记录尝试通过野蛮尝试法破译ORACLE帐号口令的例子:

1. 修改审计相关引数(参照上一节介绍的方法)

2. 重启资料库

3. 设定审计资讯

SQL>AUDIT ALL BY ACCESS WHENEVER NOT SUCCESSFUL

4. 查询AUD$

SQL>select returncode, action#, userid, userhost, terminal,timestamp

from aud$

RETURNCODE ACTION# USERID USERHOST TERMINAL

---------- ---------- -------- -------------------- --------------------

1017 100 SCOTT WPRATA-BR

1017 100 SCOTT WPRATA-BR

1017 100 SCOTT WPRATA-BR

ORA-1017的含义为错误的使用者名称口令。通过检视AUD$表可以清楚地看到WPRATA-BR尝试破译SCOTT的口令。可以通过下面一个储存过程来分析AUD$表,找出可疑的资讯:

create or replace procedure AuditLogin(Since Varchar2,Times PLS_Integer)

is

USER_ID VARCHAR2(20)

cursor c1 is select userid,count(*) from sys.aud$ where returncode='1017' and timestamp#>=to_date(Since,'yyyy-mm-dd')

group by userid

cursor C2 IS Select userhost, terminal,TO_CHAR(timestamp#,'YYYY-MM-DD:HH24:MI:SS')

from sys.aud$ WHERE returncode='1017' and timestamp#>=to_date(Since,'yyyy-mm-dd') AND USERID=USER_ID

ct PLS_INTEGER

V_USERHOST VARCHAR2(40)

V_TERMINAL VARCHAR(40)

V_DATE VARCHAR2(40)

BEGIN

OPEN C1

dbms_output.enable(1024000)

LOOP

FETCH C1 INTO USER_ID,CT

EXIT WHEN C1%NOTFOUND

IF(CT>=TIMES) THEN

DBMS_OUTPUT.PUT_LINE('USER BROKEN ALARM:'||USER_ID)

OPEN C2

LOOP

FETCH C2 INTO V_USERhOST,V_TERMINAL,V_DATE

DBMS_OUTPUT.PUT_LINE(CHR(9)||'HOST:'||V_USERHOST||',TERM:'||V_TERMINAL||',TIME:'||V_DATE)

EXIT WHEN C2%NOTFOUND

END LOOP

close c2

END IF

END LOOP

close c1

END

/

一下是执行结果:

SQL>set serveroutput on

SQL>execute auditlogin('2004-01-01',2)

USER BROKEN ALARM:SYS

HOST:,TERM:XUJI,TIME:2004-09-22:11:08:00

HOST:,TERM:XUJI,TIME:2004-09-22:11:08:01

HOST:,TERM:XUJI,TIME:2004-09-22:11:09:29

HOST:,TERM:XUJI,TIME:2004-09-22:11:09:29

PL/SQL 过程已成功完成。

将审计相关的表移动到其他表空间

由于AUD$表等审计相关的表存放在SYSTEM表空间,因此为了不影响系统的效能,保护SYSTEM表空间,最好把AUD$移动到其他的表空间上。可以使用下面的语句来进行移动:

sql>connect / as sysdba

sql>alter table aud$ move tablespace

sql>alter index I_aud1 rebuild online tablespace

SQL>alter table audit$ move tablespace

SQL>alter index i_audit rebuild online tablespace

SQL>alter table audit_actions move tablespace

SQL>alter index i_audit_actions rebuild online tablespace

分类: ORACLE

好文要顶 关注我 收藏该文

果然

关注 - 1

粉丝 - 0

+加关注

0

0

« 上一篇:[转]oracle审计详解

» 下一篇:oracle中使用者删除不了,ORA-01940提示 “无法删除当前已连线使用者”

posted on 2015-07-31 10:37 果然 阅读(23) 评论(0) 编辑 收藏

重新整理评论重新整理页面返回顶部

注册使用者登入后才能发表评论,请 登入 或 注册,访问网站首页。

【推荐】50万行VC++原始码: 大型组态工控、电力模拟CAD与GIS原始码库

【福利】微软Azure给部落格园的你专属双重好礼

【推荐】融云释出 App 社交化白皮书 IM 提升活跃超 8 倍

【推荐】BPM免费下载

最新IT新闻:

· 新年正能量!他说iPad给予了他一次新生命

· 曝联通2016年终奖取消:集团亏损 只发基本工资

· 罗振宇跨年演讲完整版:2017年小心这5只黑天鹅

· 外媒评出2016年最差电子产品排行榜:三星Note7登顶

· 优必选机器人出新品、搭渠道,将完成20亿元融资

» 更多新闻...

最新知识库文章:

· 写给未来的程式媛

· 高质量的工程程式码为什么难写

· 循序渐进地程式码重构

· 技术的正宗与野路子

· 陈皓:什么是工程师文化?

» 更多知识库文章...

导航

部落格园

首页

联络

订阅

如何配置linux审计功能部署

java不用做任何改动就可以部署到linux系统,java编译成*.class档案只需要虚拟机器的支援,你只要在linux环境下装一个jdk就OK了,然后配置一下环境变数。 然后java的class档案或者打包好的*.jar档案考到linux目录下就可以用了.

怎么检视windows下的oracle是否开启审计功能

检视aud$表(或者dba_audit_trial检视)中是否有资料,如果有资料说明审计功能开启的

select * from aud$

select * from dba_audit_trial

检视系统开启了那些审计功能

select * from dba_priv_audit_opts系统许可权审计

select * from dba_obj_audit_opts物件许可权审计

如何检视oracle是否开启了审计功能

1、语句审计(Statement Auditing)。

对预先指定的某些SQL语句进行审计。这里从SQL语句的角度出发,进行指定。审计只关心执行的语句。

例如,audit CREATE TABLE命令,就表明对"create table"语句的执行进行记录。 不管这语句是否是针对某个物件的 *** 作

2、许可权审计(Privilege Auditing)

对涉及某些许可权的 *** 作进行审计。这里强调“涉及许可权”

例如,audit CREATE TABLE命令,又可以表明对涉及“CREATE TABLE”许可权的 *** 作进行审计。

所以说,在这种命令的情况下,既产生一个语句审计,又产生了一个许可权审计。

什么是资料库的审计功能,为什么要提供审计功能

资料库是任何商业和公共安全中最具有战略性的资产,通常都储存着重要的商业伙伴和客户资讯,这些资讯需要被保护起来,以防止竞争者和其他非法者获取。网际网路的急速发展使得企业资料库资讯的价值及可访问性得到了提升,同时,也致使资料库资讯资产面临严峻的挑战,概括起来主要表现在以下三个层面:

1. 管理风险:主要表现为人员的职责、流程有待完善,内部员工的日常 *** 作有待规范,第三方维护人员的 *** 作监控失效等等,离职员工的后门,致使安全事件发生时,无法追溯并定位真实的 *** 作者。

2. 技术风险:Oracle, SQL Server是一个庞大而复杂的系统,安全漏洞如溢位, 注入层出不穷,每一次的CPU(Critical Patch Update)都疲于奔命, 而企业和 *** 处于稳定性考虑,往往对补丁的跟进非常延后,更何况通过应用层的注入攻击使得资料库处于一个无辜受害的状态。

3. 审计层面:现有的依赖于资料库日志档案的审计方法,存在诸多的弊端,比如:资料库审计功能的开启会影响资料库本身的效能、资料库日志档案本身存在被篡改的风险,难于体现审计资讯的有效性和公正性。此外,对于海量资料的挖掘和迅速定位也是任何审计系统必须面对和解决的一个核心问题之一。

伴随着资料库资讯价值以及可访问性提升,使得资料库面对来自内部和外部的安全风险大大增加,如违规越权 *** 作、恶意入侵导致机密资讯窃取泄漏,但事后却无法有效追溯和审计。

sangfor 流量审计功能在哪

恩 你说的是深信服的上网行为管理产品吧,深信服上网行为管理产品的主要功能有:

①识别(就是所有使用者和网站以及应用系统的识别,深信服可以自动识别网站和软体的功能性 比如是娱乐的,办公的还是游戏)

②流控:就是流量控制,既然知道了每个软体都在做什么,就可以对流量的控制,比如对P2P软体的控制,这样就可以保证我们办公的正常执行

③管理:我们可以针对网上的某一软体或网页进行限制或禁止,可以具体到某一软体的流量几K每秒。

④安全:上网行为管理可以对我们的客户电脑进行安全维护就是防止网路病毒和提醒软体漏洞。再就是防止泄密,比如一些QQ泄密和邮件泄密,防止公司的损失。

⑤审计:就是对公司职工上网记录的保留,包括浏览,软体,邮件,聊天记录,等等一切网路行为的保留,以便以后的查取。并且有深信服专利对于SSL的审计。

配置审计包括物理审计 哪些属于功能审计的范畴

B 答案解析: 答案A不正确,事实证据是情况属性答案B正确,审计发现和建议要以4个属性为依据。标准是在进行评价或核证时应用的标准、措施或期望值(应该存在什么)情况是内部审计师在检查过程中发现的事实证据(存在什么)原因是预期和实际情况之间存在差异的原因(为什么情况会存在)原因,它是预期和实际情况之间存在差异的原因(为什么情况会存在)效果是由于情况与标准不一致,机构和/或其他部门面临的风险(即差异的影响)效果,它是由于情况与标准不一致,机构和/或其他部门面临的风险(即差异的影响)(实务公告2410-1)。原因提供了回答“为什么”的答案,并且应是纠正措施的依据。 答案C不正确,风险或暴露是效果属性答案D不正确,对审计发现和建议的效果的评价是内部审计师的结论。

usg自带的审计功能,怎么才能看到被审计的内容

一、审计所的主要工作内容是:1、审计所的工作是审计资料作出证据蒐集及分析,以评估企业财务状况,然后就资料及一般公认准则之间的相关程度作出结论及报告。2、检讨组织的运作程式及方法以评估其效率及效益;履行审计(遵行审计);评估组织是否遵守由更高权力机构所订的程式、守则或规条。3、对财务报表审计:评估企业或团体的财务报表是否根据公认会计准则编制,一般由独立会计师进行。评估企业或机构的资讯系统的安全性,完整性、系统可靠性及一致性。二、审计所的职能:1、审计所是指由国家授权或接受委托的专职机构和人员成立的,依照国家法规、审计准则和会计理论,运用专门的方法,对被审计单位的财政、财务收支、经营管理活动及其相关资料的真实性、正确性、合规性、合法性、效益性进行审查和监督,评价经济责任,鉴证经济业务,用以维护财经法纪、改善经营管理、提高经济效益的一项独立性的经济监督活动。2、对经济活动和经济现象的认定:经济活动和经济现象是审计的物件,也就是审计的内容。经济活动和经济现象的认定代表着被审单位对本单位经济活动的合法合规性或有效性及经济现象(如会计资料)的真实公允性的一种看法。3、收集和评估证据:证据是审计人员用来确定被审单位经济活动合法合规性或有效性及经济现象真实公允性的各种形式的凭据。收集充分、有力的审计证据是审计工作的核心。从一定意义上说,审计就是有目的、有计划地收集、鉴定、综合和利用审计证据的过程。4、保持其客观性:客观性是指不偏不倚,实事求是,这是对审计人员的职业道德要求。审计人员只有客观地收集和评估证据、作出审计结论、报告审计结果,才能达到审计目标,也才能使审计工作令审计意见的利害关系人信服。5、为其制定审计的标准:所制定的标准是审计的依据,即判断被审单位的经济活动合法合规与否、经济效益如何、经济现象真实公允与否的尺度,如国家颁布的法律、规章和标准,职业团体制定的会计准则(如美国财务会计准则委员会FASB释出的《财务会计准则公告》),企业制定的各种消耗定额、计划、预算等。6、为审计传递结果:向依赖和利用审计意见的组织和人员传递结果是通过编制审计报告进行的。编制审计报告是审计工作的最后步骤。审计报告的格式有些是标准化的,如年度会计报表审计报告有些则是非标准化的,如职员舞弊专项审计报告。在有些情况下,审计人员甚至还可以采取口头的非正式形式报告审计结果。三、举例1、GE公司是美国最大的产业公司之一,也是世界上最大的电气公司。该公司有12大类产品和服务专案,包括家用电器、广播装置、航空机械、科技新产品开发、销售服务等。2、GE每年都会进行由审计所进行的外部审计,其工作过程是:(1)在审计工作开始之前,审计小组要做的工作是了解和研究情况,(2)在审计中,审计小组对整个审计工作负有全权,召开调查会、进行个别谈话、收集情况和资料等活动都由他们自主安排。在这之后是分析情况、理清头绪,衡量各种问题间的相互影响。为了实现审计目标,他们可以做他们认为需要做的任何工作,目的只有一个:找出问题的解决方案。(3)即便找到了解决法,事情也远未结束。实施方案的具体建议一般由审计小组提出,而且他们总是要把新方案变成一种日常工作,具体落实后才肯罢手,以便在他们离开后能够坚持下去。在这一过程中,审计小组要与被审计部门的领导和业务人员打无数次交道。(4)审计所根据审计目标和程式,出具审计报告。

oracle 行级触发器可以用于审计功能吗

sqlplus "/ as sysdba"

show parameter audit

alter system set audit_sys_operations=TRUE scope=spfile

alter system set audit_trail=DB scope=spfile

shutdown immediate

startup force

Oracle 11g起audit是自动开启的。我很烦这个审计开启,审计日志半个月10G,烦烦烦。我一把都关闭Oracle的审计功能,提高Oracle的空闲率。

查询SQL审计功能是否开启

mysql伺服器自身没有提供审计功能,但是我们可以使用init-connect+binlog的方法进行mysql的 *** 作审计。由于mysqlbinlog记录了所有对资料库长生实际修改的sql语句,及其执行时间,和connection_id但是却没有记录connection_id对应的详细使用者资讯。在后期审计进行行为追踪时,根据binlog记录的行为及对应的connection-id结合之前连线日志记录进行分析,得出最后的结论。1.设定init-connect1.1建立用于存放连线日志的资料库和表createdatabaseaesslogCREATETABLEaesslog.aesslog(`id`int(11)primarykeyauto_increment,`time`timestamp,`localname`varchar(30),`matchname`varchar(30))1.2建立使用者许可权可用现成的root使用者用于资讯的读取grantselectonaesslog.*toroot如果存在具有to*.*许可权的使用者需要进行限制。这里还需要注意使用者必须对aesslog表具有insert许可权grantselectonaesslog.*touser@’%’1.3设定init-connect在[mysqld]下新增以下设定:init-connect=’insertintoaesslog.aesslog(id,time,localname,matchname)values(connection_id(),now(),user(),current_user())’------注意user()和current_user()的区别log-bin=xxx这里必须开启binlog1.4重启资料库生效shell>/etc/init.d/mysqlrestart2.记录追踪2.1thread_id确认可以用以下语句定位语句执行人Tencent:~#mysqlbinlog--start-datetime='2011-01-2616:00:00'--s-datetime='2011-01-2617:00:00'/var/lib/mysql/mysql-bin.000010|grep-B5'wsj'COMMIT/*!*/#at767#11012616:16:43serverid1end_log_pos872Querythread_id=19exec_time=0error_code=0usetest/*!*/SETTIMESTAMP=1296029803/*!*/createtablewsj(idintunsignednotnull)--BEGIN/*!*/#at940#11012616:16:57serverid1end_log_pos1033Querythread_id=19exec_time=0error_code=0SETTIMESTAMP=1296029817/*!*/insertintowsj(id)values(1)--BEGIN/*!*/#at1128#11012616:16:58serverid1end_log_pos1221Querythread_id=19exec_time=0error_code=0SETTIMESTAMP=1296029818/*!*/insertintowsj(id)values(2)2.2使用者确认thread_id确认以后,找到元凶就只是一条sql语句的问题了。mysql>select*fromaesslogwhereid=19+----+---------------------+---------------------+-----------+|id|time|localname|matchname|+----+---------------------+---------------------+-----------+|19|2011-01-2616:15:54|[email protected]|test@%|+----+---------------------+---------------------+-----------+1rowinset(0.00sec)

摘至网页链接

常见Mysql配置文件:linux系统下是my.conf,windows环境下是my.ini;

数据库整体安全需求:机密性、完整性、可用性;

下面以mysql 5.7版本为例,介绍mysql常见的安全策略、配置、加固方式等等,有些策略可能只针对Linux *** 作系统,更多策略可以参考CIS Mysql Benchmark相关文档:

1、 *** 作系统级别安全配置

1.1不要将数据库放在系统分区

Windows系统:直接检查是否将数据库放置在C盘。

Linux系统:

在终端连接上mysql数据库,执行如下命令:

show variables where variable_name = 'datadir'

然后返回shell命令行:

df -h <datadir>

其中datadir是上一条命令的返回值。

上述命令的返回值不应是/、/var、/usr

1.2使用专用的最小权限账号运行mysql数据库进程

Windows系统:直接打开任务管理器,查看运行mysql进程的 *** 作系统账号,不能为administrator账号。

Linux系统:

Shell命令行运行如下命令:

ps -ef | grep mysql

查看mysql服务的运行账号是否为root或其他高权限账号,如果是的,则需要创建一个非管理员专用账号来运行mysql服务。

1.3禁止使用mysql命令行历史记录

Linux系统:

执行如下命令:

find / -name ".mysql_history"

查看是否存在mysql的历史命令记录文件,如果存在,则需要进行如下加固:

(1)删除.mysql_history文件;

(2)设置环境变量MYSQL_HISTFILE为/dev/null,并添加到shell的初始化脚本中,创建mysql_history到/dev/null的链接:

ln -s /dev/null $HOME/.mysql_history

1.4 确保MYSQL_PWD环境变量未设置敏感信息

Windows系统下进入cmd命令行,使用如下命令:

Set

查看是否设置了环境变量MYSQL_PWD。

Linux系统下使用如下命令:

grep MYSQL_PWD /proc/*/environ

查看MYSQL_PWD环境变量是否设置了敏感信息。

确认那个配置文件或脚本设置了MYSQL_PWD环境变量。

2、安装

2.1使用数据库专用服务器

使用专用的服务器安装mysql服务可以减少mysql服务的攻击面,尽量卸载或删除 *** 作系统上的不必要的应用或服务,减少其他应用的安装可能给mysql的运行带来的安全风险。

2.2 不要复用数据库账号

运行mysql服务的 *** 作系统账号不要用来运行其他应用或服务,这样可以避免其他应用或服务器被攻击给mysql服务带来影响。

2.3 历史命令行密码设置为不可见

使用如下命令:

mysql -u admin -p password

连接mysql数据库服务,退出后查看历史命令,确认password是否为明文。

建议使用如下命令方式登录:

(1)先输入mysql -u admin -p

(2)根据命令行提示输入密码;

而不要在一整条命令中输入密码。

另外要控制mysql配置文件访问权限。

3、文件权限控制

3.1 控制数据目录的访问权限

数据目录是mysql数据库存放的位置,在mysql命令行界面下执行如下命令:

show variables where variable_name = 'datadir'

在终端命令行下执行如下命令:

ls -l <datadir>/.. | egrep "^d[r|w|x]{3}------\s*.\s*mysql\s*mysql\s*\d*.*mysql"

其中<datadir>是第一条命令的执行结果

如果存在问题,linux环境下在终端执行如下命令进行加固:

chmod 700 <datadir>

chown mysql:mysql <datadir>

3.2 控制二进制日志文件的权限

mysql的运行会产生很多日志,例如二进制日志、错误日志、慢查询日志等等,Mysql命令行下执行如下命令:

show variables like 'log_bin_basename'

在终端命令行执行如下命令:

ls <log_bin_basename>.*

对于发现的每一个文件,执行如下命令:

ls -l <log_bin_basename.nnnnn>| egrep "^-[r|w]{2}-[r|w]{2}----\s*.*$"

根据输出确认日志文件的权限设置是否存在问题。

对于每个日志文件,修改其权限和属组如下:

chmod 660 <log file>

chown mysql:mysql <log file>

3.3 控制错误日志文件的权限

Mysql命令行下执行如下命令:

show variables like 'log_error'

在终端命令行执行如下命令:

ls <log_error>.*

对于发现的每一个文件,执行如下命令:

ls -l <log_error>| egrep "^-[r|w]{2}-[r|w]{2}----\s*.*$"

根据输出确认日志文件的权限设置是否存在问题。

对于每个日志文件,修改其权限和属组如下:

chmod 660 <log file>

chown mysql:mysql <log file>

3.4控制慢查询日志文件的权限

Mysql命令行下执行如下命令:

show variables like 'slow_query_log_file'

在终端命令行执行如下命令:

ls <slow_query_log_file>.*

对于发现的每一个文件,执行如下命令:

ls -l <slow_query_log_file>| egrep "^-[r|w]{2}-[r|w]{2}----\s*.*$"

根据输出确认日志文件的权限设置是否存在问题。

对于每个日志文件,修改其权限和属组如下:

chmod 660 <log file>

chown mysql:mysql <log file>

3.5控制通用日志文件的权限

Mysql命令行下执行如下命令:

show variables like 'general_log_file'

在终端命令行执行如下命令:

ls <general_log_file>.*

对于发现的每一个文件,执行如下命令:

ls -l <general_log_file>| egrep "^-[r|w]{2}-[r|w]{2}----\s*.*$"

根据输出确认日志文件的权限设置是否存在问题。

对于每个日志文件,修改其权限和属组如下:

chmod 660 <log file>

chown mysql:mysql <log file>

3.6控制审计日志文件的权限

Mysql命令行下执行如下命令:

show global variables where variable_name =  'audit_log_file'

在终端执行如下命令:

ls -l <audit_log_file>| egrep "^-rw[-x]rw[-x][-r][-w][-x][ \t]*[0-9][ \t]*mysql[

\t]*mysql.*$"

根据输出确认日志文件的权限设置是否存在问题。

对于每个日志文件,修改其权限和属组如下:

chmod 660 <audit_log_file>

chown mysql:mysql <audit_log_file>

4、通用安全

4.1安装最新的补丁

在mysql命令行下查询MySQL的版本:

SHOW VARIABLES WHERE Variable_name LIKE "version"

确认是否由需要安装的补丁包,如果有请安装。

4.2 删除test数据库

Mysql数据库默认安装好后,存在一个名为test的数据库,如果存在,请执行如下命令删除:

Drop database “test”

4.3 确保读取本地文件的参数设置为失效

Mysql命令行下,使用如下命令:

SHOW VARIABLES WHERE Variable_name = 'local_infile'

查看结果是否为OFF。

如果该命令为ON,则数据库用户可以通过LOAD DATA INFILE 或者 SELECT local_file 读取到数据库所在 *** 作系统本地的文件,在这种情况下,需要在mysql配置文件中新增一行:

Local-infile=0;

然后重启数据库服务。

5、权限配置

5.1控制可以访问所有数据库的账号

Mysql数据库下的user表和db表中存放着可以授予数据库用户的权限,确保只有管理员账号才能访问所有数据库。可以访问mysql数据库的用户或许可以查看密码哈希值、修改用户权限等等。

使用如下sql语句:

SELECT user, host FROM mysql.user

WHERE (Select_priv = 'Y') OR (Insert_priv = 'Y') OR (Update_priv = 'Y')

OR (Delete_priv = 'Y')  OR (Create_priv = 'Y')  OR (Drop_priv = 'Y')

SELECT user, host FROM mysql.db WHERE db = 'mysql'

AND ((Select_priv = 'Y') OR (Insert_priv = 'Y') OR (Update_priv = 'Y')

OR (Delete_priv = 'Y') OR (Create_priv = 'Y') OR (Drop_priv = 'Y'))

确保返回结果只能是数据库管理员账号。

5.2限制非管理员用户的权限

Mysql.user表中的权限列有:

file_priv:表示是否允许用户读取数据库所在主机的本地文件;

Process:表示是否允许用户查询所有用户的命令执行信息;

Super_priv:表示用户是否有设置全局变量、管理员调试等高级别权限;

Shutdown_priv:表示用户是否可以关闭数据库;

Create_user_priv:表示用户是否可以创建或删除其他用户;

Grant_priv:表示用户是否可以修改其他用户的权限;

应确保只有数据库管理员才有上述权限,使用如下sql语句查看拥有各个权限的数据库账号:

select user, host from mysql.user where File_priv = 'Y'

select user, host from mysql.user where Process_priv = 'Y'

select user, host from mysql.user where Process_priv = 'Y'

SELECT user, host FROM mysql.user WHERE Shutdown_priv = 'Y'

SELECT user, host FROM mysql.user WHERE Create_user_priv = 'Y'

SELECT user, host FROM mysql.user WHERE Grant_priv = 'Y'

SELECT user, host FROM mysql.db WHERE Grant_priv = 'Y'

确保查询结果中不存在非管理员用户。

如果存在非管理员用户,使用如下命令进行权限回收:

REVOKE FILE ON *.* FROM '<user>'

REVOKE PROCESS ON *.* FROM '<user>'

REVOKE SUPER ON *.* FROM '<user>'

REVOKE SHUTDOWN ON *.* FROM '<user>'

REVOKE CREATE USER ON *.* FROM '<user>'

REVOKE GRANT OPTION ON *.* FROM <user>

其中user为上述查询到的非管理员用户。

5.3合理控制DML/DDL *** 作授权

DML/DDL语句包括创建或修改数据库结构的权限,例如insert、update、delete、create、drop和alter语句,在任何数据库中都要控制用户的此类权限,确保只授权给有业务需求的非管理员用户。Mysql命令行下执行如下命令:

SELECT User,Host,Db FROM mysql.db WHERE Select_priv='Y'

OR Insert_priv='Y' OR Update_priv='Y' OR Delete_priv='Y' OR Create_priv='Y'

OR Drop_priv='Y' OR Alter_priv='Y'

上述查询到的用户只能对特地的数据库才有相关的权限,使用如下命令进行相关权限的回收:

REVOKE SELECT ON <host>.<database>FROM <user>

REVOKE INSERT ON <host>.<database>FROM <user>

REVOKE UPDATE ON <host>.<database>FROM <user>

REVOKE DELETE ON <host>.<database>FROM <user>

REVOKE CREATE ON <host>.<database>FROM <user>

REVOKE DROP ON <host>.<database>FROM <user>

REVOKE ALTER ON <host>.<database>FROM <user>

其中<user>为查询到的未授权的用户,host为相关主机,database为相关数据库。

6、审计和日志

6.1开启错误日志审计功能

错误日志包括数据库运行和停止过程中的一系列活动信息,有助于分析数据库运行过程中的一些异常活动,一般情况下需要开启错误日志记录功能,使用如下命令查询:

SHOW variables LIKE 'log_error'

确保返回结果为非空,如果为空,需要在mysql数据库配置文件中增加相关配置。

6.2确保日志存放在非系统区域

日志文件随着数据库的运行会不断增加,如果存放在系统区域,则会影响系统的正常运行,使用如下命令进行查询:

SELECT @@global.log_bin_basename

确保返回结果不是如下路径:/、/var、/usr

6.3关闭原始日志功能

原始日志选项会决定一些敏感信息是否会被明文写进日志中,例如查询日志、慢查询日志、二进制日志,确保数据库配置文件中存在如下配置项:

Log-raw = OFF

7、认证

7.1 Old_passwords环境变量设置

Old_passwords决定了使用PASSWORD()函数和IDENTIFIED BY 、CREATE USER 、GRANT 等语句是时的hash算法:

0 - authenticate with the mysql_native_password plugin

1 - authenticate with the mysql_old_password plugin

2 - authenticate with the sha256_password plugin

设置为mysql_old_password代表弱hash算法,可以快速通过密码字典进行暴力破解。使用如下命令查询相关值:

SHOW VARIABLES WHERE Variable_name = 'old_passwords'

确保返回值不为1。

7.2 secure_auth 选项设置

如果客户端采用Old_passwords发起连接请求,如果服务器端设置了secure_auth,则客户端会拒绝连接请求,可以根据安全需求在配置文件中做相应配置。

7.3 密码保存

确保密码没有明文保存在全局配置文件中。

7.4 确保所有用户都要求使用非空密码登录

执行如下语句查询是否有用户不需要密码即可登录:

SELECT User,host

FROM mysql.user

WHERE (plugin IN('mysql_native_password', 'mysql_old_password')

AND (LENGTH(Password) = 0

OR Password IS NULL))

OR (plugin='sha256_password' AND LENGTH(authentication_string) = 0)

7.5不存在空账号

使用如下命令查询是否存在空账号:

SELECT user,host FROM mysql.user WHERE user = ''

8、网络设置

如果mysql数据库服务器与应用是跨信任域部署的,则需要考虑在数据库服务器与应用服务器之间建立ssl通道进行数据传输,不过这种场景一般很少见,在此不详细描述。

9、数据库备份


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/6114830.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-15
下一篇 2023-03-15

发表评论

登录后才能评论

评论列表(0条)

保存