㈠ oracle11g的透明加密對資料庫的性能影響多大
1、性能:在我們決定加密數據時,需要考慮的一個最大問題是,其性能影響如何?而對這個問題的回答只能是「視方案而定」。在我們的經驗中,透明加密執行起來很好,它對資料庫的性能影響一般從5%到8%不等。本地資料庫對象加密對性能的影響可達到15%到20%。所以,企業必須根據自己的配置狀況和性能要求考慮好此問題。
2、操作:如果你要加密介質,最好能夠保證在需要時能夠及時從此介質恢復。這就要求你經常測試磁帶。同樣道理,如果你使用密鑰輪換來滿足監管要求,就應當試這個過程的操作過程和方式,並測試你的廠商如何處理生產環境中的新密鑰和老密鑰。你最好按照計劃來進行,而不要在懷疑某個加密密鑰遭受破壞後才去測試。
3、復雜程度:加密系統都很復雜。你必須考慮加密引擎在哪裡,它如何加密數據及加密哪些數據,哪些數據不加密,怎樣提供密鑰等等。作為一位資料庫管理員,你需要認識到這種復雜程度並保證自己完全理解加密系統如何工作,特別是在你要證實加密能夠正確地滿足合規要求時,這尤其重要。加密的復雜性不僅體現在部署方面,還體現在實施階段。有人認為加密只不過是一個簡單的數學公式問題,甚至還有人說,「咱能自己搞定!」。此言差矣。許多很有才的安全專家都在建設自己的加密系統時栽了跟頭。不要去建立自己的安全加密系統。否則,輕則造成不安全,重則會丟失所有數據。所以,你應當採用一種經過檢查的可信的加密產品。
4、密鑰管理:你需要一個密鑰管理系統來保護密鑰。管理員不能將密鑰存儲到資料庫中,也不能將密鑰存放到磁碟上。企業應當將密鑰管理規劃到預算和操作計劃中。
㈡ 資料庫怎麼加密
安華金和資料庫加密的技術方案主要有三種種:包括前置代理、應用加密和後置代理。前置代理的技術思路就是在資料庫之前增加一道安全代理服務,對資料庫訪問的用戶都必須經過該安全代理服務,在此服務中實現如數據加解密、存取控制等安全策略;然後安全代理服務通過資料庫的訪問介面實現數據在O中的最終存儲。
安華金和資料庫加密 應用層加密方案的主要技術原理是:
(1) 應用系統通過加密API(JDBC,ODBC,C API等)對敏感數據進行加密,將加密數據存儲到Oracle資料庫中;
(2)
在進行數據檢索時,將密文數據取回到客戶端,再進行解密;
(3) 應用系統將自行管理密鑰。
後置代理的基本技術路線是使用「視圖」+「觸發器」+「擴展索引」+「外部調用」的方式實現數據加密,同時保證應用完全透明。
該方案的核心思想是充分利用資料庫自身應用定製擴展能力,分別使用其觸發器擴展能力、索引擴展能力、自定義函數擴展能力以及視圖等技術來滿足數據存儲加密,加密後數據檢索,對應用無縫透明等最主要需求。後置代理方案的核心目標包括:A、實現在資料庫中敏感數據的按列加密;B、對應用提供透明的加密數據訪問;C、為加密數據提供高效的索引訪問;D、實現獨立於資料庫的許可權控制;E、調用國產的加密演算法。
目前在國內安華金和的資料庫加密產品是最成熟的,已經廣泛應用於運營商、中央部委等大型系統上。
㈢ 資料庫加密系統是什麼有什麼功能
透明加密技術是資料庫加密系統的核心技術,用於防止明文存儲引起的數據泄密、外部攻擊、內部竊取數據、非法直接訪問資料庫等等,從根本上解決資料庫敏感數據泄漏問題,滿足合法合規要求。
資料庫透明加密系統主要有四個功能:
1. 對敏感數據進行加密,避免與敏感數據的直接接觸。這項功能主要用於防止三種情況的發生,首先,通過對敏感數據進行透明加密阻斷入侵者訪問敏感數據,構成資料庫的最後一道防線。其次,阻斷運維人員任意訪問敏感數據,資料庫透明加密系統可以保護運維人員,避免犯錯。最後,透明加密系統可以實現,即使在資料庫中的物理文件或者備份文件失竊的情況下,依然保證敏感數據的安全性。
2. 資料庫透明加密系統,無需改變任何應用。首先,在對數據進行透明加密時,無需知道密鑰,無需改變任何代碼,即可透明訪問加密的敏感數據。其次,對敏感數據進行加解密的過程透明簡易,可以保證業務程序的連續性,以及保證業務程序不被損傷。
3. 資料庫透明加密系統提供多維度的訪問控制管理,且系統性能消耗非常低。通常資料庫實施透明加密後,整體性能下降不超過10%。
4. 最重要的是,資料庫透明加密系統滿足合規要求,滿足網路安全法、信息安全等級保護、個人信息安全規范等對於敏感數據加密明確的要求。
另外資料庫透明加密系統可以實現物理旁路部署模式和反向代理兩種部署模式。採用旁路部署模式,即在資料庫伺服器安裝資料庫透明加密安全代理軟體,不需要調整任何網路架構。資料庫透明加密後批量增刪改性能影響較小,整體滿足合規要求,管理便捷。反向代理部署模式,是物理層根據表、列等數據分類執行數據存儲加密,防止存儲層面數據丟失引起泄露,邏輯層通過加密網關實現運維管理端的密文訪問控制,整體實現業務數據正常訪問,運維授權訪問,同時提供直連控制訪問,部署更安全。
㈣ 怎麼測試給資料庫加密的android模塊
1.概述
SharedPreferences是Android提供用來存儲一些簡單配置信息的機制,其以KEY-VALUE對的方式進行存儲,以便我們可以方便進行讀取和存儲。主要可以用來存儲應用程序的歡迎語、常量參數或登錄賬號密碼等。
2.實例
(1)創建項目SharedPreferencesDemo項目
(2)編輯主界面的布局文件main.xml如下:
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="SharedPreferences,是Android提供用來存儲一些簡單的配置信息的一種機制。"
/>
(3)創建AES加解密工具類AESEncryptor.java
其中主要提供加密encrypt、解密decrypt兩個方法。(AES加解密演算法具體大家可以到網上搜索相關資料)
以下為該類文件的源碼:
package ni.demo.sharedpreferences;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
/**
* AES加密器
* @author Eric_Ni
*
*/
public class AESEncryptor {
/**
* AES加密
*/
public static String encrypt(String seed, String cleartext) throws
Exception {
byte[] rawKey = getRawKey(seed.getBytes());
byte[] result = encrypt(rawKey, cleartext.getBytes());
return toHex(result);
}
/**
* AES解密
*/
public static String decrypt(String seed, String encrypted) throws
Exception {
byte[] rawKey = getRawKey(seed.getBytes());
byte[] enc = toByte(encrypted);
byte[] result = decrypt(rawKey, enc);
return new String(result);
}
private static byte[] getRawKey(byte[] seed) throws Exception {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(seed);
kgen.init(128, sr); // 192 and 256 bits may not be available
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
return raw;
}
private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception
{
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(clear);
return encrypted;
}
private static byte[] decrypt(byte[] raw, byte[] encrypted) throws
Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] decrypted = cipher.doFinal(encrypted);
return decrypted;
}
public static String toHex(String txt) {
return toHex(txt.getBytes());
}
public static String fromHex(String hex) {
return new String(toByte(hex));
}
public static byte[] toByte(String hexString) {
int len = hexString.length()/2;
byte[] result = new byte[len];
for (int i = 0; i < len; i++)
result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2),
16).byteValue();
return result;
}
public static String toHex(byte[] buf) {
if (buf == null)
return "";
StringBuffer result = new StringBuffer(2*buf.length);
for (int i = 0; i < buf.length; i++) {
appendHex(result, buf[i]);
}
return result.toString();
}
private final static String HEX = "0123456789ABCDEF";
private static void appendHex(StringBuffer sb, byte b) {
sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f));
}
}
(4)編輯SharedPreferencesDemo.java
源碼如下:
package ni.demo.sharedpreferences;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class SharedPreferencesDemo extends Activity {
public static final String MY_PREFERENCES = "MY_PREFERENCES";
//Preferences文件的名稱
public static final String MY_ACCOUNT = "MY_ACCOUNT"; //
public static final String MY_PASSWORD = "MY_PASSWORD";
private EditText edtAccount;
private EditText edtPassword;
private Button btnClear;
private Button btnExit;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
edtAccount = (EditText)findViewById(R.id.edtAccount);
edtPassword = (EditText)findViewById(R.id.edtPassword);
//獲取名字為「MY_PREFERENCES」的參數文件對象,並獲得MYACCOUNT、MY_PASSWORD元素的值。
SharedPreferences sp = this.getSharedPreferences(MY_PREFERENCES, 0);
String account = sp.getString(MY_ACCOUNT, "");
String password = sp.getString(MY_PASSWORD, "");
//對密碼進行AES解密
try{
password = AESEncryptor.decrypt("41227677", password);
}catch(Exception ex){
Toast.makeText(this, "獲取密碼時產生解密錯誤!", Toast.LENGTH_SHORT);
password = "";
}
//將賬號和密碼顯示在EditText控制項上。
edtAccount.setText(account);
edtPassword.setText(password);
//獲取"清空"按鈕的對象,並為其綁定監聽器,如被點擊則清空賬號和密碼控制項的值。
btnClear = (Button)findViewById(R.id.btnClear);
btnClear.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
edtAccount.setText("");
edtPassword.setText("");
}
});
//獲取「退出」按鈕的對象,並為其綁定監聽,如被點擊則退出程序。
btnExit = (Button)findViewById(R.id.btnExit);
btnExit.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
SharedPreferencesDemo.this.finish();
}
});
}
@Override
protected void onStop() {
super.onStop();
//獲得賬號、密碼控制項的值,並使用AES加密演算法給密碼加密。
String account = edtAccount.getText().toString();
String password = edtPassword.getText().toString();
try{
password = AESEncryptor.encrypt("41227677", password);
}catch(Exception ex){
Toast.makeText(this, "給密碼加密時產生錯誤!", Toast.LENGTH_SHORT);
password = "";
}
//獲取名字為「MY_PREFERENCES」的參數文件對象。
SharedPreferences sp = this.getSharedPreferences(MY_PREFERENCES, 0);
//使用Editor介面修改SharedPreferences中的值並提交。
Editor editor = sp.edit();
editor.putString(MY_ACCOUNT, account);
editor.putString(MY_PASSWORD,password);
editor.commit();
}
}
(5)效果測試
首先,在AVD我們可以看到如下界面,在兩個控制項上我們分別輸入abc和123456。
接著,我們打開DDMS的File
Explore可以看到在data->data->ni->shared_prefs下面產生了一個名字叫做MY_PREFERENCES.xml的文件,該文件就是用來存儲我們剛才設置的賬號和密碼。
將其導出,並打開,可以看到如下內容:
abc這說明我們可以成功將賬號和加密後的密碼保存下來了。
最後,我們點擊「退出」按鈕將應用程序結束掉,再重新打開。我們又再次看到我們退出前的界面,賬號密碼已經被重新讀取出來。
文章的最後,我們進入Android API手冊,看看關於SharedPreferences的介紹:
Interface for accessing and modifying preference data returned by
getSharedPreferences(String, int). For any particular set of preferences, there
is a single instance of this class that all clients share. Modifications to the
preferences must go through an SharedPreferences.Editor object to ensure the
preference values remain in a consistent state and control when they are
committed to storage.
SharedPreferences是一個用來訪問和修改選項數據的介面,通過getSharedPreferences(Stirng,int)來獲得該介面。對於任何特別的選項集,只能有一個實例供所有客戶端共享。針對選項參數的修改必須通過一個SharedPreferences.Editor對象來進行,以保證所有的選項值保持在一個始終如一的狀態,並且通過該對象提交存儲。
可見,SharedPreferences操作選項文件時是線程安全的。
㈤ oracle資料庫的存儲過程如何加密 具體的實現方法是什麼
可以例用Oracle 自帶的Wrap工具實現,此工具在$ORACLE_HOME/BIN目錄下,具體如下
1、設置字元集環境變數
set NLS_LANG=CHINESE_CHINA.ZHS16GBK
2、創建一個存儲過程文件
在E:\下創建test.sql文件,內容如下:
create or replace procere test1(i in number) as
begin
dbms_output.put_line(' 輸入參數是'||to_char(i));
end;
3、加密
c:\> cd %ORACLE_HOME%\BIN
c:\>wrap iname=e:\test1.sql
PL/SQL Wrapper: Release 8.1.7.0.0 - Proction on Tue Nov 27 22:26:48 2001
Copyright (c) Oracle Corporation 1993, 2000.All Rights Reserved.
Processing test1.sql to test1.plb
4、運行test1.plb
sqlplus /nolog
SQL>conn TEST/TEST@db01
SQL> @e:\a.plb
過程已創建。
5、運行存儲過程
SQL> set serveroutput on
SQL> execute test1(1);
輸入參數是1
PL/SQL 過程已成功完成。
6、查看存儲過程的代碼
SQL> select name,text from all_source where type='PROCEDURE' and name='TEST1';
結果:看不到其原碼
㈥ 透明數據加密的技術原理怎樣實現
後置代理加密過於依賴資料庫自身所具備的擴展機制,且數據在資料庫共享內存中也是密文,導致在部分場景下的資料庫性能表現不佳。因此,基於後置代理加密技術又發展出了透明數據加密技術,目的是在保持後置代理加密優勢的同時,降低對資料庫自身擴展機制的依賴性,從而讓資料庫系統性能保持在相對合理的水平之上。。。。透明數據加密,全稱為Transparent Data Encryption(TDE),是一種對應用系統完全透明的資料庫端存儲加密技術,通常由資料庫廠商在資料庫引擎中實現——在資料庫引擎的存儲管理層增加一個數據處理過程,當數據由資料庫共享內存寫入到數據文件時對其進行加密;當數據由數據文件讀取到資料庫共享內存時對其進行解密。也就是說,數據在資料庫共享內存中是以明文形態存在的,而在數據文件中則以密文形態存在。同時,由於該技術的透明性,任何合法且有許可權的資料庫用戶都可以訪問和處理加密表中的數據。
㈦ 資料庫透明加密是什麼
資料庫透明加密系統是一款基於透明加密技術的安全加密系統,該產品能夠實現對資料庫數據的加密存儲、訪問控制增強、應用訪問安全、許可權隔離以及三權分立等功能。資料庫加密系統基於主動防禦機制,有效防止明文存儲引起的數據泄密、突破邊界防護的外部黑客攻擊、來自於內部高許可權用戶的數據竊取、防止繞開合法應用系統直接訪問資料庫,從根本上解決資料庫敏感數據泄漏問題,真正實現了數據高度安全、應用完全透明、密文高效訪問等技術特點。
目前美創資料庫加密系統支持Windows、AIX、Linux、HP等多個平台,提供軟硬體一體化加密設備和純軟體加密的不同選擇,滿足用戶的多種部署需求。該加密系統適用於大企業、政府、軍隊、軍工、電信、電力、醫療、金融、互聯網等各個領域,同時針對國家等級保護、分級保護、軍隊保密規定均具有很強的政策合規性。
㈧ 資料庫中怎樣創建加密的存儲過程
可以例用Oracle 自帶的Wrap工具實現,此工具在$ORACLE_HOME/BIN目錄下,具體如下
1、設置字元集環境變數
set NLS_LANG=CHINESE_CHINA.ZHS16GBK
2、創建一個存儲過程文件
在E:\下創建test.sql文件,內容如下:
create or replace procere test1(i in number) as
begin
dbms_output.put_line(' 輸入參數是'||to_char(i));
end;
3、加密
c:\> cd %ORACLE_HOME%\BIN
c:\>wrap iname=e:\test1.sql
PL/SQL Wrapper: Release 8.1.7.0.0 - Proction on Tue Nov 27 22:26:48 2001
Copyright (c) Oracle Corporation 1993, 2000.All Rights Reserved.
Processing test1.sql to test1.plb
4、運行test1.plb
sqlplus /nolog
SQL>conn TEST/TEST@db01
SQL> @e:\a.plb
過程已創建。
5、運行存儲過程
SQL> set serveroutput on
SQL> execute test1(1);
輸入參數是1
PL/SQL 過程已成功完成。
6、查看存儲過程的代碼
SQL> select name,text from all_source where type='PROCEDURE' and name='TEST1';
結果:看不到其原碼
㈨ Sql Server 2008 數據透明加密(TDE)
我們局伺服器上的SQL 資料庫是用 secWall的企業版加密的。伺服器端不管是導出或者備份出來都是加密的。
㈩ 如何測試web的資料庫是否加密
給SQLite資料庫加密解密的方法: 1、創建空的sqlite資料庫。 //資料庫名的後綴你可以直接指定,甚至沒有後綴都可以 //方法一:創建一個空sqlite資料庫,用IO的方式 FileStream fs = File.Create(「c:\\test.db「);