精华内容
下载资源
问答
  • 与20名医疗保健提供者,学校教师,社会工作者以及儿童和家庭服务从业人员进行了焦点小组和关键信息提供者访谈。 主题分析方法用于分析和编码定性信息,并发现模式和主题。 分析过程包括数据沉浸,做笔记,将数据...
  • 英格兰剑桥--(美国商业资讯)--为关键业务信息和应用提供信任、完整性和控制的专业公司nCipher Security今天正式成立,成为通用硬件安全模块(HSM)市场的新领导。   当今快速发展的数字环境有助于提高客户满意度...

    这家新成立的组织将保持通用HSM市场的竞争并确保持续创新

     

    英格兰剑桥--(美国商业资讯)--为关键业务信息和应用提供信任、完整性和控制的专业公司nCipher Security今天正式成立,成为通用硬件安全模块(HSM)市场的新领导者。

     

    当今快速发展的数字环境有助于提高客户满意度、提升运营效率和获得竞争优势,但也带来了新的安全挑战。nCipher市场领先的解决方案和服务使组织既能跟上创新步伐,又能保护其业务关键资产免受安全漏洞的影响。

     

    20多年来,全球领先的组织一直依赖nCipher的nShield HSM为其关键业务应用提供信任根和满足网络安全需求。前10大财富100强中的5家和前20大富时100指数公司中的10家都是我们的客户。

     

    组织现在需要遵守越来越多严格的合规性要求,例如《欧盟通用数据保护条例》(GDPR)、《加州数据安全泄露通知法案》和《澳大利亚2017年隐私权修正法案》。nCipher为敏感数据保护提供最高级别的保证,帮助组织满足这些非常严格的合规控制。

     

    nCipher Security首席执行官Cindy Provin表示:
    “我很高兴也很自豪领导一个创新而敏捷的世界一流团队,帮助我们的客户拥抱数字化未来。nCipher的nShield HSM是确保当今关键业务应用以及云计算、新数字支付方式和物联网的关键组成部分。令人瞩目的数据泄露事件已经成为每日的头条新闻,而相关的新法规也已实行,在这种环境下组织必须做好安全措施。”

     

    nCipher客户依靠nShield HSM为各种业务应用提供信任根,包括公钥基础结设施(PKIs)、SSL/TLS加密密钥保护、代码签名、数字签名和区块链。随着物联网(IoT)的发展而导致的对设备ID和证书的需求增加,nShield HSM将继续为关键安全措施提供支持,例如使用数字证书进行设备身份验证。

     

    nCipher的优势:

     

    • 世界一流、敬业且经验丰富的领导团队
    • 以32项专利为支持的非凡技术能力
    • 700多年的应用密码学和安全经验
    • 强大的第三方认证——FIPS 140-2,eIDAS,通用标准
    • 提供市场领先的通用HSM已有20年历史
    • 强大的客户群,包括前10大财富100强中的5家和前20大富时100指数公司中的10家
    • 全球战略技术合作伙伴和分销商网络

     

    nCipher Security现在是Thales内部分立的独立实体,与Thales Group准备剥离给第三方买家的其他业务分离。这是Thales Group收购金雅拓的要约以及包括欧盟委员会在内的多家反垄断机构要求的结果,目的是在通用HSM领域组建一个强大的参与者以保持这一重要市场的竞争,以及继续为我们的nShield客户服务和保持创新。Thales和金雅拓仍在与反垄断主管机构进行建设性对话,以获得俄罗斯和美国对于合并控制的最后监管批准。此外,Thales和金雅拓还正在寻求俄罗斯主管当局对外国投资的监管许可。

     

    nCipher Security将在RSA Conference 2019的3106号展位参展,介绍我们的加密解决方案是如何防范当今的威胁和攻击、实现合规性和保护业务应用的。

     

    请在LinkedInTwitterFacebookInstagram上搜索 nCipherSecurity关注我们。

     

    关于nCipher Security

     

    当今快速发展的数字环境提高了客户满意度、竞争优势和运营效率,但也增加了安全风险。

     

    通用硬件安全模块(HSM)市场的领导者nCipher Security通过为关键业务信息和应用提供信任、完整性和控制,为世界领先的组织提供支持。

     

    我们的加密解决方案使用当今全球组织赖以使用的同样成熟的技术来防范对敏感数据、网络通信和企业基础架构的威胁,从而保护新兴技术——云、物联网、区块链、数字支付——并帮助满足新的合规性要求。我们为您的关键业务应用提供信任,确保数据的完整性,并让您能够完全掌控——在现在和未来的任何时刻。www.ncipher.com

     

    展开全文
  • 内容提供者相关技术

    2015-03-06 09:33:08
    android手机的联系人信息获取 我们是可以直接操作android提供的内容提供者的, android需要做的就是在联系人中定义一个内容提供者;    内容提供者关键步骤:   1,创建(A程序)数据库; 继承S...

     

     android中数据库一般是不能直接被其他程序创建的,一般是通过内容提供者 ,内容提供者是android开发中常见的数据操作方式,例如;android手机的联系人信息获取  我们是可以直接操作android提供的内容提供者的, android需要做的就是在联系人中定义一个内容提供者;  

     

       内容提供者关键步骤: 

              1,创建(A程序)数据库;   继承SQLiteOpenHelper创建数据库和表

               2,创建(A程序)的内容提供者;   继承Contentprovider自定义内容提供者      

             3,创建(B程序)操作A程序的数据(增删该查) ; 使用上下文获取内容提供者

     

     

     

     

    一: A程序;

      1,定义A程序的数据库

     

    package com.example.DemoDB;
    /**
     * 数据库的创建
     */
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
    
    public class HelperDemo extends SQLiteOpenHelper{
    
    	public HelperDemo(Context context, String name, CursorFactory factory,
    			int version) {
    		super(context, name, factory, version);
    		// TODO Auto-generated constructor stub
    	}
    
    	@Override
    	public void onCreate(SQLiteDatabase db) {
    		//创建表
    		String sql="create table user(_id integer primary key autoincrement,userphone txet,username text)";
    		//使用execSQL只用sql语句
    		db.execSQL(sql);
    	}
    
    	@Override
    	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    		// TODO Auto-generated method stub
    		
    	}
    
    }
    

     

     

    2,创建显示操作数据的xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_marginTop="130dp" />
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/textView1"
            android:layout_marginLeft="18dp"
            android:layout_marginTop="44dp"
            android:onClick="optionuser"
            android:text="添加" />
    
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/button1"
            android:layout_marginLeft="46dp"
            android:layout_toRightOf="@+id/button1"
            android:onClick="optionuser"
            android:text="删除" />
    
        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/button1"
            android:layout_below="@+id/button1"
            android:layout_marginTop="22dp"
            android:onClick="optionuser"
            android:text="修改" />
    
        <Button
            android:id="@+id/button4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/button3"
            android:layout_alignBottom="@+id/button3"
            android:layout_alignLeft="@+id/button2"
            android:onClick="optionuser"
            android:text="查询" />
    
    </RelativeLayout>

     

    3,创建A程序的数据库和操作数据库方法,将操作的结果显示出来

    package com.example.DemoDB;
    
    import com.example.sharedpreferrences.R;
    
    import android.app.Activity;
    import android.content.ContentValues;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    /**
     * 
     * @author Administrator 数据库的操作
     */
    public class DemoDB extends Activity {
    	private TextView v1;
    	private Button t1;
    	private Button t2;
    	private Button t3;
    	private Button t4;
    	private HelperDemo demo;
    	private SQLiteDatabase database;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main_db);
             //创建数据库 user_contacts数据库的名字 
    		demo = new HelperDemo(this, "user_contacts", null, 1);
             //增删改查按钮和显示数据按钮
    		v1 = (TextView) this.findViewById(R.id.textView1);
    		t1 = (Button) this.findViewById(R.id.button1);
    		t2 = (Button) this.findViewById(R.id.button2);
    		t3 = (Button) this.findViewById(R.id.button3);
    		t4 = (Button) this.findViewById(R.id.button4);
    
    	}
    
    	// 数据库的操作
    	public void optionuser(View v) {
    		switch (v.getId()) {
    		case R.id.button1:// 添加数据
    			database = demo.getWritableDatabase();
    			if (database == null) {
    				Toast.makeText(this, "不能添加数据", Toast.LENGTH_SHORT).show();
    			} else {
    				// 第一个方式
    				String sql = "insert into user values(null,'12345','长沙')";
    				database.execSQL(sql);
    
    				// 第二种方式
    				// 参数一:表名
    				// 参数二:null
    				// 参数三:使用ContentValues赋值
    				// ContentValues values = new ContentValues();
    				// values.put("userphone", "123");
    				// values.put("username", "value");
    				//
    				// database.insert("user", null, values);
    				selectuser();
    			}
    			break;
    
    		case R.id.button2:// 删除
    			database = demo.getWritableDatabase();
    			if (database == null) {
    				Toast.makeText(this, "不能删除数据数据", Toast.LENGTH_SHORT).show();
    			} else {
    
    				// //第一种方式
    				// String sql ="delete from user where _id=?";
    				// String[] str= {"1"};
    				// database.execSQL(sql, str);
    
    				// 第二种方式
    				// 参数一:表名
    				// 参数二:条件
    				// 参数三:条件的值
    				String whereClause = "_id=?";
    				String[] whereArgs = { "2" };
    				database.delete("user", whereClause, whereArgs);
    			}
    
    			selectuser();
    			break;
    		case R.id.button3:// 修改
    			database = demo.getWritableDatabase();
    			if (database == null) {
    				Toast.makeText(this, "不能修改数据", Toast.LENGTH_SHORT).show();
    			} else {
    
    				// 第一种方式
    
    				// String sql="update user set username='武汉' where _id=6";
    				// database.execSQL(sql);
    
    				// 参数一:表名
    				// 参数二:更新的值
    				// 参数三:?的字段名
    				// 参数四:?字段名的值
    				ContentValues values = new ContentValues();
    				values.put("username", "北京");
    				String whereClause = "_id=?";
    				String[] whereArgs = { "5" };
    				database.update("user", values, whereClause, whereArgs);
    			}
    
    			selectuser();
    			break;
    		case R.id.button4:// 查询
    			selectuser();
    
    			break;
    		}
    	}
    
    	// 查询
    	public void selectuser() {
    		SQLiteDatabase database2 = demo.getReadableDatabase();
    //		// 第一种方式
    //		String sql = "select * from user order by _id desc";
    //		Cursor c = database2.rawQuery(sql, null);
    //		StringBuffer buffer = new StringBuffer();
    //		while (c.moveToNext()) {
    //			int id = c.getInt(c.getColumnIndex("_id"));
    //			String phone = c.getString(c.getColumnIndex("userphone"));
    //			String name = c.getString(c.getColumnIndex("username"));
    //			buffer.append(id + "\t姓名:\t" + name + "<><>电话:\t" + phone + "\r\n");
    //		}
    //		v1.setText(buffer);
    		
    		//第二种方式
    		//参数一:表名
    		//查询数据会返回一个游标对象,遍历游标对象就得到值
    		Cursor c=database2.query("user", null, null, null, null, null, null);
    		StringBuffer buffer = new StringBuffer();
    		while (c.moveToNext()) {
    			int id = c.getInt(c.getColumnIndex("_id"));
    			String phone = c.getString(c.getColumnIndex("userphone"));
    			String name = c.getString(c.getColumnIndex("username"));
    			buffer.append(id + "\t姓名:\t" + name + "<><>电话:\t" + phone + "\r\n");
    		}
    		v1.setText(buffer);
    	}
    
    }
    

     

     

     

    4,定义A程序的内容提供者

    package com.example.DemoDB;
    /**
     * 内容提供者
     */
    import android.content.ContentProvider;
    import android.content.ContentUris;
    import android.content.ContentValues;
    import android.content.UriMatcher;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.net.Uri;
    
    /**
     * 
     * @author Administrator 使用内容提供者共享数据 第一步:继承ContentProvider 第二步; <provider
     *         android:name="com.example.DemoDB.MyContent"
     *         android:authorities="com.example.DemoDB.MyContent.provider"
     *         android:exported="true"></provider>
     */
    public class MyContent extends ContentProvider {
    
    	// 定义字符串用来匹配的关键
    	static String authority = "com.MyContent.provider";
    	// 定义一个URI匹配器,NO_MATCH表示默认不匹配任何路径
    	static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
    	// 使用静态块来添加可匹配路径,为了保证在执行那个程序之前,匹配器中有可匹配路径
    	static {
    		// 参数一:内容提供者
    		// 参数二:名字
    		// 参数三:匹配的地址
    		matcher.addURI(authority, "insretdate", 1);//插入
    		matcher.addURI(authority, "selectdate", 2);//查询
    		matcher.addURI(authority, "daletedate", 3);//删除
    		matcher.addURI(authority, "updatedate", 4);//修改
    	}
    
    	private HelperDemo demo;
    
    	@Override
    	public boolean onCreate() {
    		// 创建数据库
    		demo = new HelperDemo(this.getContext(), "user_contacts", null, 1);
    		return true;
    	}
    
    	@Override
    	public String getType(Uri uri) {
    		// 获得类型
    		return null;
    	}
    
    	@Override
    	public Cursor query(Uri uri, String[] projection, String selection,
    			String[] selectionArgs, String sortOrder) {
    		// 匹配内容提供者的数据
    		int code = matcher.match(uri);
    		if (code != 2) {
    			throw new IllegalArgumentException("参数异常:" + uri);
    		}
    		//判断是否可读
    		SQLiteDatabase querydatabase=demo.getReadableDatabase();
    		if(querydatabase==null){
    			throw new RuntimeException("数据不存在");
    		}
    		Cursor cursor=querydatabase.query("user", projection, selection, selectionArgs, null, null, sortOrder);
    		
    		
    		return cursor;
    	}
    
    	@Override
    	// 插入数据
    	public Uri insert(Uri uri, ContentValues values) {
    		// 匹配uri
    		int code = matcher.match(uri);
    		if (code != 1) {
    			throw new IllegalArgumentException("插入数据时参数异常:" + uri);
    		}
    
    		SQLiteDatabase db = demo.getWritableDatabase();
    		if (db == null) {
    			throw new RuntimeException("无法插入数据,数据库对象为只读!");
    		}
    		// 返回的是插入的数据的id 插入到数据库可以使用insertOrThrow 和insert插入
    		long id = db.insertOrThrow("user", "_id", values);
    		// 返回的Uri代表被插入的数据
    		uri = ContentUris.withAppendedId(uri, id);
    
    		return uri;
    	}
    
    	@Override
    	// 删除数据
    	public int delete(Uri uri, String selection, String[] selectionArgs) {
              //匹配编码
           int code=matcher.match(uri);
           if(code!=3){
        	   throw new IllegalArgumentException("删除参数异常:"+uri);
           }
           //判断是否可写
           SQLiteDatabase sd= demo.getWritableDatabase();
            if(sd==null){
            	throw new RuntimeException("删除 运行时异常");
            }
            
            //删除数据
            int len=sd.delete("user", selection, selectionArgs);
            
           
    		return len;
    	}
    
    	@Override
    	// 更新数据
    	public int update(Uri uri, ContentValues values, String selection,
    			String[] selectionArgs) {
    		int code=matcher.match(uri);
    		if(code!=4){
    			throw new IllegalArgumentException("更新参数异常:"+uri);
    		}
    		SQLiteDatabase sd=demo.getWritableDatabase();
    		if(sd==null){
    			throw new RuntimeException("更新运行时异常");
    		}
    		//更新数据
    		int len=sd.update("user", values, selection, selectionArgs);
    		return len;
    	}
    
    }
    

     

    分析:

        a, MyContent类执行时,先初始化static的相关属性,

    // 定义字符串用来匹配的关键
    	static String authority = "com.MyContent.provider";
    	// 定义一个URI匹配器,NO_MATCH表示默认不匹配任何路径
    	static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
    	// 使用静态块来添加可匹配路径,为了保证在执行那个程序之前,匹配器中有可匹配路径
    	static {
    		// 参数一:内容提供者
    		// 参数二:名字
    		// 参数三:匹配的地址
    		matcher.addURI(authority, "insretdate", 1);//插入
    		matcher.addURI(authority, "selectdate", 2);//查询
    		matcher.addURI(authority, "daletedate", 3);//删除
    		matcher.addURI(authority, "updatedate", 4);//修改
    	}

         b,    B程序操作A程序的内容提供者是通过 addURI()方法中的名字 找到内容提供者,通过匹配地址找到插  入语句

     

    5,清单中注册

      <provider 

                android:name="com.example.DemoDB.MyContent"

                android:authorities="com.MyContent.provider"

                android:exported="true"></provider>

        </application>

     

     

     

    二 :B程序

      操作A程序中的内容提供者的步骤:

             上下文获取内容提供者

     

      1,xml文件  按不同的按钮输入框输入的结果不同,请仔细查看B程序中按钮的操作

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity" >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" />
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_marginBottom="141dp"
            android:onClick="show"
            android:text="更新" />
    
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/button1"
            android:layout_alignBottom="@+id/button1"
            android:layout_toRightOf="@+id/textView1"
            android:onClick="show"
            android:text="查询" />
    
        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignRight="@+id/button1"
            android:layout_below="@+id/button2"
            android:layout_marginTop="36dp"
            android:onClick="show"
            android:text="删除" />
    
        <Button
            android:id="@+id/button4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/button3"
            android:layout_alignBottom="@+id/button3"
            android:layout_alignRight="@+id/editText2"
            android:onClick="show"
            android:text="添加" />
    
        <EditText
            android:id="@+id/editText2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/button1"
            android:layout_centerVertical="true"
            android:ems="10" />
    
        <EditText
            android:id="@+id/editText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@+id/editText2"
            android:layout_alignLeft="@+id/editText2"
            android:layout_marginBottom="14dp"
            android:ems="10" >
    
            <requestFocus />
        </EditText>
    
    </RelativeLayout>

     

    2,B程序操作A程序的内容提供者

      

    package com.example.date.provider;
    
    import android.net.Uri;
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.ContentResolver;
    import android.content.ContentValues;
    import android.database.Cursor;
    import android.view.Menu;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.TextView;
    /**
     * 
     * @author Administrator
     *操作数据保存程序的内容提供者,实现增删改查操作
     */
    public class MainActivity extends Activity {
    
    	private EditText editText1;
    	private EditText editText2;
    	private ContentResolver resolver; 
    	private TextView t1;	
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		t1=(TextView)this.findViewById(R.id.textView1);
    		editText1 = (EditText) this.findViewById(R.id.editText1);
    		editText2 = (EditText) this.findViewById(R.id.editText2);
    		//获得内容提供者
         resolver= this.getContentResolver();
    	}
    
    	//实现按钮的监听器方法
    	public void show(View v) {
    		switch (v.getId()) {
    		case R.id.button1://更新数据
    			//获取输入框的值
    			String str=editText1.getText().toString().trim();
    			//内容提供者的地址
                Uri uri= Uri.parse("content://com.MyContent.provider/updatedate");
                ContentValues values= new ContentValues();
                values.put("username", "天津");
                String where="_id=?";
                 String[] selectionArgs={str};
                 //更新语句
                resolver.update(uri, values, where, selectionArgs);
                 
    			break;
    		case R.id.button2:
    			//查询
    			 Uri uriselect= Uri.parse("content://com.MyContent.provider/selectdate");
    			
    			 Cursor c= resolver.query(uriselect, null, null, null, null);
    			 StringBuffer buffer = new StringBuffer();
    				while (c.moveToNext()) {
    					int id = c.getInt(c.getColumnIndex("_id"));
    					String phone = c.getString(c.getColumnIndex("userphone"));
    					String name = c.getString(c.getColumnIndex("username"));
    					buffer.append(id + "\t姓名:\t" + name + "<><>电话:\t" + phone + "\r\n");
    				}
    				t1.setText(buffer);
    			break;
    		case R.id.button3:	
    			//删除
             Uri uridelete=Uri.parse("content://com.MyContent.provider/daletedate");
             String str1=editText1.getText().toString().trim();
             String wheredelete = "username=?";
    			String[] selectionArgsdelete = {str1};
             resolver.delete(uridelete, wheredelete, selectionArgsdelete);
             
    			break;
    		case R.id.button4:
    			//增加
              Uri uriinsret= Uri.parse("content://com.MyContent.provider/insretdate");
              //获取输入框中的姓名和电话
              String name=editText1.getText().toString().trim();	
              String phone=editText2.getText().toString().trim();
              //使用键值对存放数据
              ContentValues valuesinsert = new ContentValues();
              
              valuesinsert.put("username", name);
              valuesinsert.put("userphone", phone);
              //插入语句
              resolver.insert(uriinsret, valuesinsert);
              break;
    		}
    	}
    }
    

     

     

     

    展开全文
  • 设施边界识别模型, 规范了关键信息基础设施边界识别的流程、 方法和要求, 为关键信息基础设施边界识别工作提供一种方法性指南。 本标准适用于关键信息基础设施保护工作部门、关键信息基础设施运营识别关键信息...
  • 只做了面向PC端的页面,非响应式的,手机端浏览起来会有点奇怪 技术栈 前端:jQuery+map.baidu+Encharts+jQCloud+layui 后端:SpringBoot+Mysql8.23+Thymeleaf+Mongodb+Mybatis+PageHelper+HttpClient&Jsoup+selenium ...
  • 组织对于物联网生成数据的业务价值保持着相当高的兴奋度,但是很少讨论关于如何管理网络设备,如何确保生成数据的安全性并快速分析数据,及时给企业提供有效信息的问题。软件定义网络(SDN)能够帮助解决这些问题。 ...

    SDN将利用集中控制和抽象的网络设备为物联网(IoT)提供灵活的、动态的、自动化的网络重构。

    组织对于物联网生成数据的业务价值保持着相当高的兴奋度,但是很少讨论关于如何管理网络设备,如何确保生成数据的安全性并快速分析数据,及时给企业提供有效信息的问题。软件定义网络(SDN)能够帮助解决这些问题。

    虚拟化网络组件和服务可以快速自动地重新配置网络设备,变更数据流线路以及应用身份验证和访问规则。这些功能可以保证数据的快速生成并确保数据的安全性,还可以改善网络管理(包括对远程设备的管理)。

    SDN能够简化IoT即插即用的预定义策略下的网络设备、自动检测和修复安全漏洞、配置边缘计算和分析数据流向的环境。

    下面介绍了IoT的两个使用案例:

    *防井喷装置的传感器传递出来的数据每年可以帮助oil运营商在不可控故障上节省数百万美元。原来从压力读数到阀门位置的大量数据流,现在在卫星链路下,常从远程位置发送到中心服务器。这不仅增加了数据传输的成本,还给数据接收和分析造成了延迟。当这些数据用来控制强大的设备或易受影响的工业过程的时候,这种延迟是相当致命的。

    这两个问题加剧传感器的价格下跌,进而能够部署更多的传感器,还将促进技术进步,使得每个传感器能够生成更多的数据。而如果可以让传感器处理更多的边缘数据并确定哪些是要发送到数据中心的数据,就能有效缓解这两个问题。所以网络组件和服务的快速开通是众望所趋,而安全组规则的实时应用有助于保护私有信息。

    *在零售业,例如客户智能手机监测到的位置信息和他们拍的照片,或者内置传感器监测到的他们的浏览行为等数据信息都可以用来作为定制化服务快速出售。此外,IoT还将满足以下需求:大量的数据采集、快速分析数据的功能、服务与边缘数据处理的快速配置以及严格的安全性把控。

    想要实现这些场景,我们必须要克服前所未有的挑战。一方面是设备数量,据估计,截至2020年设备数量将达到500亿,每一个新设备的添加都将扩大黑客的“攻击面”;另一方面是网络的移动数据量,IDC预测截至2020年,物联网生成的数据量将占地球上所有数据量的10%。

    除此之外,还有各种各样的设备需要管理和支持,包括:支持流行的管理应用程序和协议的网络交换机、SCADA(数据采集与监视控制系统)设备和那些缺乏计算和/或内存来支持标准身份验证或加密的设备。另外,还要求非常快速的,甚至是实时的应答,特别是对涉及安全(如工业危险品)或商业(如监控库存或客户行为)的应用程序。

    考虑到物联网的复杂性和规模,简单的手动管理网络显然是不可行的。SDN提供了唯一可行的,成本效益好的方式来管理物联网,确保网络和数据的安全性,减少带宽需求和最大限度地提高应用程序的性能和分析。

    SDN的优势

    SDN给IoT带来了三大功能:

    集中化:通过对软件的集中控制完成对基于策略控制的,甚至是大规模的、复杂的网络进行自动化管理。考虑到物联网环境巨大的潜在规模,SDN需要尽可能地让管理变得简单。

    抽象化:网络中设备和协议的抽象化让物联网应用程序能够访问数据,分析和控制设备,并添加新的传感器和网络控制设备的同时,并不需要暴露底层基础设施的细节。SDN简化了物联网设备的创建、部署和持续管理功能以及受益于这些设备的应用程序。

    灵活性:物联网需要根据业务需求和数据流的变化灵活地调整组件(和管理数据存储和分析),不断增强性能和安全性。物联网环境本质上与许多终端设备和边缘计算是分开的,因此,网络比标准应用程序环境更为重要。SDN动态更新网络的能力将为物联网的发展需求提供便利。

    例如,SDN通过即插即用的预定义策略的使用,允许快速添加新类型的物联网传感器;通过提取硬件中的网络服务,允许自动化配置、创建基于策略的虚拟负载平衡器、满足各种数据流的服务质量和网络资源供应高峰时的需求。

    网络基础设施能被轻松添加和删除,这大大降低了物联网实验的成本和风险。

    SDN能够轻易地找到并排除边缘网络受到的攻击。他们也可以应用自动化策略来重定向网络流量,如:可以被安全检查的蜜网。SDN通过简化网络管理来让物联网设置和实施更多的分段访问控制。

    SDN可以提供一个动态的、智能的、自学分层的安全模型,确保工程师只能配置那些授权为“touch”的设备。这远比传统网络四周的“墙”(不能应用于物联网)有用的多,这取决于安全模型的大小以及攻击往往在防火墙内部。

    最后,通过集中配置和管理,SDN将允许物联网对网络进行有效的编程,针对数据流作出自动、实时的策略。这些策略不仅用于分析传感器数据,还有网络的健康状态,分析边缘网络的信息防止流量阻塞和安全风险。网络的集中配置和管理,再加上网络设备的抽象,让管理物联网的边缘应用程序变得更容易。

    例如,SDN将允许物联网调整数据聚合,在这些并不传送到核心系统的边缘数据数据不会减缓慢关键的应用程序流量之前,并不是那么重要。这种边缘计算还可以执行快速的、局部的分析,并且如果分析表明有紧急情况(如即将失败的喷气发动机),还能加速核心网络的数据生成。

    准备工作

    通过使用SDN,IT将成为发现物联网商业价值的关键驱动者,但这样的变化还需要作长远的规划。

    要做到物联网与SDN的融合,你应该开始考虑在安全、服务质量(QoS)和数据保密等领域,到底有哪些策略可以作用在物联网中,以及如何在虚拟网络构建和实施这些策略。

    现今所有公司的网络都配置有策略,但这些策略通常是隐式的,埋在一大堆ACL和网络配置中。SDN将在策略的头部进行操作,物联网团队可以通过网络开发实现人类可读的策略。物联网团队应该开始了解他们的环境配置,以便他们可以决定应该提出什么策略。

    各公司现在应该要对边缘计算和分析网络的长期愿景作出规划了。与此同时,他们应该知道物联网集成SDN正处在早期阶段,这意味着他们的网络和应用程序规划师应该预料会有一些不可预测的变化,例如,他们的网络必须处理大量的数据,需要动态地在本地配置而不是集中处理。实现这个功能的关键因素有:集中控制、网络设备的抽象化以及灵活的、动态的自动化重配置网络。从本质上讲,集中控制器通过积极采用策略来隔离不同类型的流量,进而隔离网络。集中控制平面具有方便操作和管理的优势。

    物联网团队还应该评估他们的网络、计算和数据量,因为物联网要求包含多样性设备的端到端的SDN解决方案,不仅仅横穿物联网的一个域,而是整个数据中心和广域网(WAN)。

    最后,物联网需要熟悉边缘计算环境(本地和集中处理的交界处)的app开发。随着app层的抽象网络变得高度可编程,网络团队需要投入资源和通过培训去了解这些编程模型(如REST),这样他们可以更容易地与app开发团队合作。

    物联网将不断壮大,多样性的远程管理工具也不会削减其发展的势头。是时候开始学习SDN如何帮助你管理这个新世界,保证快速、安全地传播和分析物联网产生的数据。

    作者:佚名


    来源:51CTO

    展开全文
  • 机器人构架假冒 Robot Framework关键字库包装器。 该模块允许在Robot Framework中轻松使用Faker的随机测试数据生成。 我讨厌使用静态测试数据,因为被测系统不可避免地会演变为通过测试,而不必解决错误的根本...
  • 使用OLE DB进行数据库编程时,可以通过向导快速建立一个使用(Consumer)。向导会自动生成一些方法。...) 首先我们需要明白一点,那就是在创建使用时你把如下一些基本信息提供给了向导:欲连

         使用OLE DB进行数据库编程时,可以通过向导快速建立一个使用者(Consumer)。向导会自动生成一些方法。为了正确使用生成的使用者,弄清楚这些方法究竟做些什么是必要的。下面就对其中比较关键的几个做一个简单分析。(注:以下结论主要通过实验和阅读源代码得出,仅供参考。如有错误还望指正。)

         首先我们需要明白一点,那就是在创建使用者时你把如下一些基本信息提供给了向导:欲连接的数据库服务器、服务器登录信息、欲访问的数据库以及欲访问的表。向导然后基于这些信息自动生成使用者。

         OpenDataSource :这是一个在名字上比较有误导性的方法。一般来说,我们手动访问数据库时都需要进行两个初始步骤:1、通过CDataSource建立和数据源的连接;2、基于建立的连接创建CSession。从OpenDataSource这个名字看,它似乎仅完成了连接数据源的任务,但实际上它还完成了创建CSession的任务,把两个初始步骤全部完成了。这个函数没有任何参数,它会在内部自动利用之前你提供给向导的信息。这里就出现了这样一个问题:你提供给向导的信息(比如登陆ID及密码)是以明文形式保存在源代码中的(初始化字符串),但这些信息同时又可能是需要保密的。为此VC会默认在源代码中相应地方(也就是OpenDataSource使用这个初始化字符串的地方) 加上了一个#error标记以提醒你注意。此时进行编译,将在#error处产生一个编译错误。只有当你对该初始化字符串进行检查并移出#error标记后才能正常编译链接。如果我们想使用oledb32.dll提供的连接建立对话框进行数据源的连接,更改#error处的代码为使用不带任何实参的Open即可(默认是使用OpenFromInitializationString)。

         OpenAll :这个方法没有任何参数,它首先调用OpenDataSource,然后建立默认的SQL命令(一个类似SELECT *的命令)并执行,获取目标表的所有行(记得我们之前提供给了向导欲访问的表信息,所以调用OpenAll时不需要给出目标表信息)。由此可知,在进行后续SQL命令执行操作之前应根据需要调用Close、ReleaseCommand或CloseAll(下面将要介绍) 等方法。

         CloseDataSource :虽然从名字看貌似是关闭CDataSource,不过源代码表明它实际关闭CSession对象。

         CloseAll :顺序调用Close,ReleaseCommand和CloseDataSource。

         细心的读者可能会发现这样一个问题:CDataSource的Close哪儿去了那?查阅OpenDataSource的源代码发现在函数内部定义了一CDataSource的自动对象_db。在用_db创建了一个CSession(被定义成使用者的一个属性)之后,_db就随着函数的返回结束了自己短暂的生命~。换句话说,CDataSource还没有调用Close就挂了。话说至此,貌似memory leak了。继续察看CDataSource的源代码,发现居然没有析构函数。不过再一细看,猛然发现其唯一的一个成员变量是一智能指针类型并且Close方法正好调用的是这个智能指针的Release方法...... 所以...... 不用我多说你也应该明白了吧。然而回过头来一想,CSession的存在不依赖于对应CDataSource的存在吗?对于这个问题,我只能说根据实验结果和源代码分析貌似是这样的。至此,前面的CloseDataSource和CloseAll也应该清楚了。

         MSDN不是万能的,有时会越看越糊涂,甚至是被误导。适当的时候还是需要阅读源代码的,正所谓“源码之下,了无秘密”。而且由于ATL OLE DB是一个模板库,Microsoft无法直接提供处理好的二进制文件,这也为源码阅读提供了方便: )

    展开全文
  • 关键信息基础设施是指面向公众提供网络信息服务或支撑能源、通信、金融、交通、公用事业等重要行业运行的信息系统或工业控制系统。具体看来,党政机关网站、企事业单位网站、新闻网站等网站类平台,即时通信、网上...
  • 根据最新研究预测,2025年全球的数据量将是现在的10倍,全球领先的存储解决方案提供商希捷科技公司(NASDAQ:STX)建议全球企业的领导更加注重未来几年推动数据增长的宏观趋势,同时评估业务流程,从产生、存储、...
  • 近日,全球网络安全领域的领导赛门铁克公司宣布推出一款全新的高级信息保护工具 Symantec Information Centric Security(ICS)解决方案,为企业提供关键业务数据可视性和管理控制能力,无论数据存储在本地、云中...
  • 这种动态表明信息提供者必须向用户提供新的选择和信息,因为提供者必须学习并适应用户对他们想要的信息类型以及他们希望如何与信息交互的兴趣不断变化。 换句话说,对新闻到达用户的方式(所谓的“过滤泡沫”关注)...
  • 设计师发布模拟屏幕截图,项目经理将关键信息传达给团队成员,甚至开发人员也对他们编写的代码进行了富有成效的讨论。 通过将这些评论作为贡献包括在内,可以更清晰地了解谁在项目中活跃。 解决方案(简化说明): ...
  • 可是由于关键信息 都是以半结构化或自由文本形式存在于大量的HTML网页中,很难直接加以利用。投石科技主要定位于提供网络信息采集 与垂直搜索 引擎技术提供商。在对网络数据的挖掘服务上。投石科技已
  • 可持续发展与可溯源对于海鲜业十分关键,而品牌声誉和客户满意度则是影响企业未来在全球的增长性的重要因素。 奥斯陆2020年2月27日 海鲜业是全球食品行业中增长最快的业务之一。今天的消费的意识越来越强,监管...
  • 无论您是晨跑中寻找新事物的跑步,还是不知名城市中的旅行者,无论身在何处,Going Places都能为您提供一条绝妙的路线! 进一步阅读 有关完整的演示视频和有关“地方”的更多信息,请访问此。 致谢 由和在。
  • 数字平台是一种启用了技术的交易工具,可促进利益相关之间的联系。... 大数据可实时为共享信息提供动力,并减少不对称性和风险,从而重新设计信息系统。 公司治理和管理方面的影响是一个关键的但尚未充分探讨的问题。
  • 这些结果凸显了新兴市场国家需要为购买创造规模经济和范围经济的网络效应,专注于核心竞争力,并通过高转换成本来锁定购买。 现有的EM应当将其策略重点放在开发可导致EM生存的因素上,并消除导致失败的因素。
  • 7月27日,行业云安全能力联盟(PCSA)公布2020年上半年安全...行业云安全能力联盟(PCSA)隶属中国信息协会信息安全专业委员会,致力于云安全关键技术及标准研究,为各行业云建设提供安全咨询和解决方案,配合重..
  • 分别论述了每一层的关键技术,该架构将对象、用户、网络提供者、应用开发者、服务提供者等统一起来,构成物联网技术体系结构,为制订各种接口、协议和规范提供依据,同时也为物联网组网提供参考模型。
  • 生产/消费模型

    2017-08-17 10:34:45
    多线程并发应用程序有一个经典的模型,...消费处理完信息后,通知生产可以继续提供消息。  要实现这个模型,关键在于消费和生产这两个线程进行同步。也就是说:只有缓冲区中有消息时,消费才能够提取消息
  • 2018 Systems and software engineering — Requirements for managers of information for users of systems,software, and services(系统和软件工程--对系统、软件和服务用户的信息管理的要求)。 本标准支持...
  • C语言之生产与消费模型

    万次阅读 2017-08-17 15:01:55
    消费处理完信息后,通知生产可以继续提供消息。 要实现这个模型,关键在于消费和生产这两个线程进行同步。也就是说:只有缓冲区中有消息时,消费才能够提取消息;只有消息已被处理,
  • 提供了一些功能来绘制这些模型的部分并提取关键参数。 用法示例: library( rater ) fit <- rater( anesthesia , " dawid_skene " ) # Sampling output suppressed. 获取“ pi”参数的后均值。 point_...
  • 在这种情况下,设计必须解释和推断可用信息,以确定在非指定条件下的性能。 此功能要求设计人员对LDO规格和功能有很好的理解。除了这里提供信息之外,我还建议阅读德州仪器公司Michael Day的“理解低压降...
  • 云计算以一种新兴的共享基础架构的方法,提供“资源池”化的由网络、信息和存储等组成的服务、应用、信息和基础设施等的使用。云计算的按需自服务、宽带接入、虚拟化资源池、快速弹性架构、可测量的服务和多租户等...
  • 该研究利用了两个数据集:住户调查和关键信息提供者。 四个农业生态区共有326位家庭受访者; 并从公共和私营部门抽取了24名关键线人。 卡方检验用于检验适应能力灵活性和资源访问属性的独立性。 可以确定的是,适应...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,439
精华内容 575
关键字:

关键信息提供者