为什么在需要密码加密时,与ASE的连接失败?

时间:2012-06-21 18:04:35

标签: php sybase-ase

如何对从PHP到Sybase ASE的数据库服务器连接进行密码加密?

net password encryption reqd = 1时,与ASE的PHP连接失败。

我们如何使用密码加密与ASE建立PHP数据库连接?是否需要在客户端连接上设置PHP关键字或参数?

1 个答案:

答案 0 :(得分:2)

以下是能够从Linux 64位基本机器与PHP版本5.3.6和Sybase CTISQL Utility/15.7/P-EBF19975 ESD #3/DRV.15.7.0.3的Sybase驱动程序连接的问题的解决方案。虽然我们得到了这个,但我们需要让Apache工作,除此之外,我希望Sybase支持能够帮助我们,以及他们在下面的问题解决方案。我在这里张贴这个给大家带来好处。注意:AFAICT,这不是Sybase支持的解决方案。请自行承担风险。

为此,需要做的事情很少:

  1. 我使用最新的Debian Stable 6.05 squeeze 64 bit
  2. 我已经安装了ebf19977(开放式客户端的开发人员工具包,是的,数字已关闭,这不是错误,您将在安装时看到)从Sybase下载
  3. 从php.net网站下载PHP 5.3.6,从源代码编译。
  4. 步骤1)我认为我应该轻松设置它。确保您有sudo访问权限

    步骤2)要安装开发人员工具包,您需要输入setup.bin文件所在位置的完整路径,输入sudo /home/btran/ebf19977/setup.bin,这将启动设置,几乎按照那里的说明安装OpenClient及其关联工具。确保安装Open Client和PHP库。

    完成安装后,还有其他一些步骤:

    通过执行/ opt / sybase

    根目录中的SYBASE.sh来设置所有Sybase环境变量
    sudo cat /opt/sybase/SYBASE.sh >> /etc/profile , if necessary source /etc/profile
    

    这将设置大多数变量,但您需要添加一个不存在的变量:

        PHPRC=/opt/sybase/OCS-15_0/config
        LD_LIBRARY_PATH=/opt/sybase/OCS-15_0/php/php536_64/lib:/opt/sybase/OCS-15_0/lib
    

    您的/ ect /个人资料应如下所示:

        # ------------------------------------
        #    Sybase Product Environment variables
        # ------------------------------------
        SYBASE="/opt/sybase"
        export SYBASE
        SYBASE_OCS="OCS-15_0"
        export SYBASE_OCS
        INCLUDE="/opt/sybase/OCS-15_0/include":$INCLUDE
        export INCLUDE
        LIB="/opt/sybase/OCS-15_0/lib":$LIB
        export LIB
        PATH="/opt/sybase/OCS-15_0/bin":$PATH
        export PATH
        LD_LIBRARY_PATH="/opt/sybase/OCS-15_0/php/php536_64/lib:/opt/sybase/OCS-15_0/lib:/opt/sybase/OCS-15_0/lib3p64:/opt/sybase/OCS-15_0/lib3p":$LD_LIBRARY_PATH
        export LD_LIBRARY_PATH
    
        PHPRC="/opt/sybase/OCS-15_0/config"
        export PHPRC
    
        JAVA_HOME="/opt/sybase/jre32"
        export JAVA_HOME
    
        RIBO_HOME="/opt/sybase/jutils-3_0/ribo"
        export RIBO_HOME
        # ------------------------------------
    

    然后,您还需要修改位于根目录/ opt / sybase的interfaces文件,看起来像这样,请不要使用它,使用您的信息:

        dev
            master tcp ether dev.company.com 4425
            query tcp ether dev.company.com 4425
    
        prod
            master tcp ether prod.company.com 4425
            query tcp ether prod.company.com 4425
    
        ribo
            master tcp ether testhost.company.com 5005
            query tcp ether testhost.company.com 5005
    

    您还需要修改ocs.cfg以使PHP正确启动,这位于/opt/sybase/OCS-15_0/config文件夹中,如下所示:

        ;;;;;;;;;;;
        ; This is the default external configuration definition file. Feel free
        ; to add your own customizations.
        ;
        [DEFAULT]
        ; This is the default section loaded by applications that use
        CS_SEC_ENCRYPTION = CS_TRUE
        [ANSI_ESQL]
        ; This section defines configuration which an ANSI conforming
        CS_CAP_RESPONSE = CS_RES_NOSTRIPBLANKS
        CS_EXTRA_INF = CS_TRUE
        CS_ANSI_BINDS = CS_TRUE
        CS_OPT_ANSINULL = CS_TRUE
        CS_OPT_ANSIPERM = CS_TRUE
        CS_OPT_STR_RTRUNC = CS_TRUE
        CS_OPT_ARITHABORT = CS_FALSE
        CS_OPT_TRUNCIGNORE = CS_TRUE
        CS_OPT_ARITHIGNORE = CS_FALSE
        CS_OPT_ISOLATION = CS_OPT_LEVEL3
        CS_OPT_CHAINXACTS = CS_TRUE
        CS_OPT_CURCLOSEONXACT = CS_TRUE
        CS_OPT_QUOTED_IDENT = CS_TRUE
        ; End of default sections
    
        [isql]
        CS_SEC_ENCRYPTION = CS_TRUE
    
        [PHP]
        CS_SEC_ENCRYPTION = CS_TRUE
    
        ; This is a sample section showing how you might alter configuration
        ; properties for you Embedded SQL application.
        [SAMPLE_ESQL]
        ; use most of the ANSI properties defined above
        include = ANSI_ESQL
        ; but override some default properties
        CS_OPT_CHAINXACTS = CS_FALSE ; run in autocommit mode
        ;;;;;;;;;
    

    注意:检查同一目录中是否存在php.ini文件非常关键/opt/sybase/OCS-15_0/config(这指向exention文件,查看环境变量LD_LIBRARY_PATH="/opt/sybase/OCS-15_0/php/php536_64/lib

    你的php.ini应该是这样读的:

        extension=/opt/sybase/OCS-15_0/php/php536_64/lib/sybaseasephp.so
    

    步骤3)从源代码编译PHP,再次Sybase调用64位。

    我将源代码下载到/opt/php-5.3.6以保持持久性,并为Linux安装大多数应用程序。

        cd to /opt/php-5.3.6 
    
        ./configure  
    

    非常重要要注意,这是我们陷入困境的地方,如果我选择任何其他配置选项而不是默认./configure,PHP将无法加载,错误如下:

    btran@sls-baonix:/opt/php-5.3.6$ php ~/test-dev.php
    PHP Warning:  PHP Startup: Unable to load dynamic library
    '/opt/sybase/OCS-15_0/php/php536_64/lib/sybaseasephp.so' -
    /opt/sybase/OCS-15_0/php/php536_64/lib/sybaseasephp.so: undefined
    symbol: executor_globals in Unknown on line 0
    
    Fatal error: Call to undefined function sybase_connect() in
    /home/btran/test-dev.php on line 10
    ]
    

    我们需要其他选项的原因是我们还需要它来使用Apache。我们现在已经开始使用PHP,但我们需要能够从网站启动PHP,因此依赖关系是PHP旁边支持Sybase,它还需要支持Apache。如果有任何PHP专家有解决方案,请跳进去帮助我们。