存档

‘数据库相关’ 分类的存档

Oracle 发布2009年7月紧急补丁更新修复多个漏洞

2009年7月21日 admin 3 条评论

受影响系统:
Oracle Application Server 10.1.3.4.0
Oracle Application Server 10.1.3.3.0
Oracle Application Server 10.1.2.3.0 
Oracle E-Business Suite 12.1
Oracle E-Business Suite 12.0.6
Oracle E-Business Suite 11.5.10.2
Oracle Enterprise Manager Grid Control 10.2.0.4
Oracle Database 9.2.0.8DV 
Oracle Database 9.2.0.8
Oracle Database 11.1.0.7    
Oracle Database 11.1.0.6
Oracle Database 10.2.0.4
Oracle Database 10.2.0.3
Oracle Database 10.1.0.5
Oracle Identity Management 10g 10.1.4.3.0
Oracle Identity Management 10g 10.1.4.2.0
Oracle Identity Management 10g 10.1.4.0.1
Oracle PeopleSoft Enterprise PeopleTools 8.49
Oracle Enterprise Manager Database Control 11.1.0.7
Oracle Enterprise Manager Database Control 11.1.0.6
Oracle WebLogic Server 9.2
Oracle WebLogic Server 9.1 GA
Oracle WebLogic Server 9.0 GA
Oracle WebLogic Server 8.1
Oracle WebLogic Server 7.0
Oracle WebLogic Server 10.3
Oracle WebLogic Server 10.0MP1
Oracle PeopleSoft Enterprise HRMS 9.0
Oracle PeopleSoft Enterprise HRMS 8.9
Oracle JRockit R27.6.3 
Oracle PeopleSoft Enterprise FMS 9.0
Oracle PeopleSoft Enterprise FMS 8.9
Oracle PeopleSoft Enterprise FMS 8.8 SP1
Oracle Siebel Highly Interactive Client 8.1
Oracle Siebel Highly Interactive Client 8.0
Oracle Siebel Highly Interactive Client 7.8
Oracle Siebel Highly Interactive Client 7.7.2
Oracle Siebel Highly Interactive Client 7.5.3
Oracle Complex Event Processing 10.3
Oracle WebLogic Event Server 2.0

描述:
Oracle Database是一款商业性质大型数据库系统。

Oracle发布了2009年4月的紧急补丁更新公告,修复了多个Oracle产品中的多个漏洞。这些漏洞影响Oracle产品的所有安全属性,可导致本地和远程的威胁。其中一些漏洞可能需要各种级别的授权,但也有些不需要任何授权。最严重的漏洞可能导致完全入侵数据库系统。

1) JRockit中的多个安全漏洞可能导致拒绝服务或入侵用户系统。
2) Oracle Complex Event Processing(CEP)中的漏洞可能导致泄漏敏感信息。
3) Oracle WebLogic Server(Web服务组件)和Oracle安全部署工具包/Oracle Web服务管理器处理某些XML Signature文档的方式存在错误。
4) Oracle Secure Enterprise Search没有正确的验证对/search/query/search所传送的search_p_groups参数,远程攻击者可以通过提交恶意请求执行跨站脚本攻击。
5) Oracle WebLogic Server没有正确的验证对consolehelp/console-help.portal所传送的searchQuery参数,远程攻击者可以通过提交恶意请求执行跨站脚本攻击。

厂商补丁:

Oracle已经为此发布了一个安全公告(cpujul2009)以及相应补丁:
cpujul2009:Oracle Critical Patch Update Advisory - July 2009
链接:http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpujul2009.html?_template=/o

Oracle数据库网络与安全FAQ精粹

2009年4月11日 admin 没有评论

来源:51cto

[Q]如何限定特定IP访问数据库

[A]可以利用登录触发器、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,……)

[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方式连接数据库

host name方式只支持tcp/ip协议的小局域网

修改listener.ora中的如下信息

(SID_DESC =(GLOBAL_DBNAME = ur_hostname) –你的机器名
(ORACLE_HOME = E:oracleora92) –oracle home(SID_NAME = orcl) –sid name)

然后在客户端的sqlnet.ora中,确保有

NAMES.DIRECTORY_PATH= (HOSTNAME)
你就可以利用数据库服务器的名称访问数据库了

[Q]dbms_repcat_admin能带来什么安全隐患

[A]以下情况可能获得该包的执行权限:

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中获得详细信息

[Q]在不知道用户密码的时候,怎么样跳转到另外一个用户执行操作后并不影响该用户?

[A]我们通过如下的方法,可以安全使用该用户,然后再跳转回来,在某些时候比较有用,需要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

[Q]如何加固你的数据库

[A]要注意以下方面

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.htm

10. 把你的数据库与应用放在一个单独的子网中,要不然你的用户密码很容易被sniffer去。或者采用advance security,对用户登录加密。

11. 限止只有某些ip才能访问你的数据库。

12. lsnrctl 要加密码,要不然别人很容易从外面关掉你的listener。

13. 如果可能,不要使用默认1521端口

[Q]如何检查用户是否用了默认密码

[A]如果使用默认密码,很可能就对你的数据库造成一定的安全隐患,那么可以使用如下的查询获得那些用户使用默认密码

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
/

[Q]如何修改默认的XDB监听端口

[A]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;

[Q]怎么捕获用户登录信息,如SID,IP地址等

[A]可以利用登录触发器,如

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 rownum<=1;
OPEN cSession(miUserSid);
FETCH cSession INTO mtSession;
–if user exists then insert data
IF cSession%FOUND THEN
Insert INTO log$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
–if user don’t exists then return error
sp_write_log(‘Session Information Error:’||SQLERRM);
CLOSE cSession;
raise_application_error(-20099,’Login Exception’,FALSE);
END IF;
CLOSE cSession;
EXCEPTION
WHEN OTHERS THEN
sp_write_log(‘Login Trigger Error:’||SQLERRM);
END tr_login_record;

在以上触发器中需要注意以下几点:

1、该用户有v_$session与v_$mystat的对象查询权限,可以在sys下对该拥护显式授权。

2、sp_write_log原本是一个写日志的过程,可以置换为自己的需要,如null跳过。

3、必须在创建该触发器之前创建一个log$information的表记录登录信息。

[Q]怎么捕获整个数据库的DDL语句或者是说对象结构变化与修改

[A]可以采用DDL触发器,如

Create or REPLACE TRIGGER tr_trace_ddl
AFTER DDL ON DATABASE
DECLARE
sql_text ora_name_list_t;
state_sql ddl$trace.ddl_sql%TYPE;
BEGIN
FOR i IN 1..ora_sql_txt(sql_text) LOOP
state_sql := state_sql||sql_text(i);
END LOOP;
Insert INTO ddl$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
WHEN OTHERS THEN
sp_write_log(‘Capture DDL Excption:’||SQLERRM);
END tr_trace_ddl;

在创建以上触发器时要注意几点

1、必须创建一个ddl$trace的表,用来记录ddl的记录

2、sp_write_log原本是一个写日志的过程,可以置换为自己的需要,如null跳过

[Q]怎么捕获表上的DML语句(不包括select)语句)

[A]可以采用dml触发器,如

Create or REPLACE TRIGGER tr_capt_sql
BEFORE Delete or Insert or Update
ON manager.test
DECLARE
sql_text ora_name_list_t;
state_sql capt$sql.sql_text%TYPE;
BEGIN
FOR i IN 1..ora_sql_txt(sql_text) LOOP
state_sql := state_sql || sql_text(i);
END LOOP;
Insert INTO capt$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
WHEN OTHERS THEN
sp_write_log(‘Capture DML Exception:’||SQLERRM);
END tr_capt_sql;

在创建以上触发器时要注意几点

1、必须创建一个capt$sql的表,用来记录ddl的记录

2、sp_write_log原本是一个写日志的过程,可以置换为自己的需要,如null跳过。

[Q]怎么样生成日期格式的文件

[A]在LINUX/UNIX上,使用`date +%y%m%d` (`这个是键盘上~所在的那个键) 或$(date +%y%m%d),如:

touch
xp_table_name_`date +%y%m%d`.dmp
DATE=$(date +%y%m%d)

或者

DATE=$(date +%Y%m%d –date ‘1 days ago’)
#获取昨天或多天前的日期
Windows上,使用%date:~4,10%,其中4是开始字符,10是提取长度,表示从date生成的日期中,提取从4开始长度是10的串。你可以改成其它你需要的数字,如:

Echo %date:~4,10%

如果想得到更精确的时间,win上面还可以使用time

[Q]测试磁盘与阵列性能

[A]用类似如下的方法测试写能力

time dd if=/dev/zero of=/oradata/biddb/testind/testfile.dbf bs=1024000 count=1000

期间系统IO 使用可以用(unix):

iostat -xnp 2 显示Busy程度

[Q]怎么配置SSH密匙

[A]可以防止”中间人”的进攻方式

1、ssh-keygen 或ssh-keygen -d(ssh 2.x)生成钥匙

2、然后拷贝公匙到你想登录的服务器,改名为authorized_keys,如果是3.0以下版本,需要改为authorized_keys2

3、还可以利用config文件进一步简化操作

Host *bj
HostName 机器名或IP
User 用户名

有了这个配置文件,你就可以利用ssh bj来访问指定的机器了,也就可以利用scp与sftp来传送文件了。

[Q]FTP怎么在脚本中自动上传/下载

[A]可以把FTP写到shell脚本中,如

ftp -n -i 主机IP <user username pass
cd 目标目录
put file
get file
#查询文件
ls
#退出
bye

分类: 数据库相关 标签: ,

SQLServer查询所有表所有字段包含xx的信息

2009年2月28日 admin 没有评论

从系统表自动生成sql语句来运行得到结果

SELECT a.name AS columnname,object_name(a.id)AS tablename INTO t FROM syscolumns a,

sysobjects b,

systypes c

WHERE a.id=b.id  

AND a.xtype=c.xtype

AND b.xtype=’u’

AND c.name IN(‘varchar’,'nvarchar’,'char’,'nchar’,'text’,'ntext’)

AND object_name(a.id)<>’t’

go

CREATE FUNCTION udf_genSQL(@tableName varchar(1000),@keyword varchar(1000))

returns varchar(8000)

AS

begin

    declare @sql varchar(8000)

    SET @sql=’select * from ‘+@tableName +’ where 1=1 ‘

    SELECT @sql=@sql+’ or ‘+

       columnname +’ like ”%’+@keyword+’%”’ FROM t

    WHERE tablename=@tablename

    RETURN @sql

end

go

SELECT dbo.udf_genSQL(tableName,’a') FROM t GROUP BY tablename

DROP TABLE t

DROP FUNCTION dbo.udf_genSQL

分类: 数据库相关 标签: