Oracle数据库网络与安全FAQ精粹汇集.docx
- 文档编号:4672063
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:9
- 大小:19.87KB
Oracle数据库网络与安全FAQ精粹汇集.docx
《Oracle数据库网络与安全FAQ精粹汇集.docx》由会员分享,可在线阅读,更多相关《Oracle数据库网络与安全FAQ精粹汇集.docx(9页珍藏版)》请在冰豆网上搜索。
Oracle数据库网络与安全FAQ精粹汇集
Oracle数据库网络与安全FAQ精粹汇集
来源:
开发界
[Q]如何限定特定IP访问数据库
[A]可以利用登录触发器、cmgw或者是在$OREACLE_HOME/network/admin下新增一个protocol.ora文件(有些os可能是.protocol.ora),9i可以直接修改sqlnet.ora:
增加如下内容:
tcp.validnode_checking=yes
#允许访问的i
tcp.inited_nodes=(ip1,ip2,……)
#不允许访问的i
tcp.excluded_nodes=(ip1,ip2,……)
[Q]如何穿过防火墙连接数据库
[A]这个问题只会在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
[Q]如何利用hostname方式连接数据库
[A]hostname方式只支持tcp/ip协议的小局域网
修改listener.ora中的如下信息
(SID_DESC=
(GLOBAL_DBNAME=ur_hostname)--你的机器名
(ORACLE_HOME=E:
oracleora92)--oraclehome
(SID_NAME=orcl)--sidname
)
然后在客户端的sqlnet.ora中,确保有
NAMES.DIRECTORY_PATH=(HOSTNAME)
你就可以利用数据库服务器的名称访问数据库了
[Q]dbms_repcat_admin能带来什么安全隐患
[A]以下情况可能获得该包的执行权限:
1、在sys下
grantexecuteondbms_repcat_admintopublic[ user_name]
2、用户拥有executeanyprocedure特权(仅限于9i以下,9i必须显示授权)
如果用户通过执行如下语句:
execsys.dbms_repcat_admin.grant_admin_any_schema(’user_name’);
该用户将获得极大的系统特权
可以从user_sys_privs中获得详细信息
[Q]在不知道用户密码的时候,怎么样跳转到另外一个用户执行操作后并不影响该用户?
[A]我们通过如下的方法,可以安全使用该用户,然后再跳转回来,在某些时候比较有用
需要Alteruser权限或DBA权限:
SQL>selectpasswordfromdba_userswhereusername=’SCOTT’;
PASSWORD
-----------------------------
F894844C34402B67
SQL>alteruserscottidentifiedbylion;
Useraltered.
SQL>connectscott/lion
Connected.
REMDowhateveryoulike...
SQL>connectsystem/manager
Connected.
SQL>alteruserscottidentifiedbyvalues’F894844C34402B67’;
Useraltered.
SQL>connectscott/tiger
Connected
[Q]如何加固你的数据库
[A]要注意以下方面
1.修改sys,system的口令。
2.Lock,修改,删除默认用户:
dbsnmp,ctxsys等。
3.把REMOTE_OS_AUTHENT改成False,防止远程机器直接登陆。
4.把O7_DICTIONARY_ACCESSIBILITY改成False。
5.把一些权限从PUBLICRole取消掉。
6.检查数据库的数据文件的安全性。
不要设置成666之类的。
检查其他dba用户。
7.把一些不需要的服务(比如ftp,nfs等关闭掉)
8.限制数据库主机上面的用户数量。
9.定期检查Metalink/OTN上面的securityAlert。
比如:
10.把你的数据库与应用放在一个单独的子网中,要不然你的用户密码很容易被sniffer去。
或者采用advancesecurity,对用户登录加密。
11.限止只有某些ip才能访问你的数据库。
12.lsnrctl要加密码,要不然别人很容易从外面关掉你的listener。
13.如果可能,不要使用默认1521端口
[Q]如何检查用户是否用了默认密码
[A]如果使用默认密码,很可能就对你的数据库造成一定的安全隐患,那么可以使用如下的查询获得那些用户使用默认密码
selectusername"User(s)withDefaultPassword!
"
fromdba_users
wherepasswordin
(’E066D214D5421CCC’,--dbsnm
’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
/
[Q]如何修改默认的XDB监听端口
[A]Oracle9i默认的XMLDB把HTTP的默认端口设为8080,这是一个太常用的端口了,很多别的WebServer都会使用这个端口,
如果我们安装了它,最好修改一下,避免冲突,如果不使用呢,就最好不要安装
提供三种修改的方法
1.dbca,选择你的数据库,然后StandardDatabaseFeatures->Customize->OracleXMLDBoption,进入这个画面你应该就知道怎么改了。
2.OEMconsole,在XMLDatabase的配置里面修改
3.用oracle提供的包:
--把HTTP/WEBDAV端口从8080改到8081
SQL>calldbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(),
’/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()’,8081))
/
--把FTP端口从2100改到2111
SQL>calldbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(),
’/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()’,2111))
/
SQL>commit;
SQL>execdbms_xdb.cfg_refresh;
--检查修改是否已经成功
SQL>selectdbms_xdb.cfg_getfromdual;
[Q]怎么捕获用户登录信息,如SID,IP地址等
[A]可以利用登录触发器,如
CREATEORREPLACETRIGGERtr_login_record
AFTERlogonONDATABASE
DECLARE
miUserSidNUMBER;
mtSessionv$session%ROWTYPE;
CURSORcSession(iiUserSidINNUMBER)IS
SELECT*FROMv$session
WHEREsid=iiUserSid;
BEGIN
SELECTsidINTOmiUserSidFROMv$mystatWHERErownum<=1;
OPENcSession(miUserSid);
FETCHcSessionINTOmtSession;
--ifuserexiststheninsertdata
IFcSession%FOUNDTHEN
INSERTINTOlog$information(login_user,login_time,ip_adress,ausid,terminal,
osuser,machine,program,sid,serial#)
VALUES(ora_login_user,SYSDATE,SYS_CONTEXT(’USERENV’,’IP_ADDRESS’),
userenv(’SESSIONID’),
mtSession.Terminal,mtSession.Osuser,
mtSession.Machine,mtSession.Program,
mtSession.Sid,mtSession.Serial#);
ELSE
--ifuserdon’texiststhenreturnerror
sp_write_log(’SessionInformationError:
’ SQLERRM);
CLOSEcSession;
raise_application_error(-20099,’LoginException’,FALSE);
ENDIF;
CLOSEcSession;
EXCEPTION
WHENOTHERSTHEN
sp_write_log(’LoginTriggerError:
’ SQLERRM);
ENDtr_login_record;
在以上触发器中需要注意以下几点
1、该用户有v_$session与v_$mystat的对象查询权限,可以在sys下对该拥护显式授权。
2、sp_write_log原本是一个写日志的过程,可以置换为自己的需要,如null跳过。
3、必须在创建该触发器之前创建一个log$information的表记录登录信息。
[Q]怎么捕获整个数据库的DDL语句或者是说对象结构变化与修改
[A]可以采用DDL触发器,如
CREATEORREPLACETRIGGERtr_trace_ddl
AFTERDDLONDATABASE
DECLARE
sql_textora_name_list_t;
state_sqlddl$trace.ddl_sql%TYPE;
BEGIN
FORiIN1..ora_sql_txt(sql_text)LOOP
state_sql:
=state_sql sql_text(i);
ENDLOOP;
INSERTINTOddl$trace(login_user,ddl_time,ip_address,audsid,
schema_user,schema_object,ddl_sql)
VALUES(ora_login_user,SYSDATE,userenv(’SESSIONID’),
sys_context(’USERENV’,’IP_ADDRESS’),
ora_dict_obj_owner,ora_dict_obj_name,state_sql);
EXCEPTION
WHENOTHERSTHEN
sp_write_log(’CaptureDDLExcption:
’ SQLERRM);
ENDtr_trace_ddl;
在创建以上触发器时要注意几点
1、必须创建一个ddl$trace的表,用来记录ddl的记录
2、sp_write_log原本是一个写日志的过程,可以置换为自己的需要,如null跳过
[Q]怎么捕获表上的DML语句(不包括select)语句)
[A]可以采用dml触发器,如
CREATEORREPLACETRIGGERtr_capt_sql
BEFOREDELETEORINSERTORUPDATE
ONmanager.test
DECLARE
sql_textora_name_list_t;
state_sqlcapt$sql.sql_text%TYPE;
BEGIN
FORiIN1..ora_sql_txt(sql_text)LOOP
state_sql:
=state_sql sql_text(i);
ENDLOOP;
INSERTINTOcapt$sql(login_user,capt_time,ip_address,audsid,owner,table_name,sql_text)
VALUES(ora_login_user,sysdate,sys_context(’USERENV’,’IP_ADDRESS’),
userenv(’SESSIONID’),’MANAGER’,’TEST’,state_sql);
EXCEPTION
WHENOTHERSTHEN
sp_write_log(’CaptureDMLException:
’ SQLERRM);
ENDtr_capt_sql;
在创建以上触发器时要注意几点
1、必须创建一个capt$sql的表,用来记录ddl的记录
2、sp_write_log原本是一个写日志的过程,可以置换为自己的需要,如null跳过。
[Q]怎么样生成日期格式的文件
[A]在LINUX/UNIX上,使用`date+%y%m%d`(`这个是键盘上~所在的那个键)或$(date+%y%m%d),如:
touchexp_table_name_`date+%y%m%d`.dm
DATE=$(date+%y%m%d)
或者
DATE=$(date+%Y%m%d--date’1daysago’)#获取昨天或多天前的日期
Windows上,使用%date:
~4,10%,其中4是开始字符,10是提取长度,表示从date生成的日期中,提取从4开始长度是10的串。
你可以改成其它你需要的数字,如:
Echo%date:
~4,10%
如果想得到更精确的时间,win上面还可以使用time
[Q]测试磁盘与阵列性能
[A]用类似如下的方法测试写能力
timeddif=/dev/zeroof=/oradata/biddb/testind/testfile.dbfbs=1024000count=1000
期间系统IO使用可以用(unix):
iostat-xnp2显示Busy程度
[Q]怎么配置SSH密匙
[A]可以防止"中间人"的进攻方式
1、ssh-keygen或ssh-keygen-d(ssh2.x)生成钥匙
2、然后拷贝公匙到你想登录的服务器,改名为authorized_keys,如果是3.0以下版本,需要改为authorized_keys2
3、还可以利用config文件进一步简化操作
如
Host*bj
HostName机器名或IP
User用户名
有了这个配置文件,你就可以利用sshbj来访问指定的机器了,也就可以利用scp与sftp来传送文件了。
[Q]FTP怎么在脚本中自动上传/下载
[A]可以把FTP写到shell脚本中,如
ftp-n-i主机IP
cd目标目录
putfile
getfile
#查询文件
ls
#退出
bye
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 数据库 网络 安全 FAQ 精粹 汇集
![提示](https://static.bdocx.com/images/bang_tan.gif)