原創 在資料庫中進行IP操作的解決方案

2021-03-31 20:07:56 字數 1856 閱讀 9812

[原創]在資料庫中進行ip操作的解決方案

適用於顯示輸出

ip,按ip範圍的查詢。

一條sql語句把資料庫中以整型儲存的ip格式與字元形式互換

ip,是以四個位元組進行儲存,為位最大ff.ff.ff.ff,點分十進位制最大為255.255.255.255。我們可以理解為這是乙個整型並儲存在資料庫中,這樣可以減少點分十進位制字元形式的儲存的冗於,還有利於進行乙個區間進行查詢,資料庫這樣設計是個好習慣。

整型顯示為點分十進位制:

我這裡以php與mysql為例,其思想是:通過觀查ip,發現四位每位都是256進製,這樣我們這可以通過模(mod)運算鈄各位取出並加上「.」顯示成點分十進位制。

我們可以寫這樣乙個函式

function sql_long_to_ip($colum1)

其中$colum1就是那個整型的ip儲存字段

我帶看觀來分析一下這個函式:

這個函式返回乙個字串,這個字串就是將整型ip轉為點分十進位制字串顯示的串。輸入的引數就是整型ip的列名。使用方法如:$strsql = 『select 『. sql_long_to_ip(『lip』).』from ip_test;』。再將$strsq執行,顯示的就為點分十進的格式了。

點分十進位制轉為

ip:因為資料庫中是以整型來儲存的,所以在查詢時需要將使用者輸入的點分十進位制轉為整型。上面已經說過,每位是256進製,所以把每段進行移位或乘上2的256次方就是了.不過web進行這樣的運算壓力較大,所以可以用類似split函式將每位拆分,再轉換為16進製制把每位進接以0xffffffff的形式以字元形式加到sql語句中就是了。

這裡有個列子,但沒有用到split函式,因為那時我沒想到用這個函式:p。

// 將ip轉換為數值 , 格式:0.0.0.0

function ip_to_long($ip)

else

$start = 0;

$len = strpos($ip, '.') - $start;

$ip1 = trim(substr($ip, $start, $len))+0;

$start += $len +1;

$len = strpos($ip, '.',$start) - $start;

$ip2 = trim(substr($ip, $start, $len))+0;

$start += $len +1;

$len = strpos($ip, '.',$start) - $start;

$ip3 = trim(substr($ip, $start, $len))+0;

$start += $len +1;

$len = strlen($ip) - $start;

$ip4 = trim(substr($ip, $start, $len))+0;

$ip1 = base_convert( $ip1, 10, 16);

$ip2 = base_convert( $ip2, 10, 16);

$ip3 = base_convert( $ip3, 10, 16);

$ip4 = base_convert( $ip4, 10, 16);

( strlen( $ip1)<2) ? ( $ip1 = "0".$ip1) : ( $ip1);

( strlen( $ip2)<2) ? ( $ip2 = "0".$ip2) : ( $ip2);

( strlen( $ip3)<2) ? ( $ip3 = "0".$ip3) : ( $ip3);

( strlen( $ip4)<2) ? ( $ip4 = "0".$ip4) : ( $ip4);

return '0x'.$ip1 . $ip2 . $ip3 . $ip4;

}就此,已經可以對整型的ip欄位的進行查詢和顯示。

如何在資料庫中進行RBAC許可權應用

上週我們發了一篇關於 刪庫跑路 引發了大家對於資料安全的思考,而許可權管理又跟資料安全密不可分。許可權管理作為資料系統的重要組成部分,通過控制賬號的可支配能力,防止因使用者操作不當導致的資料洩露 資料篡改等問題,同時,對敏感資料按檢視角色進行隔離,避免不相關的人看到不應該了解的資料,達到風險管控的效...

金倉資料庫中進行審計實驗

開啟資料庫審計開關。以具有審計許可權的使用者登入資料庫,設定審計許可權,然後以普通使用者登入資料庫,執行相應的資料操縱sql語句,驗證相應審計設定是否生效,最後再以具有審計許可權的使用者登入資料庫,檢視是否存在相應的審計資訊。1 審計開關 1 顯示當前審計開關狀態。語句為 show audit tr...

在資料庫中建立定時任務 原創

在 sql server 2000 中建立定時任務,處理時間超過一月的記錄 做專案時客戶要求,為了防止大量無用資料的存在,資料庫的指定表中的資料記錄需要定時清除大約一月之前的資料。在網上查了查資料,把問題解決了,感覺不錯。總結如下 這裡不能用觸發器,要用作業。開啟企業管理器,進入你伺服器名下的 管理...