文档库 最新最全的文档下载
当前位置:文档库 › MINA2实用手册

MINA2实用手册

MINA2实用手册
MINA2实用手册

MINA2实用手册

作者:李庆丰

Email:scholers@https://www.wendangku.net/doc/ba6796169.html,

MINA框架是对java的NIO包的一个封装,简化了NIO程序开发的难度,

封装了很多底层的细节,然开发者把精力集中到业务逻辑上来,最近做了一

个相关的项目,为了备忘对MINA做一个总结。

一、服务端初始化及参数配置

MINA2初始化很简单。

基本的初始化参数如下:

//初始化Acceptor—可以不指定线程数量,MINA2里面默认是CPU数量+2 NioSocketAcceptor acceptor = new NioSocketAcceptor(5);

java.util.concurrent.Executor threadPool =

Executors.newFixedThreadPool(1500);//建立线程池

//加入过滤器(Filter)到Acceptor

acceptor.getFilterChain().addLast("exector", new

ExecutorFilter(threadPool));

//编码解码器

acceptor.getFilterChain().addLast("codec",

new ProtocolCodecFilter(new WebDecoder(),new

XmlEncoder()));

//日志

LoggingFilter filter = new LoggingFilter();

filter.setExceptionCaughtLogLevel(LogLevel.DEBUG);

filter.setMessageReceivedLogLevel(LogLevel.DEBUG);

filter.setMessageSentLogLevel(LogLevel.DEBUG);

filter.setSessionClosedLogLevel(LogLevel.DEBUG);

filter.setSessionCreatedLogLevel(LogLevel.DEBUG);

filter.setSessionIdleLogLevel(LogLevel.DEBUG);

filter.setSessionOpenedLogLevel(LogLevel.DEBUG);

acceptor.getFilterChain().addLast("logger", filter);

acceptor.setReuseAddress(true);//设置的是主服务监听的端口可以重

acceptor.getSessionConfig().setReuseAddress(true);//设置每一个

非主监听连接的端口可以重用

MINA2中,当启动一个服务端的时候,要设定初始化缓冲区的长度,如果不设置

这个值,系统默认为2048,当客户端发过来的消息超过设定值的时候,MINA2的

机制是分段接受的,将字符是放入缓冲区中读取,所以在读取消息的时候,需要

判断有多少次。这样的好处就是可以节省通讯的流量。

acceptor.getSessionConfig().setReceiveBufferSize(1024);//设置输入缓

冲区的大小

acceptor.getSessionConfig().setSendBufferSize(10240);//设置输出缓

冲区的大小

//设置为非延迟发送,为true则不组装成大包发送,收到东西马上发出

acceptor.getSessionConfig().setTcpNoDelay(true);

//设置主服务监听端口的监听队列的最大值为100,如果当前已经有100个连

接,再新的连接来将被服务器拒绝

acceptor.setBacklog(100);

acceptor.setDefaultLocalAddress(new

InetSocketAddress(port));

//加入处理器(Handler)到Acceptor

acceptor.setHandler(new YourHandler());

acceptor.bind();

}

二、初始化客户端

客户端的初始化和服务器端其实是一样的,就是初始化类不一样,客户端是作为发

送者的

SocketConnector connector = new NioSocketConnector();

connector.getFilterChain().addLast(

"codec",

new ProtocolCodecFilter(new

XmlCodecFactory(Charset

1..forName(charsetName), null, sertType)));

//指定线程池

connector.getFilterChain().addLast("executor", new、、

ExecutorFilter());

//指定业务处理类

connector.setHandler(this);

三、处理流程

NioSocketAcceptor是MINA的适配器,一切都是从这里开始的。MINA中有

个过滤器和处理器的概念,过滤器用来过滤数据,处理器用来处理数据。具体来

说MINA的处理模型就是request->过滤器A->过滤器B->处理器->过滤器

B->过滤器A->response,这里的request和response类似serlvet的

request和response。

acceptor.getFilterChain().addLast("codec",

new ProtocolCodecFilter(new WebDecoder(),new

XmlEncoder()));

//request->WebDecoder->XmlHander->WebEncode->response

acceptor.getFilterChain().addLast("codec",

new ProtocolCodecFilter(new WebDecoder(),new XmlEncoder()));

//这里是处理逻辑的关键部位,请求的处理都是在WebDecoder类和

XmlEncoder类中处理,可以明显从命名上看出来一个是用来解码,另一个是用

来编码,requet过来后先进入WebDecoder类(实现了ProtocolDecoder接口)

进行解码处理,这里可以加入自己的逻辑把传进来的流解码成自己需要的信息。而

XmlEncoder类(实现了ProtocolEncoder接口)是进行编码,在这个类里面加入

自己的逻辑把处理后的信息组装发送给客户端(response)。而在解码和编码过程

中XmlHander(扩展了IoHandlerAdapter抽象类)起到了处理器的作用。

现在详细描述一下

request->WebDecoder->XmlHander->WebEncode->response的过程:

客户端发送一个请求到MINA服务器,这里相当于来了一个requet。请求首先来

到WebDecoder类(实现了ProtocolDecoder接口)中的

boolean decode(IoSession session, IoBuffer in, ProtocolDecoderOutput

out) throws Exception{}方法

/*

参数in:用户请求信息全存在这里,读数据就从in这里读。

参数out:用来输出处理后的数据到Filter的下一个过滤器,如果没有过滤器了就

输出到XmlHander,这里有点和servelt的过滤器类似。利用out.write(Object

object);这个函数可以把数据传到下一个Filter。我们可以自己定义一个对象,我们假设为Request,用它来传递消息,那末这里就可以写成out.write(new RequsetMessage()); 如果这个方法返回false,就是说当前逻辑包还没接收完(也就是当前的IoBuffer并没有包含足够的数据),需要再次执行decode方法(再次获取新的IoBuffer),用来获取足够的数据。如果返回值为true就表示可以不执行decode方法了,但是要激活handler方法,必须要调用out.write 方法。

public class RequestMessage{}//这里什么也不做

*/

*/

然后到XmlHander(扩展了IoHandlerAdapter抽象类)中的

void messageReceived(IoSession session, Object message) throws Exception{}方法

WriteFuture future = session.write(response);//session中必须加入这个代码,才会激活encode方法

future.addListener(IoFutureListener.CLOSE);//这个的作用是发送完毕后关闭连接,加了就是短连接,不然是长连接 ;

在XmlHanler类中可以在重载sessionIdle方法,这个方法判断整个SOCKET 连接通道是否空闲,可以再这里间隔(在服务店启动的时候设置idleTime)发送心跳包来保持各个长连接:

/**

*当网络通道空闲时此方法被调用,在这里可以判断是读空闲、写空闲还是两个都空闲,以便做出正确的处理

一般的网络通讯程序都要与服务器端保持长连接,所以这里可以发一下网络测试数据以保持与服务器端的连接

*@param session会话信息

*@param status状态

*@throws Exception异常

*/

@Override

public void sessionIdle(IoSession session, IdleStatus status) throws Exception

IoFutureListener里面有个operationComplete(IoFuture future)方法,当流发送完成之后才调用这个方法。

/*

参数message:用来获取Filter传递过来的对象.对应代码RequestMessage request = (RequestMessage) message;

参数session:用来发送数据到Filter.对应代码session.write(new

ResponseMessage());

public class ResponseMessage{}//这里什么也不做,假设存放处理后的数据

注意:对于一个MINA程序而言,对于XmlHander类只生成一个对象,所以要

考虑线程安全问题

*/

然后到

XmlEncoder类(实现了ProtocolEncoder接口)中的

boolean encode(IoSession session, Object message,

ProtocolEncoderOutput out) throws Exception{}

方法

/*

参数message:用来获取上一个Filter节点的数据或者处理器的数据(如果这个

过滤器为最靠近处理器的那个)

ResponseMessage response = (ResponseMessage)message;

参数out:用来输出数据到下一个Filter节点过或者到客户端,用

out.write(Object encodedMessage)把数据发送

出去,但是要注意的是,如果这个Filter下一个节点如果是客户端的话,那个这个

encodedMessage数据必须为

IoBuffer类型的,可以利用IoBuffer.wrap(byte[] byteArray)这个方法来格式

化输出数据

*/

四、大容量包的处理

MINA2中(MINA2 RC版本,MINA2.0正式版已经发布)服务端接受数据默认有一定长度的缓冲区(可以在启动的时候设置)。那么对于大报文,怎么处理呢?比如说超过1024,甚至更多?MINA2为了节省网络流量,提高处理效率,会将大报文自动拆分(可能是存放MINA2中的缓冲区里面):比如2048字节的报文,就会拆分成两次;那么在接受的时候,就有一个如何判断是完整报文的问题,或者说是一个拆包组包的问题。

MINA2中初始化服务的时候是可以设置输入和输出的缓冲区的:

acceptor.getSessionConfig().setReadBufferSize(1024);

MINA2提供的案例是,在IoSession中设置一个类似于session,存在在当前

IoSession中的全局变量,在此IoSession中有效。

private final AttributeKey TEST = new AttributeKey(getClass(), "TES

T");

大家都知道,通过 SOCKET TCP/IP传输过来的报文是不知道边界的,所以一般会约定在前端固定长度的字节加上报文长度,让SERVER来根据这个长度来确定整个报文的边界,在我前面的博文有提到。其实MINA2中有:

prefixedDataAvailable(4) int

方法,来判断固定长度的报文长度,但是参数只能是1,2,4;该方法很好用。判断前四字节的整型值是否大于等于整个缓冲区的数据。可以方便的判断一次

messageReceived 过来的数据是否完整。(前提是自己设计的网络通讯协议前四字节等于发送数据的长度),如果你不是设定1,2,4字节来作为长度的话,那么就没辙了。

在你的解码操作中,MINA2的缓冲区发多少次报文,你的decode方法就会调用多少次。

上面设置了session之后,可以采用一个方法:

/**

*

* @param session

* 会话信息

* @return 返回session中的累积

*/

private Context getContext(IoSession session) {

Context ctx = (Context) session.getAttribute(CONTEXT);

if (ctx == null) {

ctx = new Context();

session.setAttribute(CONTEXT, ctx);

}

return ctx;

}

然后在你的decode方法中,首先从session取出数据对象,进行拼接:Context ctx = getContext(session);

// 先把当前buffer中的数据追加到Context的buffer当中

ctx.append(ioBuffer);

// 把position指向0位置,把limit指向原来的position位置

IoBuffer buf = ctx.getBuffer();

buf.flip();

接着读取每次报文的总长度:

// 读取消息头部分

byte[] bLeng = new byte[packHeadLength];

buf.get(bLeng);

int length = -1;

try {

length = Integer.parseInt(new String(bLeng));

} catch (NumberFormatException ex) {

ex.printStackTrace();

}

if (length > 0) {

ctx.setMsgLength(length);

}

在读取到每次报文的长度之后,就接着循环判断BUF里面的字节数据是否已经全部接受完毕了,如果没有接受完毕,那么就不处理;下面是完整处理的代码:

while (buf.remaining() >= packHeadLength) {

buf.mark();

// 设置总长度

if (ctx.getMsgLength() <= 0) {

// 读取消息头部分

byte[] bLeng = new byte[packHeadLength];

buf.get(bLeng);

int length = -1;

try {

length = Integer.parseInt(new String(bLeng));

} catch (NumberFormatException ex) {

ex.printStackTrace();

}

if (length > 0) {

ctx.setMsgLength(length);

}

}

// 读取消息头部分

int length = ctx.getMsgLength();

// 检查读取的包头是否正常,不正常的话清空buffer

if (length < 0) { // || length > maxPackLength2) {

buf.clear();

out.write("ERROR!");

break;

// 读取正常的消息包,并写入输出流中,以便IoHandler进行处理

} else if (length > packHeadLength && buf.remaining() >= length) {

//完整的数据读取之后,就可以开始做你自己想做的操作

} else {

// 如果消息包不完整

// 将指针重新移动消息头的起始位置

buf.reset();

break;

}

}

if (buf.hasRemaining()) { // 如果有剩余的数据,则放入Session中

// 将数据移到buffer的最前面

IoBuffer temp = IoBuffer.allocate(2048).setAutoExpand(

true);

temp.put(buf);

temp.flip();

buf.clear();

buf.put(temp);

} else { // 如果数据已经处理完毕,进行清空

buf.clear();

}

为了便于操作,最好设置一个内部类:

private class Context {

private final CharsetDecoder decoder;

private IoBuffer buf;

private int msgLength = 0;

private int overflowPosition = 0;

/**

*

*

*/

private Context() {

decoder = charset.newDecoder();

buf = IoBuffer.allocate(80).setAutoExpand(true); }

/**

*

*

* @return CharsetDecoder

*/

public CharsetDecoder getDecoder() { return decoder;

}

/**

*

*

* @return IoBuffer

*/

public IoBuffer getBuffer() {

return buf;

}

/**

*

*

* @return overflowPosition

*/

public int getOverflowPosition() { return overflowPosition;

}

/**

*

*

* @return matchCount

*/

public int getMsgLength() {

return msgLength;

}

/**

*

*

* @param matchCount

* 报文长度

*/

public void setMsgLength(int msgLength) { this.msgLength = msgLength;

}

/**

*

*

*/

public void reset() {

this.buf.clear();

this.overflowPosition = 0;

this.msgLength = 0;

this.decoder.reset();

}

/**

*

* @param in

* 输入流

*/

public void append(IoBuffer in) {

getBuffer().put(in);

}

}

五多个SOCKET通讯的处理

在MINA2中两个SOCKET SERVER进行通讯,可以采用虚拟机内部的管道的方式。在MINA2的源码包里面自带了这个例子:

IoAcceptor acceptor = new VmPipeAcceptor();

VmPipeAddress address = new VmPipeAddress(8080);

// Set up server

acceptor.setHandler(new TennisPlayer());

acceptor.bind(address);

// Connect to the server.

VmPipeConnector connector = new VmPipeConnector();

connector.setHandler(new TennisPlayer());

ConnectFuture future = connector.connect(address);

future.awaitUninterruptibly();

IoSession session = future.getSession();

// Send the first ping message

session.write(new TennisBall(10));

// Wait until the match ends.

session.getCloseFuture().awaitUninterruptibly();

acceptor.unbind();

也可以将IoSession对方放入全局的线程安全的Map中去,当需要发送的时候根据

KEY取出来,然后write出去。

六MIN2的BUG

我们知道,在MINA2中,发送和接受时两个独立的工作线程,但是可以设置一个参

数,当服务端发送消息之后同步读取客户端的返回:

session.getConfig().setUseReadOperation(true);

近日,采用MINA2(RC)的同步读取方法,发现无法真的同步读取客户端的返回;

场景是:服务端发送一个消息给客户端,需要同步等待客户端的一个消息回执,然后服务端的程序继续执行;但是实际在使用的时候这个设置无效。

sendSession.getConfig().setUseReadOperation(true);

WriteFuture future = sendSession.write(xmlMsgBean); // 发送数据

future.awaitUninterruptibly(); // 等待发送数据操作完成

if (future.getException() != null) {

throw new AppException(future.getException().getMessage());

}

if (future.isWritten()) {

// 数据已经被成功发送

logger.debug("数据已经被成功发送");

ReadFuture readFuture = sendSession.read();

readFuture.awaitUninterruptibly();

if (readFuture.getException() != null) {

throw new AppException(readFuture.getException().getMessage()); }

sendSession.getConfig().setUseReadOperation(false);

return ((XmlMsgBean) readFuture.getMessage()).getStrErrMsg();

} else {

// 数据发送失败

logger.debug("数据发送失败");

}

后来用GOOGLE搜索了一下,发现在MINA的官网上,老外同样问了一个一模一样的问题,并且提了一个BUG上去,但是目前BUG的状态还是open;

https://https://www.wendangku.net/doc/ba6796169.html,/jira/browse/DIRMINA-777

I'm attempting to perform a synchronous write/read in a demux-based client application with MINA 2.0 RC1, but it seems to get stuck. Here is my code:

{code}

public boolean login(final String username, final String password) {

// block inbound messages

session.getConfig().setUseReadOperation(true);

// send the login request

final LoginRequest loginRequest = new LoginRequest(username, password); final WriteFuture writeFuture = session.write(loginRequest);

writeFuture.awaitUninterruptibly();

if (writeFuture.getException() != null) {

session.getConfig().setUseReadOperation(false);

return false;

}

// retrieve the login response

final ReadFuture readFuture = session.read();

readFuture.awaitUninterruptibly();

if (readFuture.getException() != null) {

session.getConfig().setUseReadOperation(false);

return false;

}

// stop blocking inbound messages

session.getConfig().setUseReadOperation(false);

// determine if the login info provided was valid

final LoginResponse loginResponse = (LoginResponse)readFuture.getMessage(); return loginResponse.getSuccess();

}

{code}

I can see on the server side that the LoginRequest object is retrieved, and a L oginResponse message is sent. On the client side, the DemuxingProtocolCodecFact ory receives the response, but after throwing in some logging, I can see that t he client gets stuck on the call to `readFuture.awaitUninterruptibly() `.

I can't for the life of me figure out why it is stuck here based upon my own co de. I properly set the read operation to true on the session config, meaning th at messages should be blocked. However, it seems as if the message no longer ex ists by time I try to read response messages synchronously.

Key: DIRMINA-777

Type: Bug

Status: Open

Priority: Blocker

Assignee: Unassigned

Reporter: Matt Huggins

Votes: 0

Watchers: 0

数据库安全策略

数据库系统的安全性很大程度上依赖于数据库管理系统。如果数据库管理系统安全机制非常强大,则数据库系统的安全性能就较好。目前市场上流行的是关系式数据库管理系统,其安全性功能很弱,这就导致数据库系统的安全性存在一定的威胁。因此,数据库管理员应从以下几个方面对数据库的安全进行考虑。 一:用户角色的管理 这是保护数据库系统安全的重要手段之一。它通过建立不同的用户组和用户口令验证,可以有效地防止非法的Oracle用户进入数据库系统,造成不必要的麻烦和损坏;另外在Oracle数据库中,可以通过授权来对Oracle用户的操作进行限制,即允许一些用户可以对Oracle服务器进行访问,也就是说对整个数据库具有读写的权利,而大多数用户只能在同组内进行读写或对整个数据库只具有读的权利。在此,特别强调对SYS和SYSTEM两个特殊账户的保密管理。 为了保护ORACLE数据库服务器的安全,应保证$ORACLE_HOME/bin目录下的所有内容的所有权为Oracle用户所有。为了加强数据库在网络中的安全性,对于远程用户,应使用加密方式通过密码来访问数据库,加强网络上的DBA权限控制,如拒绝远程的DBA访问等。二:数据库的加密 由于数据库系统在操作系统下都是以文件形式进行管理的,因此入侵者可以直接利用操作系统的漏洞窃取数据库文件,或者直接利用OS工具来非法伪造、篡改数据库文件内容。这种隐患一般数据库用户难以察觉,分析和堵塞这种漏洞被认为是B2级的安全技术措施。数据库管理系统分层次的安全加密方法主要用来解决这一问题,它可以保证当前面的层次已经被突破的情况下仍能保障数据库数据的安全,这就要求数据库管理系统必须有一套强有力的安全机制。解决这一问题的有效方法之一是数据库管理系统对数据库文件进行加密处理,使得即使数据不幸泄露或者丢失,也难以被人破译和阅读。 我们可以考虑在三个不同层次实现对数据库数据的加密,这三个层次分别是OS层、DBMS内核层和DBMS外层。 ⑴在OS层加密。在OS层无法辨认数据库文件中的数据关系,从而无法产生合理的密钥,对密钥合理的管理和使用也很难。所以,对大型数据库来说,在OS层对数据库文件进行加密很难实现。 ⑵在DBMS内核层实现加密。这种加密是指数据在物理存取之前完成加/解密工作。这种加密方式的优点是加密功能强,并且加密功能几乎不会影响DBMS的功能,可以实现加密功能与数据库管理系统之间的无缝耦合。其缺点是加密运算在服务器端进行,加重了服务器的负载,而且DBMS和加密器之间的接口需要DBMS开发商的支持。 ⑶在DBMS外层实现加密。比较实际的做法是将数据库加密系统做成DBMS的一个外层工具,根据加密要求自动完成对数据库数据的加/解密处理。采用这种加密方式进行加密,加/解密运算可在客户端进行,它的优点是不会加重数据库服务器的负载并且可以实现网上

水暖工(管工)安全技术操作规程正式样本

文件编号:TP-AR-L2927 There Are Certain Management Mechanisms And Methods In The Management Of Organizations, And The Provisions Are Binding On The Personnel Within The Jurisdiction, Which Should Be Observed By Each Party. (示范文本) 编制:_______________ 审核:_______________ 单位:_______________ 水暖工(管工)安全技术操作规程正式样本

水暖工(管工)安全技术操作规程 正式样本 使用注意:该操作规程资料可用在组织/机构/单位管理上,形成一定的管理机制和管理原则、管理方法以及管理机构设置的规范,条款对管辖范围内人员具有约束力需各自遵守。材料内容可根据实际情况作相应修改,请在使用时认真阅读。 1 使用机电设备、机具前应检查确认性能良好, 电动机具有漏电保护装置灵敏有效。不得“带病”运 转。 2 操作机电设备,严禁戴手套,袖口扎紧。机械 运转中不得进行维修保养。 3 使用砂轮锯,压力均匀,人站在砂轮片旋转方 向侧面。 4 压力案上不得放重物和立放丝扳、手工套丝, 应防止扳机滑落。 5 用小推车运管时,清理好道路,管放在车上必

须捆绑牢固。 6 安装立管,必须将洞口周围清理干净,严禁向下抛掷物料。作业完毕必须将洞口盖板盖牢。 7 电气焊作业前,应申请用火证,并派专人看火,备好灭火用具。焊接地点周围不得有易燃易爆物品。 8 散热器组拧紧对丝时,必须将散热器放稳,搬抬时两人应用力一致,相互照应。 9 在进行水压试验时,散热器下面应垫木板。散热器按规定压力值试验时,加压后不得用力冲撞磕碰。 10 人力卸散热器时,所用缆索、杠子应牢固,使用井字架、龙门架或外用电梯运输时,严禁超载或放偏。散热器运进楼层后,应分散堆放。 11 稳挂散热器应扶好,用压杠压起后平稳放在

全新版大学英语第二版综合教程2课后句子翻译1

1、It takes an enormous amount of courage to make a departure from the tradition.背离传统需要… 2、Tom used to be very shy, but this time he was bold enough to give a performance in front of a large audience.汤姆过去很腼腆… 3、Many educators think it desirable to foster the creative spirit in the child at an early age.很多教育家认为… 4、Assuming this painting really is a masterpiece, do you think it’s worthwhile to buy it?假设那幅画确实… 5、If the data is statistically valid, it will throw light on the problem we are investigating.如果这些数据… 1、The company denied that its donations had a commercial purpose.该公司否认… 2、Whenever he was angry, he would begin to stammer slightly.每当他生气的时候… 3、Education is the most cherished tradition in our family. That’s why my parents never took me to dinner at expensive restaurants, but sent me to the best private school.教育是我们家庭… 4、Shortly after he recovered from the surgery, he lost his job and thus had to go through another difficult phase of his life.手术康复后不久… 5、In contrast to our affluent neighbors, my parents are rather poor, but they have always tried to meet our minimal needs.与我们的富裕… 1、Have scientists found proof of water on Mars?科学家们找到 2、The planning committee has narrowed down the possible locations for the nuclear power plant to two coastal towns.计划委员会已经… 3、Sam not only lost his job but also both legs; he had to live on welfare for the rest of his life.山姆不仅失去了… 4、A jury consisting of 12 members voted in unison that Mary was guilty.由十二人组成的… 5、Sean felt humiliated to hear his talent being questioned.听到有人质疑他… 1、Research shows that laughter can bring a lot of health benefits.研究表明… 2、A show Internet connection speed is really annoying.互联网连接... 3、As the law stands, helping someone commit suicide is a crime.法律规定… 4、In her report, Mary tries to interpret the data from a completely different angle.玛丽在她的报告中… 5、Sue is a girl of great talent. Her amazing memory sets her apart from her classmates.苏是一个很有天分… 1、It is the creativity and dedication of the workers and executives that turned the company into a profitable business.是工人和主管 2、The prices of food and medicine have soared in the past three months.食品和医药的价格… 3、We plan to repaint the upper floors of the office building.我们打算… 4、His success shows that popularity and artistic merit sometimes coincide.他的成功表明… 5、I don’t want to see my beloved grandmother lying in a hospital bed and groaning painfully.我不愿意看见… 1、He is a man of few words, but when it comes to playing computer games, he is far too clever for his classmates.他这人话不多… 2、Children who don’t know any better may think these ani mals are pretty cute and start playing with them.无知的孩子们… 3、There is no way to obtain a loan, so to buy the new equipment, I’ll just have to grit my teeth and sell my hybrid car.没有办法获得贷款… 4、The hunter would not have fired the shots if he had not seen a herd of elephants coming towards his campsite.如果猎人没有看到... 5、I find it ironic that Tom has a selective memory---he does not seem to remember painful experiences in the past, particularly those of his own doing.我觉得具有讽刺… 1、Many small businesses have sprung up in the city since the new policy went into effect.自从新政策生效之后… 2、On hearing the news, she smiled briefly, and then returned to her habitual frown.听到这一消息后… 3、He paused for effect, then said: “We can reach/enter these markets through new channels.”他稍微停顿了… 4、The addition of a concert hall to the school will help it nourish young musical talents.学校新添的音乐厅… 5、We have no way to protect our personal liberties until we have established a sovereign state. / We can’t protect our personal liberties unless we, first of all, establish a sovereign state.我们必须首先建立… 1、This is a prosperous town, but there is still poverty in the midst of wealth and abundance.这是一个繁荣的… 2、The Brown family was stricken with one misfortune after another, but their children never complained.布朗一家遭受了 3、The museum is designed in such a way that it stands in perfect harmony with its surroundings.这个博物的设计… 4、It was a miracle that these flowers did not wither at all in the blazing sun.这些花在火辣辣… 5、Flocks of sheep feed on the patches of vegetation that rise above the winter snow.一群群的羊在…

水暖工岗位安全操作规程

编号:SM-ZD-85388 水暖工岗位安全操作规程Through the process agreement to achieve a unified action policy for different people, so as to coordinate action, reduce blindness, and make the work orderly. 编制:____________________ 审核:____________________ 批准:____________________ 本文档下载后可任意修改

水暖工岗位安全操作规程 简介:该规程资料适用于公司或组织通过合理化地制定计划,达成上下级或不同的人员之间形成统一的行动方针,明确执行目标,工作内容,执行方式,执行进度,从而使整体计划目标统一,行动协调,过程有条不紊。文档可直接下载或修改,使用时请详细阅读内容。 1.用车辆运输管材、管件,要绑扎牢固,人力搬运,起落要一致,通过沟、坑、井,要搭好马道,不得负重跨越。用滚杠运输,要防止压脚,并不准用手直接调整滚杠。管子滚动前方,不得有人。 2.用克子切断铸铁管,应戴防护眼镜,克子顶部不得有卷边裂纹。 3.用锯床、锯弓、切管器、砂轮切管机切割管子,要垫平卡牢,用力不得过猛,临近切断时,用手或支架托住。砂轮切管机砂轮片应完好,操作时,应站侧面。 4.管子煨弯,砂子必须烘干,装砂架子搭设牢固,并设栏杆。用机械敲打时,下面不得站人,人工敲打上下要错开。管子加热时,管口前不得有人。 5.用卷扬机煨弯,地锚、别(靠)桩要牢固,不得站在钢丝绳内侧。

综合教程2课后句子翻译

It takes an enormous amount of courage to make a departure from the tradition. Tom used to be very shy, but this time he was bold enough to give a performance in front of a large audience. Many educators think it desirable to foster the creative spirit in the child at an early age. Assuming (that) this painting really is a masterpiece, do you think it’s worthwhile to buy/purchase it? If the data is statistically valid, it will throw light on the problem we are investigating. The company denied that its donations had a commercial purpose. Whenever he was angry, he would begin to stammer slightly. Education is the most cherished tradition in our family. That’s why my parents never took me to dinner at expensive restaurants, but sent me to the best private school. Shortly after he recovered from the surgery, he lost his job and thus had to go through another difficult phase of his life. In contrast to our affluent neighbors, my parents are rather poor, but they have always tried hard to meet our minimal needs. Have scientists found proof of water on Mars? The planning committee has narrowed down the possible locations for the nuclear power plant to two coastal towns. Sam not only lost his job but also both legs; he had to live on welfare for the rest of his life. A jury consisting of 12 members voted in unison that Mary was guilty. Sean felt humiliated when he hear his talent being questioned. Research shows that laughter can bring a lot of health benefits. A slow Internet connecting speed is really annoying. As the law stands, helping someone commit suicide is a crime. In her report, Mary tries to interpret the data from a completely different angle. Sue is a girl of great talent. Her amazing memory sets her apart from her classmates. It is the creativity and dedication of the workers and executives that turned the company into a profitable business. The prices of food and medicine have soared in the past three months. We plan to repaint the upper floors of he office building. His success shows that popularity and artistic merit sometimes coincide. I don’t want to see my beloved grandmother lying in a hospital bed and groaning painfully. He is a man of few words, but when it comes to playing a computer games, he is

SQL Server数据库的安全为题与安全策略

SQL Server数据库的安全为题与安全策略 摘要:随着网络和SQL Server数据库应用的发展,SQL Server数据库安全性一直是微软公司致力改善和用户关心的问题。本文就SQL Server数据库的安全漏洞的分析,帮助数据库管理员对数据库进行有效的安全配置,探讨数据库安全管理策略。 关键词:SQL;数据库;安全;策略 0.引言 在各种数据库中,SQL Server是目前被广泛使用的网络关系型数据库,是设计中、小型数据库的首选的工具,虽然SQL Server版本不断更新,其安全性不断改进和完善,但随着网络和数据库使用的不断深入,SQL Server的安全性也是用户最关心的项目之一。 1.数据库的安全漏洞SQL Server数据库任一版本都不同程度地存在着安全漏洞,这些漏洞大部分是由不良设置或者实施造成。其中,最常见的几个与数据库相关的安全漏洞:不良的口令政策、SQL注入、交叉站点脚本、数据泄漏、不适当的错误处理等。数据库安全漏洞不光威胁数据库安全,也威胁到操作系统和其他可信任的系统。因此,对数据库的安全漏洞详细了解,有助于让用户能够采取相应的措施来修补数据库存在的安全隐患。对于用户而言,在数据库方面存在的最大问题是经常使用默认或者软弱的口令,来保护像数据库一样重要信息。其补救措施是强制执行强大的口令政策。也就是说,口令要定期变换,口令长度最少为10位数且包含字母和符号。采用这种政策,你将关闭攻击者通向你的数据的方便之门。SQL注入是依靠软弱的数据库实施,特别是在如何向数据库发送SQL请求方面的实施。如果这个数据库接受了用户提供的不干净的或者没有经过验证的数据产生的SQL请求,这就会为SQL注入攻击敞开大门。例如,通过修改从基于网络的格式受到的信息,攻击者能够提供恶意的SQL请求并且把指令直接发送到数据库。要防止这种类型的攻击,在让这些数据接近你的脚本、数据访问程序和SQL查询之前,保证所有用户提供的数据是合法的是非常重要的。验证和清洁从用户那里收到的数据的另一个理由是防止交叉站点脚本攻击。这种攻击能够用来攻破连接到一个Web服务器的数据库。黑客通过一个网络蠕虫把Java Script 等客户方面的脚本注入到一个网络应用程序的输出中。这些脚本用于收集cookie数据。这些数据经常被错误地用来存储用户账户登录信息等资料。一个经常被忽略的问题是什么时候建立一个数据库应用程序是泄漏数据。这是敏感的数据要发送的地方或者是非故意踢敏感数据的地方。这个错误将导致不能保证访问数据库备份磁带的安全和控制这种访问。通常,更敏感的数据产生于有关数据的合法查询的答案,就像从医疗处方判断疾病一样。常用的解决方案是监视查询方式以检测这种行动。与数据泄漏密切相关的是在数据库出现错误时不适当地处理这些错误,许多应用程序显示了详细的信息。这些错误信息能够泄漏有关数据库结构信息。SQL Server数据库的系统漏洞的产生的主要原因都是由于程序员不正确和不安全的编程引起的。加上程序员的水平及经验的参差不齐,这部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。在使用时,由于用户的不正确配置就有可能导致漏洞产生。认识和了解SQL Server数据库和系统安全漏洞,分析漏洞产生的原因,找出SQL Server数据库的漏洞,是为了增加数据库的安全,这是解决SQL Server 数据库安全的理论基础 2.数据库的安全设置 在设计SQL Server数据库时,要考虑数据库的安全机制,安装时要注意整个系统的安全

水暖工岗位安全操作规程标准范本

操作规程编号:LX-FS-A73427 水暖工岗位安全操作规程标准范本 In The Daily Work Environment, The Operation Standards Are Restricted, And Relevant Personnel Are Required To Abide By The Corresponding Procedures And Codes Of Conduct, So That The Overall Behavior Can Reach The Specified Standards 编写:_________________________ 审批:_________________________ 时间:________年_____月_____日 A4打印/ 新修订/ 完整/ 内容可编辑

水暖工岗位安全操作规程标准范本 使用说明:本操作规程资料适用于日常工作环境中对既定操作标准、规范进行约束,并要求相关人员共同遵守对应的办事规程与行动准则,使整体行为或活动达到或超越规定的标准。资料内容可按真实状况进行条款调整,套用时请仔细阅读。 1.用车辆运输管材、管件,要绑扎牢固,人力搬运,起落要一致,通过沟、坑、井,要搭好马道,不得负重跨越。用滚杠运输,要防止压脚,并不准用手直接调整滚杠。管子滚动前方,不得有人。 2.用克子切断铸铁管,应戴防护眼镜,克子顶部不得有卷边裂纹。 3.用锯床、锯弓、切管器、砂轮切管机切割管子,要垫平卡牢,用力不得过猛,临近切断时,用手或支架托住。砂轮切管机砂轮片应完好,操作时,应站侧面。 4.管子煨弯,砂子必须烘干,装砂架子搭设牢

北邮数据库原理与应用阶段作业

一、单项选择题(共10道小题,共100.0分) 1. 数据库事务的隔离性通过_______实现。 2. 1.DBMS的事务管理子系统 2.应用程序员 3.DBMS的并发控制机制 4.DBMS的恢复子系统 知识点:事务的概念 学生答案:[C;] 标准答 案: C; 得分:[10]试题分 值: 10.0 提示: 3. 数据库的一致性状态由_______来负责。 4. 1.DBMS的事务管理子系统 2.应用程序员 3.DBMS的并发控制机制 4.DBMS的恢复子系统 知识点:事务的概念 学生答案:[B;] 标准答 案: B; 得分:[10]试题分 值: 10.0 提示: 1. 事务开始前,数据库处于一致性的状态;事务结束后,数据库必须仍处

于一致性状态。这指的是事务的_____。 2. 1.一致性 2.隔离性 3.持久性 4.原子性 知识点:事务的概念 学生答案:[A;] 标准答 案: A; 得分:[10]试题分 值: 10.0 提示: 1. 一个事务一旦提交之后,它对数据库的影响必须是永久的,无论发生何种系统故障。这指的是事务的____。 2. 1.一致性 2.隔离性 3.持久性 4.原子性 知识点:事务的概念 学生答案:[C;] 标准答 案: C; 得分:[10]试题分 值: 10.0 提示: 1. 系统必须保证事务不受其它并发执行事务的影响,这指的是事务的________。 2.

2.隔离性 3.持久性 4.原子性知识点:事务的概念 学生答案:[B;] 标准答 案: B; 得分:[10]试题分 值: 10.0 提示: 1. 一个事务中所有对数据库的操作是一个不可分割的操作序列。每个事务的操作序列要么都被成功地执行,要么一个也不被执行,这指的是事务的______。 2. 1.一致性 2.隔离性 3.持久性 4.原子性 知识点:事务的概念 学生答案:[D;] 标准答 案: D; 得分:[10]试题分 值: 10.0 提示: 1. DBS运行的最小逻辑单位是__________。 2. 1.事务 2.表 3.属性

全新版大学英语综合教程2课后句子纯翻译

UNIT .1 (1)背离传统需要极大的勇气。 It takes an enormous amount of courage to make a departure from the tradition. (2)汤姆过去很腼腆,但这次却非常勇敢能在大庭广总面前上台表演了。 Tom used to be very shy, but this time he was bold enough to give a performance in front of a large audience. (3)很多教育家认为从小培养孩子的创新精神是可取的。 Many educators think it desirable to foster the creative spirit in the child at an early age. (4)假设那幅画确实是名作,你觉得值得购买吗? Assuming this painting really is a masterpiece, do you think it’s worthwhile to buy it? (5)如果这些数据统计上是站得住脚的,那他将会帮助我们认识正在调查的问题。 If the data is statistically valid, it will throw light on the problem we are investigating. UNIT.2 1)该公司否认其捐款有商业目的The company denied that its donations had a commercial purpose. 2)每当她生气的时候他说话就有一点结巴Whenever he was angry, he would begin to stammer slightly. 3)教育是我们家庭最看重的传统,这就是为什么我父母从不带我到昂贵的饭店吃饭却 送我到最好的私立学校上学Education is the most cherished tradition in our family. That’s why my parents never took me to dinner at expensive restaurants, but sent me to the best private school. 4)手术康复后不久他失业了因此经历了人生的又一个困难阶段Shortly after he recovered from the surgery, he lost his job and thus had to go through another difficult phase of his life. 5)与我们富裕邻居相比我们的父母就相当穷了,但是他们总是努力满足我们最起码的 需求In contrast to our affluent neighbors, my parents are rather poor, but they have always tried to meet our minimal needs. UNIT.3 (1)科学家们找到火星上有水的证据了吗?

水暖工(管工)安全操作规程

编号:CZ-GC-07949 ( 操作规程) 单位:_____________________ 审批:_____________________ 日期:_____________________ WORD文档/ A4打印/ 可编辑 水暖工(管工)安全操作规程 Safety operation procedures for plumbers (plumbers)

水暖工(管工)安全操作规程 操作备注:安全操作规程是要求员工在日常工作中必须遵照执行的一种保证安全的规定程序。忽视操作规程 在生产工作中的重要作用,就有可能导致出现各类安全事故,给公司和员工带来经济损失和人身伤害,严重 的会危及生命安全,造成终身无法弥补遗憾。 1使用机电设备、机具前应检查确认性能良好,电动机具的漏电保护装置灵敏有效。不得“带病”运转。 2操作机电设备,严禁戴手套,袖口扎紧。机械运转中不得进行维修保养。 3使用砂轮锯,压力均匀,人站在砂轮片旋转方向侧面。 4压力案上不得放重物和立放丝扳、手工套丝,应防止扳机滑落。 5用小推车运管时,清理好道路,管放在车上必须捆绑牢固。 6安装立管,必须将洞口周围清理干净,严禁向下抛掷物料。作业完毕必须将洞口盖板盖牢。 7电气焊作业前,应申请用火证,并派专人看火,备好灭火用具。焊接地点周围不得有易燃易爆物品。 8散热器组拧紧对丝时,必须将散热器放稳,搬抬时两人应用力一致,相互照应。

9在进行水压试验时,散热器下面应垫木板。散热器按规定压力值试验时,加压后不得用力冲撞磕碰。 10人力卸散热器时,所用缆索、杠子应牢固,使用井字架、龙门架或外用电梯运输时,严禁超载或放偏。散热器运进楼层后,应分散堆放。 11稳挂散热器应扶好,用压杠压起后平稳放在托钩上。 12往沟内运管,应上下配合,不得往沟内抛掷管件。 13安装立、托、吊管时,要上、下配合好。尚未安装的楼板预留洞口必须盖严盖牢。使用的人字梯、临时脚手架、绳索等必须坚固、平稳。脚手架不得超重,不得有空隙和探头板。 14采用井字架、龙门架、外用电梯往楼层内搬运瓷器时,每次不宜放置过多。瓷器运至楼层后应选择安全地方放置,下面必须垫好草袋或木板,不得磕碰受损。 这里填写您的公司名字 Fill In Your Business Name Here

综合教程2-课后句子翻译

1)在生活中,我们最愚蠢的行为就是太执着于自己的东西,不愿意放弃。(cling to sth., let go) In life, our stupidest course of action is to cling too much to what we have and refuse to let go. 2)我愿意在IT行业工作,但我不知如何着手。(go about sth.) I am willing to work in the IT industry, but have no idea how to go about it. 3)许多人都已意识到和大自然和谐相处的重要性。(aware of, in harmony with) Many people are aware of the importance of living in harmony with nature. 4)像“代沟”这样的问题是不可以被掩盖起来的。(sweep … under the carpet) Problems like the generation gap cannot be swept under the carpet. 5)我始终不懂什么事在使她烦心。(eat away at) I never did understand what was eating away at her. 6)他一生都和世无争。(at peace with) He has been at peace with the world all his life. 7)他没有说出自己的想法。一则她未必了解,二则他怕自己得不到她的宽恕。(for one thing …, for another …) He did not speak out / say what he thought. For one thing, she might not understand. For another, he was afraid that she might not forgive him. 8)随着岁月的流逝,她对中国文化越来越感兴趣。(roll by) As the years rolled by, he became increasingly interested in / fascinated by Chinese culture. Unit 2 1)这种情景总是令我感动,让我深思。(set sb. doing sth.) Such a sight always moves me and sets me thinking. / This is a sight that never fail to move me and set me thinking. 2)别怪她了,在类似情况下,你自己也会这么做的。(under … circumstances) Stop scolding / blaming her – You’d have done the same thing under / in similar circumstances. 3)我们应当为自己所拥有的一切而心存感激,而不是对任何事情都漫不经心。(be appreciative of / grateful for, take … for granted) We should be appreciative of / grateful for what we have instead of taking everything for granted. 4)他也许会答应改变,但无非又是说一套做一套罢了。(It’s the same old story of) He may promise to change, but it’s the same old story of saying one thing and doing another. 5)我苦苦思索该怎样把这可怕的消息告诉他。(rack one’s brains about sth., break the news to sb.) I racked my brains about how to break the terrible news to him. 6)我将永远无法报答父母为我所做的一切。(repay sb. for sth.) It will be impossible for me to repay my parents for everything they have done for me. 7)且让我再次感谢大家的参和,祝你们工作顺利。(it remains to sb. to do sth.) For now, it remains to me to thank you once more for joining us and wish you good luck in your work. 8)我一开始就说过,他会给我们惹麻烦的。(right from the beginning) I said right from the beginning that he would cause us trouble. Unit 3 1)听说他的新书是根据发生在田纳西州一个小镇上的真事写的。(rumor has it that) Rumor has it that his new book is based on a true story about a family in a small Tennessee

实验7-数据库安全性策略

实验7 数据库安全性策略 一、实验目的 1.掌握使用SQL语句进行数据库完全备份的办法 2.掌握使用客户端程序进行完全备份的方法 3.掌握数据库用户账号的建立与删除方法 4.掌握数据库用户权限的授予方法 二、实验准备 1.了解在MySQL Administrator中进行数据库备份操作的方法 2.了解数据库安全的重要性 3.了解数据库用户账号的建立于删除的方法 4.了解数据库用户权限的授予和回收方法 三、实验内容及要求 1.用SQL语句进行数据库备份和恢复 1)备份YGGL数据库中的Employees表到D盘FILE文件夹下,并在执行 完成后查看D盘FILE文件夹下是否有Employees.txt文件。 2)先删去Employees表中的几行数据,再使用SQL语句恢复Employees 表,执行完成后使用SELECT查看Employees表的变化。 2.使用客户端工具备份和恢复表 1)使用mysqldump备份数据库YGGL中的Salary表,并查看是否备份成 功。 2)备份整个YGGL数据库,并查看是否备份成功。 3)先删除YGGL数据库中的Employees表,再使用mysql恢复数据库。 4)假设原来的Salary表内容已经备份成Salary.txt文件,如果Salary 表中的数据发生了变动,使用mysqlimport恢复表数据。 3.数据库用户 1)创建数据库用户user_1和user_2,密码都为1234(假设服务器名为 localhost)。 2)将用户user_2的名称修改为user_3。 3)将用户user_3的密码修改为123456。 4)删除用户user_3。 5)以user_1用户身份登陆MySQL。 6)刚刚创建的用户有什么样的权限。 7)创建一个用户,并以该用户的身份登录。 4.用户权限的授予与收回 1)授予用户user_1对YGGL数据库Emlpoees表的所有操作权限及查询 操作权限。 2)授予用户user_1对Emlpoees表进行插入,修改,删除操作权限。 3)授予用户user_1对数据库YGGL的所有权限。 4)授予user_1在Salary表上的SELECT权限,并允许其将该权限授予 其他用户。 5)回收user_1的Emlpoees表上的SELECT权限。 6)授予用户user_1所有的用户权限。 7)取消用户user_1所有的权限。

水暖工安全操作规程

水暖工安全操作规程 1、工作前必须按规定佩带好劳动防护用品。 2、工作前要检查所使用工具是否安全,工作场所是否合乎要求,并排除安全隐患后,方可作业。 3、往地沟内送管子时,沟内禁止有人操作,管子两端必须用坚固的绳子绑好,用手慢慢放入沟内,使管子保持平稳。在沟内调整接头,找坡度时,应用铁丝或坚固的绳子吊在横梁上再进行,以免管子脱落伤人。 4、搬运安装管子时,统一指挥,齐抬、齐放。 5、管道打铅口时,必须把接头处擦干,补修操作时要关闭闸阀,以免灌铅时碰水爆炸。发生渗水现象,应立即采取措施,确认安全后方可进行操作。 6、熔铅工具不得乱放,应放在一定的位置,防止泥水浸入,使铅碰水发生爆炸。 7、铅锅熔铅量应为四分之三左右,热铅不得过满以免流出伤人。 &在沟内铺设下水管路时,承插口应仔细垫好,如果口不对时,200m m

以下的用手调整,200m m以上的用撬棍调整,不得用手搬动.抹水泥口时,要戴胶手套,以免伤手。 9、在土方内做水压试验时,要躲开容易破裂的地方,或者用木板顶上以免发生事故。 10、地沟发生漏气、漏水等现象时,检修人员戴好安全帽,工作必须两人以上进行,有人监护。 11、锯铁管要锯断时,不要用力过猛,以免把手碰伤。 12、使用板牙套丝扣时,两人使劲要均匀,当丝扣套到规定尺寸时,松板牙要慢,接管时不要用手直接抹铅油以免划伤手。 13、高空吊管时,要有足够人力,绳子要牢固,竖梯坡度不得超过40 ° -60。,以免滑倒发生事故。梯子要设人扶持,高空作业时要系好安全带。 14、使用工具要按规程进行操作,不准拿不合格的管子代用,更不准把扳子上接套管使用。 15、在电线或喷漆的地方操作时,必须注意触电或着火, 工作前要制定安全措施。 16、在地上盘炉开火时,要检查附近有无易燃易爆物品,

相关文档
相关文档 最新文档