数据库安全

  • PB应用的数据库联接的安全防范数据库安全分享!

    随着因特网的深入人心,网络技术不断发展,数据的保密性要求也越来越高。在通常的Server/Client方式MIS开发中,由于程序要与数据库服务器保持联接,为了程序的灵活和扩充性,联接参数用户ID和登录口令)又不能在程序中写死其实写死也不是一种好的方法),一般的方法无外乎有两种:其一是把联接参数存放在注册表中;其二就是直接读INI文件。
    而综上几种方法安全性都不太好,给人以可乘之机。
    本人找到一种方法,可以解决数据库应用的安全性问题,通过INI文件和数据库的巧妙处理,在程序中提供用户一种接口,可以随时修改数据库的联接参数,而又不给外人以蛛丝马迹,做到神不知鬼不觉。
    实现方法如下:
    1、创建INI文件,记录数据库联接的一些方便程序分发的参数DBMS、SERVERNAME、LOGID具体如下:
    //创建成INI文件rsgl.ini)
    [Database]
    DBMS=O84 ORACLE 8.0.4
    ServerName=gxmistest //数据库服务器名
    LogId=rsgl //实际的数据库登录用户
    然后,在数据库中创建一个中间用户PUB,登录口令PUB,赋予PUB用户CONNECT,RESOURCE权限,再在其中创建表CREATE TABLE TBL_PUB_PASSSHADOW (PASSSHADOW VARCHAR2(50) NOT NULL)用于存放实际的数据库联接的登录口令当然要经过加密)。加密函数网上多的是,在此就不累述。我自已创建了一个字符串加密函数f_password(string old_str,string new_str,integer jm_mode),jm_mode参数用以区分函数的加解)密,old_str、new_str两参数分别为加解)密的字符串。
    2、就开始编写应用程序了,在应用程序的OPEN事件中进行数据库登录联接,程序脚本如下:
    string ls_inifile,ls_starttimes
    string ls_logid,ls_logpass,ls_dbms
    string ls_pass,ls_sql,ls_code,ls_server
    //设置INI文件
    ls_inifile = ‘rsgl.ini’
    ls_server = ProfileString (ls_inifile, “database”, “ServerName”, “”)
    ls_logid = ProfileString (ls_inifile, “database”, “LogId”,””)
    // Profile pub
    SQLCA.DBMS = ProfileString (ls_inifile, “database”, “dbms”, “”)
    SQLCA.LogPass = ‘pub’
    SQLCA.ServerName = ls_server
    SQLCA.LogId = “pub”
    SQLCA.AutoCommit = False
    SQLCA.DBParm = “”
    connect using sqlca;
    //得到用户RSGL加过密的用户口令
    select passshadow into:ls_pass from tbl_pub_passshadow;
    //口令解密
    ls_pass = f_password(ls_pass,0)
    disconnect using sqlca;
    //联接到实际的数据库用户RSGL
    SQLCA.ServerName = ls_server
    sqlca.DBMS = ProfileString (ls_inifile, “database”, “Dbms”,””)
    SQLCA.DBParm = ProfileString (ls_inifile, “database”, “Dbparm”,””)
    sqlca.database = ProfileString (ls_inifile, “database”, “database”,””)
    sqlca.userid = ProfileString (ls_inifile, “database”, “userid”,””)
    sqlca.dbpass = ProfileString (ls_inifile, “database”, “dbpass”,””)
    sqlca.logid = ls_logid
    sqlca.logpass = ls_pass//ProfileString (ls_inifile, “database”, “LogPass”,””)
    SQLCA.AutoCommit = False
    connect using sqlca;
    if sqlca.sqldbcode <> 0 then
    choose case sqlca.sqldbcode
    case 1017
    MessageBox (string(sqlca.SQLDBCode),”不能联接数据库。~r错误:无效的用户名和口令.请与管理员联系!”)
    case 12154
    MessageBox (string(sqlca.SQLDBCode),”不能联接数据库。~r错误:服务器名不存在!请与系统管理员联系.”)
    case 999
    MessageBox (string(sqlca.SQLDBCode),”不能联接数据库。~r错误:数据库不支持你当前的安装!”)
    case else
    MessageBox (string(sqlca.SQLDBCode),”不能联接数据库。~r错误:”+ sqlca.sqlerrtext)
    end choose
    halt close
    else
    open(w_gd_frame) //打开应用程序的主窗口
    end if
    3、接下来,就是编写一个用户接口,让授权用户随时修改数据库联接参数。窗口界面文件名称:dblogon.jpg),窗口上面的控件有:
    控件名称 控件属性
    sle_server SingleLineEdit
    sle_login SingleLineEdit
    sle_oldkl SingleLineEdit
    sle_pass SingleLineEdit
    sle_repass SingleLineEdit
    cb_1 commandbutton
    cb_2 commandbutton
    cb_1命令按钮的clicked事件如下:
    string ls_inifile,ls_pass,ls_logid,ls_repass,ls_old
    string ls_k,ls_user,ls_sql
    ls_inifile =’rsgl.ini’
    transaction pub_tr
    pub_tr = create transaction
    pub_tr.DBMS = ProfileString (ls_inifile, “database”, “dbms”, “”)
    pub_tr.LogPass = ‘pub’
    pub_tr.ServerName = sle_server.text
    pub_tr.LogId = “pub”
    pub_tr.AutoCommit = False
    pub_tr.DBParm = “”
    connect using pub_tr;
    ls_old = sle_oldkl.text
    ls_user = lower(trim(sle_logid.text))
    //得到数据库联接原用户口令
    select passshadow into :ls_k from tbl_pub_passshadow using pub_tr;
    if ls_old <> f_password(ls_k,0) then
    messagebox(“提示”,”原口令不对!”)
    return
    end if
    //检查核对口令
    ls_pass = sle_pass.text
    ls_repass = sle_repass.text
    if ls_repass <> ls_pass then
    messagebox(“”,”核对口令不对,请重新输入!”)
    return
    end if
    SetProfileString(ls_inifile, “Database”, “Servername”,sle_server.text)
    SetProfileString(ls_inifile, “Database”, “Logid”,ls_user)
    //修改数据库用户的联接口令
    ls_sql = ‘ alter user ‘+ls_user+’ identified by ‘+ls_pass
    Execute Immediate :ls_sql using sqlca;
    ls_pass = f_password(ls_pass,1)
    UPDATE TBL_PUB_PASSSHADOW SET PASSSHADOW =:ls_pass using pub_tr ;
    commit using pub_tr;
    commit using sqlca;
    disconnect using pub_tr;
    close(parent)
    cb_2命令按钮的clicked事件如下:close(parent)
    4、到此万事OK。
    所有代码已在Win98环境下,用PowerBuilder 6.5测试通过。

    数据库安全 2020年4月26日
  • SQL数据库的一些攻击数据库安全分享!

    对于国内外的很多新闻,BBS和电子商务网站都采用ASP+SQL设计,而写 ASP的程序员很多有很多刚刚毕业的),所以,ASP+SQL的攻击成功率也比较高。这类攻击方法与NT的版本和SQL的版本没有多大的关系,也没有相应的补丁,因为漏洞是程序员自己造成的,而且大多数讲解ASP编程的书上,源代码例子就有这个漏洞存在,其实只是一些合法的ASP对SQL的请求,就留下后患无穷!a这种攻击方法最早源于’or’1’=’1的漏洞我们暂且称其为漏洞),这个漏洞的原理我想大家因该都知道了,那么随之而来的便是;exec sp_addlogin hax在数据库内添加一个hax用户),但是这个方法的限制很大,首先ASP使用的SQL Server账号是个管理员,其次请求的提交变 量在整个SQL语句的最后,因为有一些程序员采用SELECT * FROM news WHERE  id=… AND topic=… AND …..这种方法请求数据库,那么如果还用以上的例子就会news.asp?id=2;exec sp_addlogin hax变成SELECT * FROM news WHERE id=2;exec sp_addlogin hax AND topic= … AND …整个SQL语句在执行sp_addlogin的存储过程后有AND与判断存在,语法错误,你的sp_addlogin 自然也不能正常运行了,因此试试看下面这个方法

    数据库安全 2020年4月26日
  • 数据库安全:当SQL Server数据库崩溃时如何恢复数据库安全分享!

    任何数据库系统都无法避免崩溃的状况,即使你使用了Clustered,双机热备……仍然无法完全根除系统中的单点故障,何况对于大部分用户来说,无法承受这样昂贵的硬件投资。所以,在系统崩溃的时候,如何恢复原有的宝贵数据就成为一个极其重要的问题了。

    数据库安全 2020年4月26日
  • Proxy Server和SQL Server在上数据库的安全复制数据库安全分享!

    为SQL Server在WinSock上定义协议的步骤如下:
    1. 在”启动”菜单上,指向”程序/Microsoft Proxy Server”,然后点击”Microsoft Management Console”。

    数据库安全 2020年4月26日
  • SQL Server:安全设计从头起数据库安全分享!

    最基本的要点
    如果你不能理解SQL Server security基本的概念,就马上先停止开发并先阅读这些开发准则,你不可能在不知道这些概念的基础上就能够正确地使一个数据库安全化。程序的安全正如一辆卡车一样。你具有一个发动机,一把钥匙,当钥匙打开发动机即发动机启动之后,就有可能发生的全部过程。如果你忽略了某些细节,驾驶过程中就会发生很多麻烦。在问题产生之后,你可以将卡车交给一个修理工,然而对于程序的安全问题,你自己将是数据库的修理工。

    数据库安全 2020年4月26日
  • Access 数据库安全攻防策略数据库安全分享!

    前言:网络是没有绝对安全的,这是一句经典的名言,我也不用多说了!今天主要为大家演示一下,怎么下载Access数据库和防止Access数据库被下载。
    攻:

    数据库安全 2020年4月26日
  • Access数据库安全之反下载数据库安全分享!

    今天再次看到Access数据库安全的文章,每次看到这种文章就想说上两句,流行说法有几种:
    一、密码式
    给数据库起一个随机复杂的名称,避免被猜到被下载,这种方式在以前很流行,因为大家都对自己的代码很有自信。但随着错误提示对数据库地址的泄露导致数据库被非法下载,这种方式也就越来越少人用了。
    这种方法,已经很少被用到了,除了对安全不甚了解的程序员,虽然少,但是还是会遇到,比如前几天看到的物业的网站。
    二、”#”式
    在数据库名称里加上#号,从URL上请求时#是请求地址和请求参数的一个分隔字符,如果知道了数据库名,直接请求的话,如:http://www.xx.com/access#.mdb,WEB服务器会认为请求的是access而不是access#.mdb,所以会提示找不到文件,但是很遗憾,URL中对于这些特殊的字符都会有一个特殊的表示方式,#的特殊表示就是%23,如http://www.xx.com/access%23.mdb,那么access#.mdb将会被下载。还有如果用FlashGet之类的下载工具也可以直接下载。

    数据库安全 2020年4月26日
  • 在SQL Server所在的计算机上运行病毒扫描软件数据库安全分享!

    如果我需要在运行有SQL Server的机器上运行病毒扫描软件,怎样做才不会影响性能?

    数据库安全 2020年4月26日
  • Oracle8的不安全因素及几点说明数据库安全分享!

    作为对象关系型数据库的杰出代表,Oracle无疑是最具实力的。无论是在数据库的规模,多媒体数据类型的支持,SQL操作复制的并行性还是在安全服务方面,Oracle均比SYBASE、Informix强许多,加上其最新版本Oracle8.0.4更是增强了这方面的特性,而且还引入了一些新的特性,比如:数据分区(Data Partitioning)、对象关系技术(Object Relational Technology)、唯索引表(Index only tables)、连接管理器(Connection Manager)[NET8特性]、高级队列(Advanced Quening)等,所以有一种说法:Oracle8是适用于如Peoplesoft,SAP和Baan等封装式应用系统最好的数据库引擎。

    数据库安全 2020年4月26日
  • SQL概述及在网络安全中的应用数据库安全分享!

    1.网络应用和SQL注射 1.1概述 有些网络数据库没有过滤客户提供的数据中可能有害的字符,SQL注射就是利用插入有害字符进行攻击的技术。尽管非常容易防范,但因特网上仍然有惊人数量的存储系统容易受到这种攻击。这篇文章的目的是指导专业安全组织了解这种技术,并告诉他们正确的,用来防范SQL注射的办法,以及处理各种常见的,由于非法输入引起的问题.

    数据库安全 2020年4月26日
  • 从IIS到SQL Server数据库安全数据库安全分享!

    从codered到nimda等,一大堆蠕虫把原来需要人工利用的漏洞都变成了程序自动利用了,大家还想去手工操作这些IIS漏洞么?让我们调整重心,去看看服务器常用的数据库吧。

    数据库安全 2020年4月26日
  • 数据库安全审计数据库安全分享!

    用以下的方式可以监控登入登出的用户:
    创建如下的两张表:
    create table login_log — 登入登出信息表
    (
    session_id int not null, — sessionid
    login_on_time date, — 登入进间
    login_off_time date, — 登出时间
    user_in_db varchar2(30), — 登入的db user
    machine varchar2(20), — 机器名
    ip_address varchar2(20), — ip地址
    run_program varchar2(20) — 以何程序登入
    ); create table allow_user — 网域用户表
    (
    ip_address varchar2(20), — ip地址
    login_user_name nvarchar2(20) — 操作者姓名
    );

    数据库安全 2020年4月26日