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


Why does the connection to ASE fail when password encryption is required?

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

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

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

下面是这个问题的解决方案,能够从具有PHP版本5.3.6的Linux 64位基础计算机和Sybase CTISQL Utility/15.7/P-EBF19975 ESD #3/DRV.15.7.0.3的Sybase驱动程序进行连接。虽然我们让它工作,但除此之外,我们还需要让 Apache 工作,我希望 Sybase 支持能够帮助我们解决这个问题,以及他们在下面解决我们的问题。我在这里发布这个是为了大家的利益。 注意:AFAICT,这不是 Sybase 支持的解决方案。 请自行承担风险。

这需要做很少的事情才能起作用:

  1. 我使用了最新的 Debian Stable 6.05 挤压 64 位
  2. 我已经安装了从Sybase下载的ebf19977(带有开放客户端的开发人员工具包,是的,数字已关闭,这不是错误,安装时会看到
  3. 从 php.net 网站下载 PHP 5.3.6 以从源代码编译。

步骤1) 我认为应该很容易设置它。 确保您具有 sudo 访问权限

步骤2) 要安装开发人员工具包,您需要键入安装程序.bin文件所在的整个路径,例如键入sudo/home/btran/ebf19977/setup.bin,这将开始安装,几乎按照那里的说明安装OpenClient及其相关工具。 确保已安装"打开客户端"和"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/profile 应该看起来像这样:

    # ------------------------------------
    #    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 的接口文件进行修改,使其看起来像这样,请不要使用这个,使用您的信息:

    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专家对此有解决方案,请加入并帮助我们。