在很多時候我們需要對客戶端訪問的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...