1. 程式人生 > >ORACLE如何限制ip段登入和登入之後記錄資訊

ORACLE如何限制ip段登入和登入之後記錄資訊

CREATE USER DBCONFIG IDENTIFIED BY "DBCONFIG"


GRANT UNLIMITED TABLESPACE TO DBCONFIG
/

ALTER USER DBCONFIG ACCOUNT LOCK
/

CREATE TABLE DBCONFIG.LOGON_IPCONFIG
(
    USERNAME                       VARCHAR2(30),
    STARTIP                        VARCHAR2(15) NOT NULL,
    ENDIP                          VARCHAR2(15),
    EFF_DATE                       DATE DEFAULT SYSDATE,
    EXP_DATE                       DATE DEFAULT SYSDATE+3,
    LOGON_ENABLED                  CHAR(1) DEFAULT 'Y',
    LOG_ENABLED                    CHAR(1) DEFAULT 'N',
    STATE                          CHAR(1) DEFAULT 'A',
    STATE_DATE                     DATE,
    REMARK                         VARCHAR2(20)
)
/

CREATE OR REPLACE TRIGGER DBCONFIG.TR_UI_LOGON_IPCONFIG
BEFORE INSERT OR UPDATE ON DBCONFIG.LOGON_IPCONFIG
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE
ip1 varchar(15);
ip2 varchar(15);
i integer;
l integer;

BEGIN

  ip1 := :new.startip;
  i := -1;
  --測試是否數字
  ip2 := to_char(to_number(replace(ip1,'.','')));

  i := instr(ip1, '.');
  if i=0 or i=l then raise_application_error(-20061,'INVALID STARTIP VALUE.'); end if;
  --STARTIP的第1節
  ip2 := lpad(substr(ip1,1,i),4,'0');

  l := length(ip1);
  ip1 := substr(ip1,i+1,l-i);
  i := instr(ip1, '.');
  if i=0 or i=l then raise_application_error(-20061,'INVALID STARTIP VALUE.'); end if;
  --STARTIP的第2節
  ip2 := ip2||lpad(substr(ip1,1,i),4,'0');

  l := length(ip1);
  ip1 := substr(ip1,i+1,l-i);
  i := instr(ip1, '.');
  if i=0 or i=l then raise_application_error(-20061,'INVALID STARTIP VALUE.'); end if;
  --STARTIP的第3節
  ip2 := ip2||lpad(substr(ip1,1,i),4,'0');

  ip1 := substr(ip1,i+1,l-i);
  --STARTIP的第4節
  ip2 := ip2||lpad(ip1,3,'0');
  :new.startip := ip2;


  ip1 := :new.endip;
  i := -2;
  --測試是否數字
  ip2 := to_char(to_number(replace(ip1,'.','')));

  i := instr(ip1, '.');
  if i=0 or i=l then raise_application_error(-20062,'INVALID ENDIP VALUE.'); end if;
  --ENDIP的第1節
  ip2 := lpad(substr(ip1,1,i),4,'0');

  l := length(ip1);
  ip1 := substr(ip1,i+1,l-i);
  i := instr(ip1, '.');
  if i=0 or i=l then raise_application_error(-20062,'INVALID ENDIP VALUE.'); end if;
  --ENDIP的第2節
  ip2 := ip2||lpad(substr(ip1,1,i),4,'0');

  l := length(ip1);
  ip1 := substr(ip1,i+1,l-i);
  i := instr(ip1, '.');
  if i=0 or i=l then raise_application_error(-20062,'INVALID ENDIP VALUE.'); end if;
  --ENDIP的第3節
  ip2 := ip2||lpad(substr(ip1,1,i),4,'0');

  ip1 := substr(ip1,i+1,l-i);
  --ENDIP的第4節
  ip2 := ip2||lpad(ip1,3,'0');
  :new.endip := ip2;

  :new.username := upper(:new.username);
  :new.logon_enabled := upper(:new.logon_enabled);
  :new.log_enabled := upper(:new.log_enabled);
  :new.state := upper(:new.state);

exception when others then
  if i=-1 then
     raise_application_error(-20061,'INVALID STARTIP VALUE.');
  elsif i=-2 then
     raise_application_error(-20062,'INVALID ENDIP VALUE.');
  end if;

END;


INSERT INTO DBCONFIG.LOGON_IPCONFIG
SELECT USERNAME,'0.0.0.0','255.255.255.255',TRUNC(SYSDATE),DATE '3000-1-1','Y','Y','A',TRUNC(SYSDATE),'DEFAULT' FROM ALL_USERS


select * from DBCONFIG.LOGON_IPCONFIG

CREATE UNIQUE INDEX DBCONFIG.IDX_LOGON_IPCONFIG
ON DBCONFIG.LOGON_IPCONFIG(USERNAME, LOGON_ENABLED, STATE, STATE_DATE)
/

CREATE SEQUENCE DBCONFIG.LOGON_SEQ
INCREMENT BY 1
START WITH 1
MAXVALUE 99999999
MINVALUE 1
CYCLE
CACHE 20
NOORDER
/

CREATE TABLE DBCONFIG.LOGON_HISTORY
(
    ID                             NUMBER(8),
    SID                            NUMBER,
    SERIAL#                        NUMBER,
    AUDSID                         NUMBER,
    USERNAME                       VARCHAR2(30),
    SERVER                         VARCHAR2(9),
    SCHEMANAME                     VARCHAR2(30),
    OSUSER                         VARCHAR2(30),
    MACHINE                        VARCHAR2(64),
    TERMINAL                       VARCHAR2(16),
    PROGRAM                        VARCHAR2(64),
    LOGON_IP                       VARCHAR2(16),
    LOGON_TIME                     DATE,
    CONSTRAINT PK_LOGON_HISTORY PRIMARY KEY (ID)
)
/

CREATE OR REPLACE TRIGGER SYS.TRIGGER_LOGON
AFTER LOGON ON DATABASE
declare
  usr varchar2(10);
  ip  varchar2(16);
  ip1 varchar2(15);
  ip2 varchar2(15);
  i   number;
  log char;
begin
  usr := sys_context('USERENV','SESSION_USER');
  ip := sys_context('USERENV','IP_ADDRESS');

  i := instr(ip,'.');
  ip1 := lpad(substr(ip,1,i),4,'0');
  ip2 := substr(ip,i+1,length(ip)-i);
  i := instr(ip2,'.');
  ip1 := ip1||lpad(substr(ip2,1,i),4,'0');
  ip2 := substr(ip2,i+1,length(ip2)-i);
  i := instr(ip2,'.');
  ip1 := ip1||lpad(substr(ip2,1,i),4,'0');
  ip2 := substr(ip2,i+1,length(ip2)-i);
  ip1 := ip1||lpad(ip2,3,'0');
 
  select max( LOG_ENABLED ) into log
  from DBCONFIG.LOGON_IPCONFIG
  where STATE = 'A'
  and USERNAME = usr
  and LOGON_ENABLED = 'Y'
  and ip1 between STARTIP and nvl(ENDIP,STARTIP)
  and sysdate between EFF_DATE and EXP_DATE
  and not exists
  (
    select 1 from DBCONFIG.LOGON_IPCONFIG
    where STATE = 'A'
    and USERNAME = usr
    and LOGON_ENABLED = 'N'
    and ip1 between STARTIP and nvl(ENDIP,STARTIP)
    and sysdate between EFF_DATE and EXP_DATE
  );
  if log is null then
     raise_application_error(-20069,'YOUR IP WAS REFUSED.');
  end if;
 
  if log = 'Y' then
     insert into DBCONFIG.LOGON_HISTORY
     select DBCONFIG.LOGON_SEQ.NEXTVAL,
         SID,SERIAL#,AUDSID,USERNAME,SERVER,
         SCHEMANAME,OSUSER,MACHINE,TERMINAL,PROGRAM,
         ip,LOGON_TIME
     from v$session
     where audsid = userenv('sessionid')
     and LOGON_TIME = sysdate;
  end if;
end;
/


CREATE OR REPLACE TRIGGER logoff_audit

Before LOGOFF ON DATABASE

BEGIN

NULL;

END;


select * from  DBCONFIG.LOGON_HISTORY

select * from dbconfig.logon_ipconfig for update

drop table dbconfig.logon_ipconfig

相關推薦

ORACLE如何限制ip登入登入之後記錄資訊

CREATE USER DBCONFIG IDENTIFIED BY "DBCONFIG" GRANT UNLIMITED TABLESPACE TO DBCONFIG / ALTER USER DBCONFIG ACCOUNT LOCK / CREATE TABLE D

nginx 限制ip併發數限制速度

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

微信小程式中使用者登入登入態維護

提供使用者登入以及維護使用者的登入狀態,是一個擁有使用者系統的軟體應用普遍需要做的事情。像微信這樣的一個社交平臺,如果做一個小程式應用,我們可能很少會去做一個完全脫離和捨棄連線使用者資訊的純工具軟體。讓使用者登入,標識使用者和獲取使用者資訊,以使用者為核心提供服務,是大部分小程式都會做的事情。我們今天就來了解

Oracle限制ip連線設定

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) STATUS of the LISTENER ———————— Alias LISTENER Version TNSLSNR for Linux: Version 10.2.0.1.0 – Pro

利用apache限制IP併發數下載流量控制

一,為什麼要對IP併發數,下載流量進行控制 說正題之前,先給大家講個故事,那是在2007年,我進了一家公司,當時我們正在給達芙妮做電子商務網,www.idaphne.com。從三月份開始做的吧,九月份正式上線,上線後沒多長時間,有一天伺服器老是死,後來查了一下,一個IP

設定OracleIP遠端連線客戶端訪問

要想將oracle設定為多使用者可遠端訪問,須進行以下設定: 1、路徑:D:\app\Administrator\product\11.1.0\db_1\NETWORK\ADMIN\listener.ora,將其內容設定為如下:    LISTENER =   (DESCR

12、微信授權登入拉取使用者資訊

注:在微信公眾號請求使用者網頁授權之前,開發者需要先到公眾平臺官網中的“開發 - 介面許可權 - 網頁服務 - 網頁帳號 - 網頁授權獲取使用者基本資訊”的配置選項中,修改授權回撥域名。請注意,這裡填寫的是域名(是一個字串),而不是URL,因此請勿加 htt

Apache限制IP併發數流量控制

轉自:http://www.cszhi.com/20120512/apache-mod_bandwidth-mod_limitipconn.html 使用mod_limitipconn模組限制IP併發連線數 安裝: wget http://dominia.org/dja

java鬼混筆記:shiro 11、唯一登入登入退出Bug

完整的專案下載路徑(專案下載網上的hui框架來著,什麼鬼檔案都在裡面,暫清除,所以很多): http://download.csdn.net/download/u013845177/9992748 相關的lib包路徑: http://download.csdn.net/do

ORACLE限制IP連線

在 D:\oracle\product\10.2.0\db_1\network\ADMIN\oraname.ora檔案 最後加入如下內容,然後重啟監聽,重啟後稍等幾分鐘 #是否開啟登陸節點檢查(客戶端IP檢查<yes/no>) tcp.validnode_ch

關於限制同一個IP訪問頻率限制使用者登入時候輸錯密碼次數限制(超過即限制

一:關於限制同一IP的基本的思路 spring action請求頻率限制(不能限制靜態資源的請求) 限制同一ip在一定時間內, 對server請求的次數. 由ip第一次請求來做為時間點, 將時間,請求次數快取到redis.1. 第一次請求(redis中無快取記錄), 初始化

mysql 新增使用者並授權訪問指定資料庫,同時限制登入為指定IP

記錄下以備查。 create user 'user'@'192.168.104.%' identified by '******'; create database database; grant a

CentOS 下SSH限制IP使用者登入

CentOS 下設定SSH只允許特定使用者從特定的IP登入,其它未經允許的使用者和IP都不能登入。 演示環境 192.168.1.81:CentOS 6 192.168.0.222:Win 10 192.168.1.135:Win 8.1 未做任何設定時192.16

執行登入觸發器(sql server 2016限制IP訪問)後,登入sql server報錯: 由於執行觸發器,登入失敗已將資料庫上下文更改為master。解決方法:用cmd執行刪除登入觸發器

背景: 在cmd中執行osql命令: osql -S 【資料庫伺服器】 -E  -i  mysql.sql 其中mysql.sql內容如下: CREATE LOGIN test WITH PASSWORD = '輸入密碼' GO

Linux 禁止Root遠端登入限制IP登入

1.禁止root遠端登入 vi /etc/ssh/sshd_config PermitRootLogin yes改為PermitRootLogin no 重啟sshd服務 service sshd restart 2.Centos7 ssh和vsftp限制IP

oracle登入使用者的切換

1.登入OracleSqlplus 使用者名稱/密碼Sqlplus 使用者名稱/密碼@全域性資料區的唯一表示(SID)2.修改密碼(1) 輸入sqlplus(2)  在輸入使用者名稱:sqlplus/as sysdba(3)  在輸入密碼:直接回車(4)  使用SQL語句修改

Android APP首次登入之後自動登入流程

App登陸儲存資料流程App因為要實現自動登陸功能,所以必然要儲存一些憑據,所以比較複雜。 App登陸要實現的功能: 密碼不會明文儲存,並且不能反編繹解密; 在伺服器端可以控制App端的登陸有效性,防止

linux禁ping與限制ip登入

  以root進入linux系統,然後編輯檔案icmp_echo_ignore_all vi /proc/sys/net/ipv4/icmp_echo_ignore_all 將其值改為1後為禁止PING 將其值改為0後為解除禁止PING 我的LNUX也不是很好希望大家以後多

資料庫 Oracle限制SYSDBA許可權類使用者遠端登入

參考步驟: (1).oracle使用者登入系統。 (2).sqlplus / as sysdba登陸資料庫。 (3).執行alter system set REMOTE_LOGIN_PASSWORDFILE=NONE SCOPE=SPFILE; (4).shutdown im

登入退出Oracle資料庫的命令

登入命令:/u/ainet-> psql -U scncraft A=>select * from  *** A=>insert into  *** values() 一些基本操作的語法還是差不多的額麼。 退出命令 相信很多小白都不太知道這兩條命令,反正我