我的oracle筆記七(其他)
2024-08-29 13:49:41
供稿:網友
1.如何限定特定ip訪問數據庫
可以利用登錄觸發器、cmgw或者是在$OREACLE_HOME/network/admin下新增一個PRotocol.ora文件(有些os可能是. protocol.ora),9i可以直接修改sqlnet.ora:
增加如下內容:
tcp.validnode_checking=yes
#答應訪問的ip
tcp.inited_nodes=(ip1,ip2,...)
#不答應訪問的ip
tcp.excluded_nodes=(ip1,ip2,...)
2.如何穿過防火墻連接數據庫
這個問題只會在WIN平臺出現,UNIX平臺會自動解決。
解決方法:
在服務器端的SQLNET.ORA應類似
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DirectorY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
TRACE_LEVEL_CLIENT = 16
注冊表的HOME0加[HKEY_LOCAL_MACHINE]
USE_SHARED_SOCKET=TRUE
3.如何利用hostname方式連接數據庫
host name方式只支持tcp/ip協議的小局域網
修改listener.ora中的如下信息
(SID_DESC =
(GLOBAL_DBNAME = ur_hostname) --你的機器名
(Oracle_HOME = E:/oracle/ora92) --oracle home
(SID_NAME = orcl) --sid name
)
然后在客戶端
的sqlnet.ora中,確保有
NAMES.DIRECTORY_PATH= (HOSTNAME)
你就可以利用數據庫服務器的名稱訪問數據庫了
4.dbms_repcat_admin能帶來什么安全隱患
假如一個用戶能執行dbms_repcat_admin包,將獲得極大的系統權限。
以下情況可能獲得該包的執行權限:
1、在sys下grant execute on dbms_repcat_admin to public[user_name]
2、用戶擁有execute any procedure特權(僅限于9i以下,9i必須顯示授權)
假如用戶通過執行如下語句:
exec sys.dbms_repcat_admin.grant_admin_any_schema('user_name');
該用戶將獲得極大的系統特權
可以從user_sys_privs中獲得具體信息5.在不知道用戶密碼的時候,怎么樣跳轉到另外一個用戶執行操作后并不影響該用戶?
我們通過如下的方法,可以安全使用該用戶,然后再跳轉回來,在某些時候比較有用
需要Alter user權限或DBA權限:
SQL> select passWord from dba_users where username='SCOTT';
PASSWORD
-----------------------------
F894844C34402B67
SQL> alter user scott identified by lion;
User altered.
SQL> connect scott/lion
Connected.
REM Do whatever you like...
SQL> connect system/manager
Connected.
SQL> alter user scott identified by values 'F894844C34402B67';
User altered.
SQL> connect scott/tiger
Connected.
6.如何加固你的數據庫
要注重以下方面
1. 修改sys, system的口令。
2. Lock,修改,刪除默認用戶: dbsnmp,ctxsys等。
3. 把REMOTE_OS_AUTHENT改成False,防止遠程機器直接登陸。
4. 把O7_DICTIONARY_accessIBILITY改成False。
5. 把一些權限從PUBLIC Role取消掉。
6. 檢查數據庫的數據文件的安全性。不要設置成666之類的。檢查其他dba 用戶。
7. 把一些不需要的服務(比如FTP, nfs等關閉掉)
8. 限制數據庫主機上面的用戶數量。
9. 定期檢查Metalink/OTN上面的security Alert。比如:
http://otn.oracle.com/deploy/security/alerts.htm10. 把你的數據庫與應用放在一個單獨的子網中,要不然你的用戶密碼很輕易被sniffer去?;蛘卟捎胊dvance security,對用戶登錄加密。
11. 限止只有某些ip才能訪問你的數據庫。
12. lsnrctl 要加密碼,要不然別人很輕易從外面關掉你的listener。
13. 假如可能,不要使用默認1521端口
7.如何檢查用戶是否用了默認密碼
假如使用默認密碼,很可能就對你的數據庫造成一定的安全隱患,那么可以使用如下的查詢獲得那些用戶使用默認密碼
select username "User(s) with Default Password!"
from dba_users
where password in
('E066D214D5421CCC', -- dbsnmp
'24ABAB8B06281B4C', -- ctxsys
'72979A94BAD2AF80', -- mdsys
'C252E8FA117AF049', -- odm
'A7A32CD03D3CE8D5', -- odm_mtr
'88A2B2C183431F00', -- ordplugins
'7EFA02EC7EA6B86F', -- ordsys
'4A3BA55E08595C81', -- outln
'F894844C34402B67', -- scott
'3F9FBD883D787341', -- wk_proxy
'79DF7A1BD138CF11', -- wk_sys
'7C9BA362F8314299', -- wmsys
'88D8364765FCE6AF', -- xdb
'F9DA8977092B7B81', -- tracesvr
'9300C0977D7DC75E', -- oas_public
'A97282CE3D94E29E', -- websys
'AC9700FD3F1410EB', -- lbacsys
'E7B5D92911C831E1', -- rman
'AC98877DE1297365', -- perfstat
'66F4EF5650C20355', -- exfsys
'84B8CBCA4D477FA3', -- si_informtn_schema
'D4C5016086B2DC6A', -- sys
'D4DF7931AB130E37') -- system
/
8.如何修改默認的XDB監聽端口Oracle9i默認的xml DB把HTTP的默認端口設為8080,這是一個太常用的端口了,很多別的WebServer都會使用這個端口,
假如我們安裝了它,最好修改一下,避免沖突,假如不使用呢,就最好不要安裝
提供三種修改的方法
1.dbca,選擇你的數據庫,然后Standard Database Features->Customize->Oracle XML DB option,進入這個畫面你應該就知道怎么改了。
2.OEM console,在XML Database 的配置里面修改
3.用oracle提供的包:
-- 把HTTP/WEBDAV端口從8080改到8081
SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(),
'/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()',8081))
/
-- 把FTP端口從2100改到2111
SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(),
'/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()',2111))
/
SQL> commit;
SQL> exec dbms_xdb.cfg_refresh;
-- 檢查修改是否已經成功
SQL> select dbms_xdb.cfg_get from dual;
9.怎么捕捉用戶登錄信息,如SID,IP地址等
可以利用登錄觸發器,如
CREATE OR REPLACE TRIGGER tr_login_record
AFTER logon ON DATABASE
DECLARE
miUserSid NUMBER;
mtsession v$session%ROWTYPE;
CURSOR cSession(iiUserSid IN NUMBER) IS
SELECT * FROM v$session
WHERE sid=iiUserSid;
BEGIN
SELECT sid INTO miUserSid FROM v$mystat WHERE rownum10.程序報錯
ORA-01555: snapshot too old: rollback segment number 148 with name "_SYSSMU148$" too small
可以查詢錯誤原因
oerr ora 01555
得到如下信息
01555, 00000, "snapshot too old: rollback segment number %s with name /"%s/" too small"
// *Cause: rollback records needed by a reader for consistent read are
// overwritten by other writers
// *Action: If in Automatic Undo Management mode, increase undo_retention
// setting. Otherwise, use larger rollback segments說明一個事務的執行時長超過了系統設定的最大值.
SQL> show parameters undo
比如
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 16200
undo_suppress_errors boolean FALSE
undo_tablespace string UNDOTBS2則說明是16200秒.11.假如你要用ultraEdit-32編輯oracle腳本,可以設置對要害字不同亮度的顯示。點"advanced"-->"configuration"-->"Syntax Highlighting"
-->"open",然后把下面的代碼追加到最后保存,再重新打開ultraEdit,編輯.sql文件就可以看到了。這樣顏色上輕易分辨。方便一些。/L8"sql" Nocase Line Comment = -- Block Comment On = /* Block Comment Off = */ String Chars = ' File Extensions = SQL
/Delimiters = ~!%@^&*()-+=//{}[]:;"'<> , .?
/Function String = "%[A-Z _]*[~/s]+(*)"
/C1 "Keywords"
ABORT ACCEPT ACCESS ADD ALL ALTER AND ANY ARRAY ARRAYLEN AS ASC ASSERT ASSIGN AT AUDIT AUTHORIZATION AVG
BASE_TABLE BEGIN BETWEEN BINARY_INTEGER BODY BOOLEAN BY
CASE CHAR CHAR_BASE CHECK CLOSE CLUSTER CLUSTERS COLAUTH COLUMN COMMENT COMMIT COMPRESS CONNECT CONSTANT CRASH CREATE CURRENT CURRVAL CURSOR
DATABASE DATA_BASE DATE DBA DEBUGOFF DEBUGON DECLARE DECIMAL DEFAULT DEFINITION DELAY DELETE DESC DIGITS DISPOSE DISTINCT DO DROP
ELSE ELSIF END ENTRY EXCEPTION EXCEPTION_INIT EXCLUSIVE EXISTS EXIT
FALSE FETCH FILE FLOAT FOR FORM FROM FUNCTION
GENERIC GOTO GRANT GROUP
HAVING
IDENTIFIED IF IMMEDIATE IN INCREMENT INDEX INDEXES INDICATOR INITIAL INSERT INTEGER INTERFACE INTERSECT INTO IS
LEVEL LIKE LIMITED LOCK LONG LOOP
MAX MAXEXTENTS MIN MINEXTENTS MINUS MISLABEL MOD MODE
NATURAL NATURALN NEW NEXTVAL NOAUDIT NOCOMPRESS NOLOGGING NOT NOWAIT NULL NUMBER NUMBER_BASE
OF OFFLINE ON ONLINE OPEN OPTION OR ORDER OTHERS OUT
PACKAGE PARTITION PCTFREE PCTUSED PLS_INTEGER POSITIVE POSITIVEN PRAGMA PRIOR PRIVATE PRIVILEGES PROCEDURE PUBLIC
RAISE RANGE RAW REAL RECORD REF RELEASE REMR RENAME RESOURCE RETURN REVERSE REVOKE ROLLBACK ROW ROWID ROWLABEL ROWNUM ROWS ROWTYPE RUN
SAVEPOINT SCHEMA SELECT SEPARATE SESSION SET SHARE SMALLINT SPACE SQL SQLCODE SQLERRM START STATEMENT STDDEV SUBTYPE SUCCESSFUL SUM SYNONYM SYSDATE
TABAUTH TABLE TABLES TASK TERMINATE THEN TO TRIGGER TRUE TYPE
UID UNION UNIQUE UPDATE USE USER
VALIDATE VALUES VARCHAR VARCHAR2 VARIANCE VIEW VIEWS
WHEN WHENEVER WHERE WHILE WITH WORK WRITE
XOR
/C2 "Packages"
DBMS_OUTPUT
DBMS_JOB
DBMS_SQL
/C3 "Package Methods"
BIND_VARIABLE BIND_VARIABLE_CHAR BIND_VARIABLE_RAW BIND_VARIABLE_ROWID BROKEN
CHANGE CLOSE_CURSOR COLUMN_VALUE COLUMN_VALUE_CHAR COLUMN_VALUE_RAW COLUMN_VALUE_ROWID
DEFINE_COLUMN DEFINE_COLUMN_CHAR DEFINE_COLUMN_RAW DEFINE_COLUMN_ROWID DISABLE
ENABLE EXECUTE EXECUTE_AND_FETCH
FETCH_ROWS
GET_LINE GET_LINES
INTERVAL IS_OPEN
LAST_ERROR_POSITION LAST_ROW_COUNT LAST_ROW_ID LAST_SQL_FUNCTION_CODE
NEW_LINE NEXT_DATE
OPEN_CURSOR
PARSE PUT PUT_LINE
REMOVE
SUBMIT
WHAT
/C4 "SQL*Plus Commands"
EXECUTE
GRANT
REPLACE
RUN
START
/C5 "SQL*Plus Functions"
ABS ADD_MONTHS ASCII
CEIL CHR CONCAT CONVERT COS COSH
DECODE
EXP
FLOOR
GREATEST
HEXTORAW
INITCAP INSTR
LAST_DAY LENGTH LN LOG LOWER LPAD LTRIM
MOD MONTHS_BETWEEN
NEXT_DAY NEW_TIME NLS_INITCAP NLS_LOWER NLS_UPPER NVL
POWER
RAWTOHEX REPLACE ROUND ROWIDTOCHAR RPAD RTRIM
SIGN SIN SINH SOUNDEX SQRT SUBSTR SUBSTRB
TAN TANH TO_CHAR TO_DATE TO_LABEL TO_MULTI_BYTE TO_NUMBER TO_SINGLE_TYPE TRANSLATE TRUNC
UPPER USERENV
VSIZE
/C6 "Should Be Reserved"
BEFORE
EACH
FOR
KEY
PRIMARY
WHEN WHERE WHILE
/C7 "CONST Var"
DUP_VAL_INDEX TIMEOUT_ON_RESOURCE TRANSACTION_BACKED_OUT INVALID_CURSOR NOT_LOGED_ON LOGIN_DENIED
NO_DATA_FOUND SYS_INVALID_ROWID TOO_MANY_ROWS ZERO_DIVIDE INVALID_NUMBER STORAGE_ERROR PROGRAM_ERROR VALUE_ERROR
NOTFOUND FOUND