Oracle 實現客戶端IP限制

2021-08-21 03:24:02 字數 1778 閱讀 2602

在很多時候我們需要對客戶端訪問的ip做出限制

如果要在網路上做一些ip位址的限制,一般情況下我們首先想到的是用網路層的防火牆軟體。要找網管來設定。 但是如果網管不在,或者僅僅想在資料庫層來實現ip位址的限制,dba們只要修改server端的乙個網路配置檔案sqlnet.ora檔案就可以了。

oracle9i以上版本,在目錄$oracle_home/network/admin 或者 %oracle_home%/network/admin 下)增加如下內容:

tcp.validnode_checking=yes

tcp.invited_nodes =(ip1,ip2,……) #允許訪問的ip

tcp.excluded_nodes=(ip1,ip2,……) #不允許訪問的ip

修改sqlnet.ora後,重新啟動listener服務,改動就可以生效了

方法二:

為了資料庫安全,有時候需要限制某些資料庫使用者只有特定的ip才能登陸,使用觸發器,獲取登入使用者的ip就可以實現上述功能。

sql語句如下:

create or replace trigger system.check_ip_addresses

after logon on database

begin

if user in ('user1',

'user2') then

if sys_context('userenv',

'ip_address') not in ('192.168.0.101',

'192.168.0.102') then

'can not log in from this ip address (' ||

sys_context('userenv',

'ip_address') || ')');

end if;

end if;

end;

**優化,只允許特定資料庫使用者遠端登入

sql**如下:

create or replace trigger system.check_ip_addresses

after logon on database

begin

declare

l_count number;

begin

select count(1)

into l_count

from cux_local_ip lip

where lip.ip = sys_context('userenv',

'ip_address');

if l_count = 0 then

select count(1)

into l_count

from cux_acess_remoteip_user ru

where ru.user_name = user

and (ru.access_ip = 'all' or sys_context('userenv',

'ip_address') = ru.access_ip);

if l_count = 0 and user !='system' then

'login error,permission denied!');

end if;

end if;

end;

end;

其中,表cux_local_ip,代表本地ip,允許登入所有使用者

cux_acess_remoteip_user,欄位user_name代表哪些可以在對應的ip登入,access_ip為登入ip(all代表所有ip都能登入)

通過客戶端IP限制投票次數

說明 本例通過獲取客戶端ip位址來限制使用者的投票次數,每個ip只可以投票一次。實現 獲取客戶端ip位址需要使用 server 全域性陣列中的 server remote addr 引數。本例將客戶端ip位址存放到資料庫,當使用者提交投票時,判斷該ip是否在資料庫中,從而實現通過客戶端ip限制投票次...

獲取客戶端ip

1.統計訪問者ip位址 2.設定黑名單,黑名單的使用者不可以訪問聊天室。內容提要 這種情況下同樣透露了客戶端是使用了 伺服器 但編造了乙個虛假的隨機ip 220.4.251.159 代替客戶端的真實 ip來欺騙它 獲取客戶端 ip其實不是個簡單的活兒 因為存在 ip欺騙 和 問題 所以獲取客戶端的 ...

oracle rac限制客戶端訪問

rac限制客戶端訪問編輯sqlnet.ora 在grid使用者 oracle home network admin 下,新增以下文字 tcp.validnode checking yes tcp.invited nodes 192.168.80.33,192.168.80.63,192.168.16...